A Linux kernel sérülékenysége, amely lehetővé teszi az írásvédett fájlok sérülését

Sebezhetőséget azonosítottak a Linux kernelben (CVE-2022-0847), amely lehetővé teszi az oldal gyorsítótárának tartalmának felülírását bármely fájl esetében, beleértve az írásvédett módot, az O_RDONLY kapcsolóval megnyitott vagy fájlrendszeren található fájlokat is. csak olvasható módban van felszerelve. Gyakorlatilag a sérülékenység felhasználható arra, hogy kódot fecskendezzenek be tetszőleges folyamatokba, vagy megsérüljenek a megnyitott fájlok adatai. Módosíthatja például az sshd folyamat authorised_keys fájljának tartalmát. Az exploit prototípusa elérhető tesztelésre.

A probléma a Dirty Pipe kódnevet kapta, hasonlóan a 2016-ban azonosított Dirty COW kritikus sérülékenységhez. Megjegyzendő, hogy a Dirty Pipe a veszélyességi szintet tekintve egy szinten van a Dirty COW-val, de sokkal könnyebben kezelhető. A sérülékenységet a naplószerverről tömörített archívumokat letöltő rendszerben a hálózaton keresztül letöltött fájlok időszakos megrongálódásával kapcsolatos panaszok elemzése során azonosították (37 korrupció 3 hónap alatt betöltött rendszeren), amelynek előkészítése a splice() műveletet használta. és névtelen csövek.

A sérülékenység a 5.8 augusztusában kiadott 2020-as Linux kerneltől kezdve jelenik meg, i.e. jelen van a Debian 11-ben, de nem érinti az Ubuntu 20.04 LTS alap kernelt. Az RHEL 8.x és az openSUSE/SUSE 15 kernelek kezdetben régi ágakra épülnek, de elképzelhető, hogy a problémát okozó változást visszaportolták rájuk (pontos adatok még nincsenek). A következő oldalakon követheti nyomon a csomagfrissítések közzétételét a következő disztribúciókban: Debian, SUSE, Ubuntu, RHEL, Fedora, Gentoo, Arch Linux. A sérülékenység javítását az 5.16.11, 5.15.25 és 5.10.102 verziókban javasolták. A javítást az Android platformon használt kernel is tartalmazza.

A sérülékenységet az okozza, hogy a copy_page_to_iter_pipe() és push_pipe() függvények kódjában a „buf->flags” érték inicializálása hiányzik, annak ellenére, hogy a memória nem törlődik a struktúra lefoglalásakor és bizonyos manipulációk során. unnamed pipes, egy másik műveletből származó érték. Ennek a szolgáltatásnak a használatával egy privilegizálatlan helyi felhasználó elérheti a PIPE_BUF_FLAG_CAN_MERGE érték megjelenését a jelzőben, ami lehetővé teszi az adatok felülírásának megszervezését az oldal gyorsítótárában, egyszerűen új adatok írásával egy speciálisan előkészített névtelen csőbe.

Támadás esetén a célfájlnak olvashatónak kell lennie, és mivel a hozzáférési jogosultságokat nem ellenőrzik a pipere íráskor, az oldal gyorsítótárában a csak olvashatóan csatolt partíciókban található fájlok is lecserélhetők (például c CD- ROM). Az oldal gyorsítótárában lévő információk cseréje után, amikor egy fájlból kiolvassuk az adatokat, a folyamat nem a tényleges, hanem a kicserélt adatokat kapja meg.

A művelet egy névtelen csatorna létrehozásából és tetszőleges adatokkal való feltöltéséből áll, annak érdekében, hogy a PIPE_BUF_FLAG_CAN_MERGE jelző be legyen állítva az összes hozzá tartozó gyűrűstruktúrában. Ezután az adatok beolvasásra kerülnek a csatornából, de a flag beállítva marad a pipe_inode_info gyűrűstruktúrákban a pipe_buffer struktúra minden példányában. Ezután a splice() meghívása történik, hogy az adatokat a célfájlból egy névtelen csőbe olvassa be, a kívánt eltolástól kezdve. Amikor adatot ír ebbe a névtelen csőbe, a beállított PIPE_BUF_FLAG_CAN_MERGE jelző miatt az oldal-gyorsítótárban lévő adatok felülíródnak a pipe_buffer szerkezet új példányának létrehozása helyett.

Forrás: opennet.ru

Hozzászólás