A Qualys vállalat idén harmadik alkalommal fedezte fel a snap-confine segédprogramban egy veszélyes sebezhetőséget (CVE-2022-3328), amely root SUID jelzéssel van ellátva és a snapd folyamat által aktiválva van egy végrehajtható környezet létrehozásához a snap formátumban terjesztett önálló csomagok számára. A sebezhetőség lehetővé teszi, hogy egy helyi, nem privilegizált felhasználó root jogosultságú kódot futtasson az alapértelmezett Ubuntu konfigurációban. A probléma javítva lett a snapd 2.57.6 kiadásában. Csomagfrissítések érkeztek minden támogatott Ubuntu ágra.
Érdekes, hogy a megvitatott sebezhetőség hasonló, februári sebezhetőség javítása során jött létre a snap-confine-ban. A kutatóknak sikerült egy működő exploittal készülniük, amely root-hozzáférést biztosít az Ubuntu Server 22.04 rendszerben, amelyben a snap-confine sebezhetősége mellett további két sebezhetőség is szerepel a multipathd folyamatban (CVE-2022-41974, CVE-2022-41973), amelyek a privilegizált parancsok átkonfigurálásának megkerülésével és a szimbolikus linkek nem biztonságos kezelésével kapcsolatosak.
A snap-confine sebezhetősége egy versenyhelyzetből adódik a must_mkdir_and_open_with_perms() funkcióban, amelyet a /tmp/snap.$SNAP_NAME mappa szimbolikus linkké való cseréje ellen védendő adtak hozzá, miután ellenőrizték a tulajdonost, de még a mount rendszerhívás végrehajtása előtt a snap formátumú csomagok mappáit bind-montálásra. A hozzáadott védelem abból állt, hogy a /tmp/snap.$SNAP_NAME mappát másik, véletlen névvel ellátott mappába nevezték át, ha létezett és nem a root felhasználóé.
A /tmp/snap.$SNAP_NAME mappa átkonfigurálása során a kutatók kihasználják, hogy a snap-confine egy /tmp/snap.rootfs_XXXXXX mappát is létrehoz a snap csomag tartalmának gyökeréhez. Az 'XXXXXX' rész neve véletlenszerűen van kiválasztva az mkdtemp() segítségével, de a 'rootfs_XXXXXX' nevű csomag átmehet a sc_instance_name_validate funkció ellenőrzésén (vagyis az elképzelés az, hogy a $SNAP_NAME neve 'rootfs_XXXXXX'-ra változzon, és akkor az átkonfigurálási művelet a /tmp/snap.rootfs_XXXXXX mappa felülírásához vezet a snap gyökerével).
A két példányú snap-confine indításával egyidejűleg elérhető volt a /tmp/snap.rootfs_XXXXXX használata és a /tmp/snap.$SNAP_NAME átnevezése. Amint az első példány létrehozta a /tmp/snap.rootfs_XXXXXX-t, a folyamat blokkolódott, és elindult a második példány rootfs_XXXXXX nevű csomaggal, amely miatt a második példány ideiglenes könyvtára, a /tmp/snap.$SNAP_NAME, az első példány gyökér könyvtárává vált. Az áthelyezés befejezésével a második példány összeomlott, és a /tmp/snap.rootfs_XXXXXX helyettesítve lett egy versenyhelyzet manipulációjával, ahogyan azt a februári sebezhetőség kiaknázásakor tapasztalhattuk. Az első példány blokkolásának feloldása után a támadók teljes ellenőrzést nyertek a snap gyökér könyvtára felett.
Az utolsó szakaszban létrejött egy szimbolikus link a /tmp/snap.rootfs_XXXXXX/tmp néven, amelyet a sc_bootstrap_mount_namespace() függvény használt a bind-montáláshoz, hogy a valós, írásra elérhető /tmp könyvtárat bármely fájlrendszer könyvtárba be tudja kötni, mivel a mount() hívása a szimbolikus linkeket követi a montálás előtt. Az ilyen montálást az AppArmor korlátozások blokkolják, de a blokkolás megkerülésére az exploitban két segédsebezhetőséget alkalmaztak a multipathd-ben.
Forrás: opennet.ru
