Qualys teatas kolmandast tõsise haavatavusest (CVE-2022-3328) snap-confine utiliidis, mis on pakitud SUID root lipuga ja mida snapd protsess kutsub esile, et luua täidesaatvat keskkonda iseseisvates snap-formaadis rakendustes. Haavatavus võimaldab kohalikul mitteprivilegeeritud kasutajal saada root-õigusi Ubuntu vaikekonfiguratsioonis. Probleem on lahendatud snapd 2.57.6 versioonis. Paketiuuendused on välja antud kõigile toetatud Ubuntu harudele.
Huvitav on, et arutletav haavatavus lisati sarnase veebruarikuu haavatavuse parandamise käigus snap-confine-s. Uurijatel õnnestus luua töötav eksploit, mis annab root-juurdepääsu Ubuntu Server 22.04, kus lisaks snap-confine haavatavusele on seotud kaks haavatavust multipathd protsessis (CVE-2022-41974, CVE-2022-41973), mis on seotud privileegide kontrollimise ümberlükkamise ja sümboolsete linkidega töötamisega, mis ei ole turvaline.
Snap-confine haavatavus tuleneb võistlusolukorrast funktsioonis must_mkdir_and_open_with_perms(), mis lisati selleks, et kaitsta kausta /tmp/snap.$SNAP_NAME sümboolse lingi asendamise eest pärast omaniku kontrollimist, kuid enne süsteemi kõne kutsumist mount, et bind-mountida paketi snap-formaadis katalooge sinna. Lisatud kaitse koosnes /tmp/snap.$SNAP_NAME kataloogi ümbernimetamisest teiseks kataloogiks /tmp-s, mille nimi on juhuslik, kui see eksisteerib ja ei kuulu root kasutajale.
Ekspordimise ajal, kui katalooge /tmp/snap.$SNAP_NAME ümber nimetatakse, kasutasid uurijad seda, et snap-confine loob ka katalooge /tmp/snap.rootfs_XXXXXX, mis on snap paketis sisalduva põhisisu jaoks. Osa «XXXXXX» nimes valitakse juhuslikult mkdtemp() abil, kuid paketi nimega «rootfs_XXXXXX» võib sc_instance_name_validate funktsiooni kontrolli läbi pääseda (st idee on selles, et nimi $SNAP_NAME omandab väärtuse «rootfs_XXXXXX» ja seega toob ümbernimetamise teostamine kaasa katalooge /tmp/snap.rootfs_XXXXXX ümberkirjutamise snap juuriks).
Selleks, et saavutada samaaegne kasutamine /tmp/snap.rootfs_XXXXXX ja ümbernimetamine /tmp/snap.$SNAP_NAME, käivitati kaks eksemplari snap-confine'ist. Niipea kui esimene eksemplar lõi /tmp/snap.rootfs_XXXXXX, lukustus protsess ja käivitati teine eksemplar nimega rootfs_XXXXXX, mis tõi kaasa selle, et teise eksemplari ajutine kataloog /tmp/snap.$SNAP_NAME muutus esimese /tmp/snap.rootfs_XXXXXX juurkataloogiks. Kohe pärast ümbernimetamist lõpetas teine eksemplar töö ning /tmp/snap.rootfs_XXXXXX asendati olukorra võistluse manipuleerimisega, nagu veebruarikuises haavatavuses. Pärast asendamist vabastati esimese eksemplari töö ning ründajad said täieliku kontrolli snap'i juurkatalooge üle.
Viimasel etapil loodi sümboolne link /tmp/snap.rootfs_XXXXXX/tmp, mida funktsioon sc_bootstrap_mount_namespace() kasutas, et bind-monteerida kirjutamiseks saadaval tõeline kataloog /tmp igasse FS katalooge, kuna mount() funktsioon järgib sümboolseid linke enne montaaži. Selline monteerimine blokeeritakse AppArmori piirangutega, kuid selle blokeeringu mööda hiilimiseks kasutati eksploitis kahte abiviga multipathd-s.
Allikas: opennet.ru
