A PolKit biztonsági rése lehetővé tette a root hozzáférés megszerzését a legtöbb Linux disztribúción

nemrég Qualy's kiadta a hírt, hogy sebezhetőséget azonosított (CVE-2021-4034) en rendszerkomponens polkit (korábban PolicyKit), amelyet a disztribúciókban használnak, hogy lehetővé tegyék a nem jogosult felhasználóknak olyan műveletek végrehajtását, amelyekhez emelt szintű hozzáférési jogok szükségesek.

Sebezhetőség lehetővé teszi a jogosulatlan helyi felhasználók számára, hogy jogosultságaikat a root felhasználóra emeljék és teljes irányítást szerezzen a rendszer felett. A probléma kódneve PwnKit, és egy működő exploit létrehozásáról nevezetes, amely a legtöbb Linux disztribúción alapértelmezett beállításokban fut.

Azt emlegetik a probléma a PolKithez mellékelt pkexec segédprogramban van, amely a SUID gyökér jelzőjével érkezik, és úgy van kialakítva, hogy parancsokat futtasson más felhasználók jogosultságaival a PolKit szabályai szerint.

Az érvek helytelen kezelése miatt a pkexec-nek átadott parancssorból a a nem jogosult felhasználók megkerülhetik a hitelesítést, és a kódot rootként futtathatják, függetlenül a megállapított hozzáférési szabályoktól. Egy támadáshoz, függetlenül attól, hogy milyen beállítások és korlátozások vannak beállítva a PolKitben, elegendő, ha a végrehajtható fájl SUID root attribútuma be van állítva a pkexec segédprogrammal.

A Pkexec nem ellenőrzi a helyességet a folyamat indításakor átadott parancssori argumentumok (argc) számából. A pkexec fejlesztői azt feltételezték, hogy az argv tömb első bejegyzése mindig tartalmazza a folyamat nevét (pkexec), a második bejegyzés pedig vagy NULL, vagy a pkexec-en keresztül végrehajtott parancs neve.

Mivel az argumentumok számát nem hasonlították össze a tömb tényleges tartalmával, és azt feltételezték, hogy mindig nagyobb, mint 1, ha üres argv tömböt adtak át a folyamatnak, amit a Linux execve függvénye lehetővé tesz, a pkexec a NULL értéket kezelte első argumentumként ( folyamat név), és az utána következő out of puffer memória, mint a következő tömbtartalom.

A probléma az, hogy az argv tömb után a memóriában van a környezeti változókat tartalmazó envp tömb. Így egy üres argv tömbnél a pkexec kivonja a megemelt jogosultságokkal végrehajtott parancsra vonatkozó adatokat a tömb első eleméből a környezeti változókkal (argv[1] azonos lett az envp[0]-val), amelynek tartalma a következőkkel szabályozható. a támadó.

Miután megkapta az argv[1] értéket, a pkexec megpróbálja meghatározni a végrehajtható fájl teljes elérési útját a PATH fájl elérési útjaival, és visszaírja a mutatót a karakterláncra a teljes elérési úttal vissza az argv[1]-be, ami az érték felülírásához vezet. az első környezeti változó is, mivel az argv[1] azonos az envp[0]-val. Az első környezeti változó nevének manipulálásával a támadó egy másik környezeti változót helyettesíthet a pkexecben, például behelyettesítheti az "LD_PRELOAD" környezeti változót, ami nem megengedett a suid programokban, és a folyamat betöltheti megosztott könyvtárát a folyamat során. .

A működő exploit GCONV_PATH változó helyettesítést használ, amely a g_printerr() függvény meghívásakor dinamikusan betöltődő szimbólumátkódoló könyvtár elérési útjának meghatározására szolgál, amely az iconv_open() függvényt használja a kódjában.

Az elérési út újradefiniálásával a GCONV_PATH-ban a támadó nem a normál iconv könyvtárat tudja betölteni, hanem a saját könyvtárát, amelynek illesztőprogramjai a hibaüzenet alatt futnak le abban a szakaszban, amikor a pkexec még rootként fut, és az indítási engedélyek ellenőrzése előtt.

Megfigyelhető, hogy bár a probléma a memória sérüléséből adódik, megbízhatóan és megismételhetően kihasználható, függetlenül a használt hardver architektúrától.

A kihasználás felkészült sikeresen tesztelve Ubuntu, Debian, Fedora és CentOS rendszereken, de más disztribúciókon is használható. Az eredeti exploit még nem elérhető nyilvánosan, ami azt jelzi, hogy triviális, és más kutatók által könnyen újra létrehozható, ezért fontos, hogy a gyorsjavítás frissítését minél hamarabb telepítsük a többfelhasználós rendszerekre.

A Polkit elérhető BSD és Solaris rendszerekhez is, de még nem vizsgálták kiaknázását. Ismeretes, hogy a támadás nem hajtható végre OpenBSD-n, mivel az OpenBSD kernel nem engedi átadni a null argc értéket az execve() meghívásakor.

A probléma 2009 májusa óta fennáll, amikor a pkexec parancsot hozzáadták. A PolKit sérülékenységének javítása továbbra is elérhető javításként (a javító verzió még nem készült), de mivel a disztribúció fejlesztőit előre értesítették a problémáról, a legtöbb disztribúció egyidejűleg adott ki frissítést. a sebezhetőségi információkról.

Végül ha érdekel, hogy többet tudjon meg róla, a részleteket itt ellenőrizheti a következő link.


Hagyja megjegyzését

E-mail címed nem kerül nyilvánosságra. Kötelező mezők vannak jelölve *

*

*

  1. Az adatokért felelős: Miguel Ángel Gatón
  2. Az adatok célja: A SPAM ellenőrzése, a megjegyzések kezelése.
  3. Legitimáció: Az Ön beleegyezése
  4. Az adatok közlése: Az adatokat csak jogi kötelezettség alapján továbbítjuk harmadik felekkel.
  5. Adattárolás: Az Occentus Networks (EU) által üzemeltetett adatbázis
  6. Jogok: Bármikor korlátozhatja, helyreállíthatja és törölheti adatait.