Az io_uring biztonsági rése lehetővé tette az engedélyekkel nem rendelkező felhasználók számára, hogy root felhasználóvá váljanak még a tárolókban is

nemrég közzétett sebezhetőségi információ (CVE-2022-29582) az 5.1-es verzió óta a Linux kernelben szereplő io_uring aszinkron I/O interfész megvalósításában, amely lehetővé teszi, hogy egy privilegizálatlan felhasználó root felhasználóvá váljon a rendszeren, még akkor is, ha egy konténer exploitot hajt végre.

Érdemes ezt megemlíteni az említett sebezhetőséget alig több mint 3 hónappal ezelőtt jelentették (körülbelül idén május elején), de a teljes információt és közzétételt csak nemrég tették közzé.

A sérülékenységgel kapcsolatban megemlítik, hogy ez akkor fordul elő, amikor egy már felszabadult memóriablokkot ér el, az 5.10-es ágtól kezdődő Linux kernelekben nyilvánul meg.

A CVE-2022-29582 biztonsági résről

Ez a sebezhetőség hozzáférést tesz lehetővé a felszabadult memóriához versenyfeltétel eredményeként az io_flush_timeouts() függvényben az időkorlátok kezelésekor, amie törli az időtúllépési bejegyzést a listáról, és törli, anélkül, hogy ellenőrizné az időtúllépés létrehozását és törlését.

Az io_uring frissített általános leírását már mások is megadták. Ezerszer jobban elmagyarázzák, mint mi, ezért csak részletesebben foglalkozunk az alrendszerrel (a nagyszerű bevezetésért lásd ezt a Grapl Security cikket és ezt a Flatt Security cikket).

Mi a fontosabb, az opcode mező határozza meg, hogy milyen típusú műveletet kell végrehajtani. Minden ezt igénylő „opcode” esetében az fd mező megadja azt a fájlleírót, amelyen a kért I/O-t végre kell hajtani. Szinte minden normál I/O rendszerhívás (read, sendto stb.) rendelkezik egyenértékű aszinkron műveleti kóddal. Minden mező a művelettől függően más-más szerepet tölthet be.

Az SQ-ból való lekérést követően az SQE a struct io_kiocb (kernel bemeneti/kimeneti visszahívása) által leírt belső reprezentációvá alakul. Ezeket az objektumokat általában kéréseknek nevezik.

A struct io_kiocb az SQE "indításra kész" ekvivalenseként használatos, amelyen alapul, ahol bármely fájlleíró feloldása struct file*-okra, felhasználói hitelesítő adatok csatolva, személyiség (amelyben a magok futni fognak) stb. .

Miután a kért művelet befejeződött, a program a befejezési sorba kerül (CQ) egy bejegyzés, amely megfelel az SQE-nek. Az ilyen bejegyzést befejezési sor bejegyzésnek (CQE) nevezik, és olyan mezőket tartalmaz, mint a hibakód és az eredményérték. A felhasználói területalkalmazás lekérdezheti a CQ-ban új bejegyzéseket, hogy megállapítsa, hogy az elküldött SQE-k befejezték-e a feldolgozást, és mi volt az eredmény.

Megemlítik, hogy vannak olyan forgatókönyvek, amelyekben egy objektum könnyen cserélhető a haladásról. De van két korlátozás:

  • Az LT'-t versenyablakban kell hozzárendelni és inicializálni. Ez azt jelenti, hogy az LT kiadása után, de még azelőtt, hogy elérne egy olyan pontot az LT-ben, amelyhez már nem fér hozzá.
  • Az LT' csak egy másik struct io_kiocb objektum lehet. A halom elszigeteltség miatt, ahol a kupacban lévő objektumok típusuk szerint vannak elválasztva, túl nehéz őket más típusú objektumként hozzárendelni a versenyablakon belül.

A kutatók egy funkcionális exploitot készítettek amelynek működéséhez nem szükséges felhasználói azonosító névterek (felhasználói névterek) szerepeltetése, és root hozzáférést biztosíthat a gazdagéphez, amikor egy nem jogosult felhasználó elindítja az exploitot egy elszigetelt tárolóban.

Kihasználásunk az 5.10.90-es kernelverziót célozza meg, amely verzió a Google akkoriban távolról futott. Az exploitunkat a szerver speciális specifikációihoz kellett igazítanunk (4 Skylake Xeon mag @ 2.80 Ghz, 16 GiB RAM), de némi módosítással minden sérülékeny kernelt futtató gép kihasználható legyen.

Az exploit az nsjail környezetben is működik a Chromium OS-en alapuló Google COS (Container Optimized OS) disztribúción izolálva, és a Google Cloud Platformon használt Compute Engine virtuális gépeken. Az exploitot úgy tervezték, hogy az 5.10-től 5.12-ig terjedő kernelágakkal működjön. Végül érdemes megemlíteni a probléma áprilisban javítva az 5.10.111, 5.15.34 és 5.17.3 frissítésekben.

Végül, ha többet szeretne megtudni a sérülékenységről, tekintse meg az elkészült kiadványt A következő linken.


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: AB Internet Networks 2008 SL
  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.