Versenyhelyzet a Linux kernel szemétgyűjtőjében, amely a jogosultságok eszkalációjához vezethet

Jann Horn, a Google Project Zero csapat tagja, aki egyszer azonosította a Spectre és a Meltdown sebezhetőségét, közzétett egy technikát a Linux kernel szemétgyűjtőjében található sebezhetőség (CVE-2021-4083) kihasználására. A sérülékenység a unix socketek fájlleíróinak megtisztítása során fellépő versenyhelyzetből adódik, és potenciálisan lehetővé teszi a helyi, jogosulatlan felhasználók számára a kód futtatását a kernel szintjén.

A probléma azért érdekes, mert a becslések szerint az időablak, amely alatt a versenyfeltétel bekövetkezik, túl kicsi volt ahhoz, hogy valódi exploitokat hozzanak létre, de a tanulmány szerzője kimutatta, hogy még az ilyen kezdetben szkeptikus sebezhetőségek is valódi támadások forrásává válhatnak, ha az exploit készítője a szükséges készségeket és időt. Yann Horn megmutatta, hogyan lehet filigrán manipulációk segítségével a close() és az fget() függvények egyidejű meghívásakor fellépő versenyfeltételeket teljesen kihasználható, utána szabadon használható sebezhetővé csökkenteni, és elérni a már felszabadult adatokhoz való hozzáférést. szerkezet a kernelen belül.

Versenyfeltétel lép fel egy fájlleíró bezárása során, miközben a close() és az fget() függvényeket egyidejűleg hívjuk. Az fget() végrehajtása előtt előfordulhat a close() hívás, ami megzavarja a szemétgyűjtőt, mert a refcount szerint a fájlszerkezetnek nem lesz külső hivatkozása, hanem a fájlleíróhoz csatolva marad, pl. A szemétgyűjtő azt hiszi, hogy kizárólagos hozzáféréssel rendelkezik a szerkezethez, de valójában egy rövid ideig a fájlleíró táblázat fennmaradó bejegyzése továbbra is a felszabadított szerkezetre mutat.

A versenyhelyzetbe kerülés valószínűségének növelésére számos trükköt alkalmaztak, amelyek lehetővé tették a kiaknázás sikerének valószínűségét 30%-ra növelve a rendszerspecifikus optimalizációk bevezetésével. Például annak érdekében, hogy egy fájlleírókkal rendelkező struktúra elérési idejét több száz nanomásodperccel megnöveljék, az adatokat kiszorították a processzor gyorsítótárából azáltal, hogy a gyorsítótárat teleszórták tevékenységekkel egy másik CPU-magon, ami lehetővé tette a struktúra visszakeresését a memóriából, nem pedig a memóriából. a gyors CPU gyorsítótár.

A második fontos funkció a hardveres időzítő által generált megszakítások használata volt a versenyfeltételek idejének növelése érdekében. A pillanat úgy lett kiválasztva, hogy a megszakításkezelő tüzeljen, amikor egy versenyhelyzet bekövetkezik, és egy ideig megszakítja a kód végrehajtását. A vezérlés visszaadásának további késleltetése érdekében a várakozási sorban mintegy 50 ezer bejegyzést generáltak az epoll segítségével, amihez a megszakításkezelőn keresztül kellett keresni.

A sérülékenység kihasználásának technikáját 90 napos titoktartási időszak után hozták nyilvánosságra. A probléma a 2.6.32-es kernel óta jelentkezik, és december elején javították. A javítást az 5.16-os kernel tartalmazza, és a disztribúciókban szállított kernel és kernelcsomagok LTS-ágaiba is átkerült. Figyelemre méltó, hogy a sérülékenységet a CVE-2021-0920 hasonló probléma elemzése során azonosították, amely a szemétgyűjtőben nyilvánul meg az MSG_PEEK jelző feldolgozása során.

Forrás: opennet.ru

Hozzászólás