Root ranjivost u alatu za upravljanje paketima Snap

Qualys je identificirao treću opasnu ranjivost ove godine (CVE-2022-3328) u uslužnom programu snap-confine, koji dolazi sa SUID root oznakom i poziva ga snapd proces za stvaranje izvršnog okruženja za aplikacije distribuirane u samostalnim paketima u snap formatu. Ranjivost omogućuje lokalnom neprivilegiranom korisniku da postigne izvršenje koda kao root u zadanoj Ubuntu konfiguraciji. Problem je riješen u izdanju snapd 2.57.6. Ažuriranja paketa su izdana za sve podržane grane Ubuntua.

Zanimljivo je da je predmetna ranjivost uvedena tijekom procesa popravljanja slične ranjivosti iz veljače u snap-confine. Istraživači su uspjeli pripremiti radni exploit koji pruža root pristup Ubuntu Serveru 22.04, koji, osim ranjivosti u snap-confine, također uključuje dvije ranjivosti u multipathd procesu (CVE-2022-41974, CVE-2022-41973) , povezan sa zaobilaženjem provjere ovlaštenja prilikom prijenosa privilegiranih naredbi i nesigurnim radom sa simboličkim vezama.

Ranjivost u snap-confine uzrokovana je uvjetom utrke u funkciji must_mkdir_and_open_with_perms(), dodanoj za zaštitu od zamjene direktorija /tmp/snap.$SNAP_NAME simboličkom vezom nakon provjere vlasnika, ali prije pozivanja sustava montiranja poziv za vezanje-montiranje direktorija u njega za paket u snap formatu. Dodatna zaštita bila je preimenovanje direktorija /tmp/snap.$SNAP_NAME u drugi direktorij u /tmp s nasumičnim nazivom ako postoji i nije u vlasništvu roota.

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

Kako bi se postigla istovremena upotreba /tmp/snap.rootfs_XXXXXX i preimenovanje /tmp/snap.$SNAP_NAME, pokrenute su dvije instance snap-confine. Nakon što bi prva instanca stvorila /tmp/snap.rootfs_XXXXXX, proces bi se blokirao, a druga bi instanca započela s nazivom paketa rootfs_XXXXXX, uzrokujući da privremeni direktorij /tmp/snap.$SNAP_NAME druge instance postane korijenski direktorij /tmp/snap .rootfs_XXXXXX prvog. Odmah nakon što je preimenovanje dovršeno, druga instanca se srušila, a /tmp/snap.rootfs_XXXXXX je zamijenjen manipulacijom uvjeta utrke, kao kod iskorištavanja ranjivosti iz veljače. Nakon zamjene, zaključavanje izvršenja je uklonjeno iz prve instance i napadači su stekli potpunu kontrolu nad korijenskim direktorijem snap-a.

Posljednji korak bio je stvaranje simboličke veze /tmp/snap.rootfs_XXXXXX/tmp, koju je koristila funkcija sc_bootstrap_mount_namespace() za povezivanje stvarnog direktorija /tmp koji se može pisati na bilo koji direktorij u datotečnom sustavu, budući da poziv mount() slijedi simboličke veze prije montiranja. Takvo montiranje je blokirano ograničenjima AppArmora, ali da bi zaobišao ovu blokadu, exploit je koristio dvije pomoćne ranjivosti u multipathd.

Izvor: opennet.ru

Dodajte komentar