Root ranljivost v orodju za upravljanje paketov Snap

Podjetje Qualys je odkrilo tretjo resno ranljivost v letošnjem letu (CVE-2022-3328) v orodju snap-confine, ki se dostavlja s flagom SUID root in ga proces snapd kliče za ustvarjanje izvršnega okolja za aplikacije, ki jih distribuirajo samostojni paketi v formatu snap. Ranljivost omogoča lokalnemu nepriviligiranemu uporabniku, da dobi izvrševanje kode s pravicami root v privzeti konfiguraciji Ubuntu. Težava je odpravljena v različici snapd 2.57.6. Posodobitve paketov so bile izdane za vse podprte veje Ubuntu.

Zanimivo je, da je bila obravnavana ranljivost vključena v procesu odprave podobne ranljivosti februarja v snap-confine. Raziskovalcem je uspelo pripraviti delujoč eksploit, ki omogoča root dostop v Ubuntu Server 22.04, kjer sta poleg ranljivosti v snap-confine vključeni še dve ranljivosti v procesu multipathd (CVE-2022-41974, CVE-2022-41973), ki sta povezani z obvodom overitve pristojnosti pri pošiljanju privilegiranih ukazov in nevarnim ravnanjem s simboličnimi povezavami.

Ranljivost v snap-confine povzroča stanje dirke v funkciji must_mkdir_and_open_with_perms(), ki je bila dodana za zaščito pred nadomeščanjem imenika /tmp/snap.$SNAP_NAME s simbolično povezavo po preverjanju lastništva, vendar pred klicem sistemskega klica mount za bind-montiranje imenikov za paket v formatu snap. Dodatna zaščita se je zmanjšala na preimenovanje imenika /tmp/snap.$SNAP_NAME v drug imenik v /tmp z naključnim imenom, če ta obstaja in ne pripada uporabniku root.

Pri izkoriščanju operacije preimenovanja imenika /tmp/snap.$SNAP_NAME so raziskovalci izkoristili dejstvo, da snap-confine tudi ustvari imenik /tmp/snap.rootfs_XXXXXX za koren vsebine snap paketa. Del 'XXXXXX' v imenu se izbere naključno s pomočjo mkdtemp(), toda paket z imenom 'rootfs_XXXXXX' lahko prestane preverjanje v funkciji sc_instance_name_validate (t.j. ideja je, da ime $SNAP_NAME prevzame vrednost 'rootfs_XXXXXX' in nato bo operacija preimenovanja povzročila prepis imenika /tmp/snap.rootfs_XXXXXX z korenom snap).

Za dosego istočasne rabe /tmp/snap.rootfs_XXXXXX in preimenovanja /tmp/snap.$SNAP_NAME sta bila zagnana dva primerka snap-confine. Ko je prvi primerek ustvaril /tmp/snap.rootfs_XXXXXX, se je proces zaklenil in zagnal drugi primerek z imenom paketa rootfs_XXXXXX, kar je povzročilo, da je začasni imenik /tmp/snap.$SNAP_NAME drugega primerka postal korenski imenik /tmp/snap.rootfs_XXXXXX prvega. Takoj po izvedbi preimenovanja se je drugi primerek nenadoma končal, medtem ko je bil /tmp/snap.rootfs_XXXXXX zamenjan z manipulacijo stanja dirke, kot pri izkoriščanju februarske ranljivosti. Po zamenjavi je bila zaklenitev prvega primerka odstranjena, napadalci pa so pridobili popoln nadzor nad korenskim imenikom snap.

V zadnji fazi je bila ustvarjena simbolična povezava /tmp/snap.rootfs_XXXXXX/tmp, ki jo je funkcija sc_bootstrap_mount_namespace() uporabila za bind-montiranje dostopnega za pisanje dejanskega imenika /tmp v kateri koli imenik FS, saj klic mount() sledi simboličnim povezavam pred montiranjem. Takšno montiranje je blokirano z omejitvami AppArmor, vendar je bila za obhod te blokade v izkoriščanju izkoriščenih dve pomožni ranljivosti v multipathd.

Izvor: opennet.ru

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster