Gyökér sérülékenység a Snap Package Management Toolkitben

A Qualys idén egy harmadik súlyos biztonsági rést (CVE-2022-3328) azonosított a snap-confine segédprogramban, amely a SUID gyökérjelzővel érkezik, és amelyet a snapd folyamat hív meg, hogy végrehajtható környezetet hozzon létre az önálló csomagokban terjesztett alkalmazások számára. snap formátumban. A biztonsági rés lehetővé teszi a helyi, jogosulatlan felhasználók számára, hogy az alapértelmezett Ubuntu konfigurációban root felhasználóként hajtsanak végre kódot. A problémát a snapd 2.57.6 kiadása javította. Csomagfrissítések megjelentek az Ubuntu összes támogatott ágához.

Érdekes módon a szóban forgó sebezhetőséget egy hasonló februári sebezhetőség snap-confine-ben történő javítása során vezették be. A kutatóknak sikerült elkészíteniük egy működő exploitot, amely root hozzáférést biztosít az Ubuntu Server 22.04-ben, amely a snap-confine sebezhetőségen kívül a többutas folyamat két sebezhetőségét is magában foglalja (CVE-2022-41974, CVE-2022-41973). az engedélyek ellenőrzésének megkerülésével kapcsolatos privilegizált parancsok átadása és a szimbolikus hivatkozások nem biztonságos kezelése.

A snap-confine biztonsági rését a must_mkdir_and_open_with_perms() függvény versenyfeltétele okozza, amelyet azért adtak hozzá, hogy megvédje a /tmp/snap.$SNAP_NAME könyvtárat egy szimbolikus hivatkozással a tulajdonos ellenőrzése után, de a mount rendszerhívás előtt. A program meghívja, hogy egy snap formátumú csomaghoz csatolja be a könyvtárakat. A hozzáadott biztonság az volt, hogy átnevezték a /tmp/snap.$SNAP_NAME könyvtárat egy másik könyvtárra a /tmp-ben véletlenszerű névvel, ha létezik, és nem a root felhasználó tulajdona.

A /tmp/snap.$SNAP_NAME könyvtárátnevezési művelet kihasználásakor a kutatók kihasználták azt a tényt, hogy a snap-confine egy /tmp/snap.rootfs_XXXXXX könyvtárat is létrehoz a snap csomag tartalmának gyökeréhez. A név "XXXXXX" részét az mkdtemp() véletlenszerűen választja ki, de a "rootfs_XXXXXX" nevű csomag átadhatja az sc_instance_name_validate-et (azaz az ötlet az, hogy a $SNAP_NAME értéke "rootfs_XXXXXX" legyen, majd az átnevezési művelet felülírást eredményez a /tmp/snap.rootfs_XXXXXX könyvtár a snap gyökérrel).

A /tmp/snap.rootfs_XXXXXX és a /tmp/snap.$SNAP_NAME átnevezésének egyidejű használata érdekében a snap-confine két példánya elindult. Amint az első példány létrehozta a /tmp/snap.rootfs_XXXXXX fájlt, a folyamat leáll, és elindul egy második példány rootfs_XXXXXX csomagnévvel, aminek következtében a második példány /tmp/snap.$SNAP_NAME ideiglenes könyvtára a /tmp/snap névre változik. .rootfs_XXXXXX gyökérkönyvtár az első példányban. Közvetlenül az átnevezés végrehajtása után a második példány összeomlott, és a /tmp/snap.rootfs_XXXXXX helyére versenyfeltételek manipulálása került, mint a februári sebezhetőség kihasználásakor. A változtatás után a végrehajtási zárolást eltávolították az első példányból, és a támadók teljes irányítást szereztek a snap gyökérkönyvtára felett.

Az utolsó lépés egy /tmp/snap.rootfs_XXXXXX/tmp szimbolikus hivatkozás létrehozása volt, amelyet az sc_bootstrap_mount_namespace() függvény használt az írható /tmp valós könyvtárnak a fájlrendszer bármely könyvtárához való csatolásához, mivel a mount() hívás követi. szimbolikus hivatkozásokat a felszerelés előtt. Az ilyen beillesztést az AppArmor korlátozásai blokkolják, de a blokkolás megkerülésére az exploit két kiegészítő sérülékenységet használt ki a többutas rendszerben.

Forrás: opennet.ru

Hozzászólás