Korenska ranljivost v kompletu orodij za upravljanje paketov Snap

Qualys je prepoznal tretjo nevarno ranljivost letos (CVE-2022-3328) v pripomočku snap-confine, ki je opremljen s korensko zastavico SUID in ga kliče proces snapd za ustvarjanje izvršljivega okolja za aplikacije, distribuirane v samostojnih paketih. v formatu snap. Ranljivost omogoča lokalnemu neprivilegiranemu uporabniku, da doseže izvajanje kode kot root v privzeti konfiguraciji Ubuntu. Težava je odpravljena v izdaji snapd 2.57.6. Posodobitve paketov so bile izdane za vse podprte veje Ubuntuja.

Zanimivo je, da je bila zadevna ranljivost predstavljena med postopkom odpravljanja podobne februarske ranljivosti v snap-confine. Raziskovalcem je uspelo pripraviti delujoč exploit, ki omogoča korenski dostop do strežnika Ubuntu Server 22.04, ki poleg ranljivosti v snap-confine vključuje tudi dve ranljivosti v multipathd procesu (CVE-2022-41974, CVE-2022-41973) , povezane z obidenjem preverjanja pooblastil pri prenosu privilegiranih ukazov in nevarnim delom s simbolnimi povezavami.

Ranljivost v snap-confine je posledica dirkalnega stanja v funkciji must_mkdir_and_open_with_perms(), dodani za zaščito pred zamenjavo imenika /tmp/snap.$SNAP_NAME s simbolično povezavo po preverjanju lastnika, vendar pred klicem sistema za pripenjanje klic za povezovanje-vpetje imenikov vanj za paket v formatu snap. Dodana zaščita je bila preimenovanje imenika /tmp/snap.$SNAP_NAME v drug imenik v /tmp z naključnim imenom, če obstaja in ni v lasti rootja.

Pri izkoriščanju operacije preimenovanja imenika /tmp/snap.$SNAP_NAME so raziskovalci izkoristili dejstvo, da snap-confine ustvari tudi imenik /tmp/snap.rootfs_XXXXXX za koren vsebine paketa snap. Del imena »XXXXXX« naključno izbere mkdtemp(), vendar je mogoče paket z imenom »rootfs_XXXXXX« preveriti v funkciji sc_instance_name_validate (tj. ideja je, da bo $SNAP_NAME nastavljen na »rootfs_XXXXXX« in nato operacija preimenovanja bo imenik /tmp/snap.rootfs_XXXXXX prepisal s korenskim posnetkom).

Da bi dosegli hkratno uporabo /tmp/snap.rootfs_XXXXXX in preimenovanje /tmp/snap.$SNAP_NAME, sta bila zagnana dva primerka snap-confine. Ko je prvi primerek ustvaril /tmp/snap.rootfs_XXXXXX, bi se postopek blokiral in drugi primerek bi se začel z imenom paketa rootfs_XXXXXX, zaradi česar bi začasni imenik /tmp/snap.$SNAP_NAME drugega primerka postal korenski imenik /tmp/snap .rootfs_XXXXXX prvega. Takoj po zaključku preimenovanja se je drugi primerek zrušil in /tmp/snap.rootfs_XXXXXX je bil nadomeščen z manipulacijo pogojev tekmovanja, kot pri izkoriščanju februarske ranljivosti. Po zamenjavi je bila zapora izvajanja odstranjena iz prve instance in napadalci so pridobili popoln nadzor nad korenskim imenikom snap.

Zadnji korak je bil ustvariti simbolno povezavo /tmp/snap.rootfs_XXXXXX/tmp, ki jo je uporabila funkcija sc_bootstrap_mount_namespace() za povezovanje zapisljivega pravega imenika /tmp s katerim koli imenikom v datotečnem sistemu, od klica mount() sledi simbolnim povezavam pred namestitvijo. Takšno namestitev blokirajo omejitve AppArmor, toda za obhod te blokade je izkoriščanje uporabilo dve pomožni ranljivosti v multipathd.

Vir: opennet.ru

Dodaj komentar