Lokale rodsårbarheder i Snap-pakkehåndteringsværktøjssæt

Qualys har identificeret to sårbarheder (CVE-2021-44731, CVE-2021-44730) i snap-confine-værktøjet, der er leveret med SUID-rodflaget og kaldet af snapd-processen for at skabe et eksekverbart miljø for applikationer leveret i selvstændige pakker i snap-formatet. Sårbarhederne tillader en lokal uprivilegeret bruger at udføre kode med root-rettigheder på systemet. Problemerne er løst i dagens snapd-pakkeopdatering til Ubuntu 21.10, 20.04 og 18.04.

Den første sårbarhed (CVE-2021-44730) tillader et angreb gennem hard link-manipulation, men kræver deaktivering af systemhard link-beskyttelse (indstil sysctl fs.protected_hardlinks til 0). Problemet er forårsaget af forkert verifikation af placeringen af ​​de eksekverbare filer i hjælpeprogrammerne snap-update-ns og snap-discard-ns, der kører som root. Stien til disse filer blev beregnet i sc_open_snapd_tool()-funktionen baseret på dens egen sti fra /proc/self/exe, som giver dig mulighed for at oprette et hårdt link til snap-confine i din mappe og placere dine egne versioner af snap- update-ns og snap- utilities i denne mappe.discard-ns. Efter at have kørt via et hårdt link, vil snap-confine med root-rettigheder starte snap-update-ns og snap-discard-ns filerne fra den aktuelle mappe, erstattet af angriberen.

Den anden sårbarhed er forårsaget af en racetilstand og kan udnyttes i standard Ubuntu Desktop-konfigurationen. For at udnyttelsen skal fungere med succes i Ubuntu Server, skal du vælge en af ​​pakkerne fra afsnittet "Featured Server Snaps", når du installerer. Race-tilstanden er tydelig i funktionen setup_private_mount() kaldet under forberedelsen af ​​monteringspunktets navneområde for snap-pakken. Denne funktion opretter en midlertidig mappe "/tmp/snap.$SNAP_NAME/tmp" eller bruger en eksisterende til at binde-mount mapper til en snap-pakke ind i den.

Da navnet på den midlertidige mappe er forudsigelig, kan en angriber erstatte dets indhold med et symbolsk link efter at have tjekket ejeren, men før han kalder opkaldet til mount system. For eksempel kan du oprette et symbollink "/tmp/snap.lxd/tmp" i mappen /tmp/snap.lxd, der peger på en vilkårlig mappe, og et kald til mount() vil følge symbollinket og montere mappen i snap navneområde. På lignende måde kan du montere dit indhold i /var/lib og ved at erstatte /var/lib/snapd/mount/snap.snap-store.user-fstab organisere monteringen af ​​dit /etc-bibliotek i navnerummet på snap-pakken til at organisere indlæsning af dit bibliotek fra med root-rettigheder ved at erstatte /etc/ld.so.preload.

Det bemærkes, at oprettelse af en udnyttelse viste sig at være en ikke-triviel opgave, da snap-confine-værktøjet er skrevet i Go ved hjælp af sikre programmeringsteknikker, har beskyttelse baseret på AppArmor-profiler, filtrerer systemkald baseret på seccomp-mekanismen og bruger mount navnerummet til isolation. Men forskerne var i stand til at forberede en fungerende udnyttelse for at få root-rettigheder på systemet. Udnyttelseskoden vil blive offentliggjort om et par uger efter, at brugerne har installeret de medfølgende opdateringer.

Kilde: opennet.ru

Tilføj en kommentar