Root ranjivost u Snap Package Management Toolkitu

Qualys je identifikovao treću opasnu ranjivost ove godine (CVE-2022-3328) u uslužnom programu snap-confine, koji dolazi sa SUID root zastavicom i poziva ga snapd proces da stvori izvršno okruženje za aplikacije distribuirane u samostalnim paketima u snap formatu. Ranjivost omogućava lokalnom neprivilegovanom korisniku da postigne izvršenje koda kao root u podrazumevanoj Ubuntu konfiguraciji. Problem je riješen u izdanju snapd 2.57.6. Objavljena su ažuriranja paketa za sve podržane grane Ubuntu-a.

Zanimljivo je da je ranjivost u pitanju uvedena tokom procesa popravljanja slične ranjivosti u februaru u snap-confineu. Istraživači su bili u mogućnosti da pripreme radni exploit koji omogućava root pristup Ubuntu Serveru 22.04, koji, osim ranjivosti u snap-confine, uključuje i dvije ranjivosti u multipathd procesu (CVE-2022-41974, CVE-2022-41973) , povezano sa zaobilaženjem provjere ovlaštenja prilikom prijenosa privilegiranih naredbi i nesigurnog rada sa simboličkim vezama.

Ranjivost u snap-confine je uzrokovana uvjetom utrke u funkciji must_mkdir_and_open_with_perms(), dodanoj radi zaštite od zamjene direktorija /tmp/snap.$SNAP_NAME simboličkom vezom nakon provjere vlasnika, ali prije pozivanja sistema za montiranje poziv za povezivanje direktorija u njega za paket u snap formatu. Dodatna zaštita je bila preimenovanje /tmp/snap.$SNAP_NAME direktorija u drugi direktorij u /tmp sa nasumičnim imenom ako postoji i nije u vlasništvu root-a.

Prilikom iskorištavanja /tmp/snap.$SNAP_NAME operacije preimenovanja direktorija, istraživači su iskoristili činjenicu da snap-confine također kreira /tmp/snap.rootfs_XXXXXX direktorij za korijen sadržaja snap paketa. "XXXXXX" dio imena je nasumično odabran od strane mkdtemp(), ali paket pod nazivom "rootfs_XXXXXX" može biti potvrđen u funkciji sc_instance_name_validate (tj. ideja je da će $SNAP_NAME biti postavljen na "rootfs_XXXXXX", a zatim operacija preimenovanja će rezultirati prepisivanjem direktorija /tmp/snap.rootfs_XXXXXX s root snap-om).

Da bi se postigla simultana upotreba /tmp/snap.rootfs_XXXXXX i preimenovanja /tmp/snap.$SNAP_NAME, pokrenute su dvije instance snap-confine. Jednom kada je prva instanca kreirala /tmp/snap.rootfs_XXXXXX, proces bi se blokirao, a druga instanca bi započela s imenom paketa rootfs_XXXXXX, uzrokujući da privremeni direktorij druge instance /tmp/snap.$SNAP_NAME postane korijenski direktorij /tmp/snap .rootfs_XXXXXX od prvog. Odmah nakon što je preimenovanje završeno, druga instanca se srušila, a /tmp/snap.rootfs_XXXXXX je zamijenjen manipulacijom uvjeta rase, kao kada se koristi ranjivost u februaru. Nakon zamjene, zaključavanje izvršenja je uklonjeno iz prve instance i napadači su dobili potpunu kontrolu nad korijenskim direktorijem snap-a.

Poslednji korak je bio kreiranje simbolične veze /tmp/snap.rootfs_XXXXXX/tmp, koju je koristila funkcija sc_bootstrap_mount_namespace() za povezivanje stvarnog direktorijuma za pisanje /tmp za bilo koji direktorijum u sistemu datoteka, od poziva mount() prati simboličke veze prije montiranja. Takvo montiranje je blokirano ograničenjima AppArmor-a, ali da bi zaobišli ovaj blok, eksploatacija je koristila dvije pomoćne ranjivosti u multipathd-u.

izvor: opennet.ru

Dodajte komentar