Qualys har identificeret to sårbarheder (CVE-2021-44731, CVE-2021-44730) i snap-confine-værktøjet, som leveres med SUID root-flaget og kaldes af snapd-processen for at oprette et udførelsesmiljø for applikationer i selvstændige pakker i snap-format. Sårbarhederne gør det muligt for en lokal ikke-privilegeret bruger at udføre kode med root-rettigheder i systemet. Problemerne er blevet løst i dagens opdatering af snapd-pakkerne for Ubuntu 21.10, 20.04 og 18.04.
Den første sårbarhed (CVE-2021-44730) muliggør et angreb gennem manipulation af hårde links, men kræver, at systembeskyttelsen for hårde links er deaktiveret (sætte sysctl fs.protected_hardlinks til 0). Problemet skyldes en utilstrækkelig kontrol af placeringen af de eksekverbare filer fra værktøjerne snap-update-ns og snap-discard-ns, som køres med root-rettigheder. Stien til disse filer blev beregnet i funktionen sc_open_snapd_tool() baseret på sin egen sti fra /proc/self/exe, hvilket muliggør oprettelse af et hårdt link til snap-confine i sin egen mappe og placering af sine egne versioner af værktøjerne snap-update-ns og snap-discard-ns i denne mappe. Når snap-confine startes via det hårde link med root-rettigheder, vil det udføre de filer, som angriberen har indsat fra den aktuelle mappe.
Den anden sårbarhed skyldes en race condition og kan udnyttes i den standardkonfiguration af Ubuntu Desktop. For at udnyttelsen fungerer korrekt på Ubuntu Server, kræves det, at der vælges en af pakkerne i sektionen 'Featured Server Snaps' under installationen. Race conditionen viser sig i funktionen setup_private_mount(), som kaldes under forberedelsen af namespaces for montérpunkterne for snap-pakken. Denne funktion opretter en midlertidig mappe '/tmp/snap.$SNAP_NAME/tmp' eller bruger allerede eksisterende mapper til bind-montéringer i den til snaps i formatet.
Da navnet på den midlertidige mappe er forudsigeligt, kan en angriber erstatte dens indhold med et symbolsk link i det øjeblik, efter at ejerskabet er blevet kontrolleret, men før systemopkaldet mount kaldes. For eksempel kan man oprette et symbolsk link "\/tmp\/snap.lxd\/tmp" i mappen \/tmp\/snap.lxd, der peger på en vilkårlig mappe, og opkaldet mount() vil følge det symbolske link og montere mappen i snap-navnerummet. Tilsvarende kan man montere sit eget indhold i \/var\/lib og organisere montering af sin mappe \/etc i snap-pakkens navnerum ved at erstatte \/var\/lib\/snapd\/mount\/snap.snap-store.user-fstab.
Det bemærkes, at det at skabe et exploit viste sig at være en noget vanskelig opgave, da værktøjet snap-confine er skrevet i Go med brug af sikre programmeringsmetoder, har beskyttelse baseret på AppArmor-profiler, filtrerer systemopkald ved hjælp af seccomp-mekanismer og anvender navnerum til montering for isolation. Alligevel har forskerne formået at forberede et fungerende exploit til at opnå root-rettigheder i systemet. Koden til exploit vil blive offentliggjort om et par uger, efter at brugerne har installeret de pågældende opdateringer.
Kilde: opennet.ru
