Podjetje Qualys je odkrilo dve ranljivosti (CVE-2021-44731, CVE-2021-44730) v orodju snap-confine, ki se dobavlja z zastavico SUID root in ga kliče proces snapd za oblikovanje izvršnega okolja za aplikacije, dobavljene v samostojnih paketih v formatu snap. Ranljivosti omogočajo lokalnemu neprivilegiranemu uporabniku, da doseže izvajanje kode s pravicami root v sistemu. Te težave so bile odpravljene v današnji posodobitvi paketov snapd za Ubuntu 21.10, 20.04 in 18.04.
Prva ranljivost (CVE-2021-44730) omogoča napad preko manipulacije z trdimi povezavami, vendar zahteva, da se izklopi sistemska zaščita trdih povezav (nastavitev sysctl fs.protected_hardlinks na 0). Težava je povzročena z nepravilno preverjanjem lokacije izvršnih datotek pomožnih programov snap-update-ns in snap-discard-ns, ki se zaženejo s pravicami root. Pot do teh datotek se izračuna v funkciji sc_open_snapd_tool() na podlagi lastne poti iz /proc/self/exe, kar omogoča ustvarjanje trde povezave do snap-confine v svojem imeniku in namestitev svojih različic orodij snap-update-ns in snap-discard-ns v ta imenik. Po zagonu preko trde povezave snap-confine s pravicami root v trenutnem imeniku zažene datoteke snap-update-ns in snap-discard-ns, ki jih je nadzoroval napadalec.
Druga ranljivost je povzročena s stanjem tekme in se lahko izkorišča v privzeti konfiguraciji Ubuntu Desktop. Za uspešno delovanje izkoriščanja v Ubuntu Serverju je potrebno med namestitvijo izbrati enega od paketov iz razdelka 'Featured Server Snaps'. Stanje tekme se kaže v funkciji setup_private_mount(), ki se kliče med pripravo imenskih prostorov točk za montažo za paket snap. Ta funkcija ustvari začasni imenik '/tmp/snap.$SNAP_NAME/tmp' ali uporabi že obstoječega za bind-montiranje v njega imenikov za paket v formatu snap.
Ker sajta imena začasnega direktorija predvidljiv, lahko napadalec zamenja njegovo vsebino s simbolično povezavo v trenutku po preverjanju lastništva, vendar pred klicem sistemskega klica mount. Na primer, lahko ustvarite simbolično povezavo "/tmp/snap.lxd/tmp" v direktoriju /tmp/snap.lxd, ki kaže na poljubni direktorij, in klic mount() sledi simbolični povezavi ter namesti direktorij v snap imenskem prostoru. Na podoben način lahko priložite svoje vsebine v /var/lib in preko zamenjanja /var/lib/snapd/mount/snap.snap-store.user-fstab omogočite montiranje svojega direktorija /etc v snap paketu, da omogočite nalaganje svoje knjižnice s pravicami root preko zamenjave /etc/ld.so.preload.
Ugotovljeno je, da je bilo ustvarjanje exploita zahtevna naloga, saj je orodje snap-confine napisano v jeziku Go z uporabo tehnik varnega programiranja, ima zaščito na podlagi profilov AppArmor, izvaja filtriranje sistemskih klicev na podlagi mehanizma seccomp in uporablja imenske prostore za izolacijo montiranja. Kljub temu so raziskovalcem uspelo pripraviti delujoč exploit za pridobitev pravic root v sistemu. Koda exploita bo objavljena čez nekaj tednov, potem ko uporabniki namestijo dane posodobitve.
Izvor: opennet.ru
