Zraniteľnosť v io_uring umožnila používateľovi bez povolení stať sa rootom aj v kontajneroch

Nedávno zverejnené informácie o zraniteľnosti (CVE-2022-29582) v implementácii asynchrónneho I/O rozhrania io_uring, ktoré je súčasťou linuxového jadra od verzie 5.1 a ktoré umožňuje neprivilegovanému používateľovi stať sa rootom v systéme, dokonca aj pri spustení kontajnera exploit.

Za zmienku stojí to uvedená zraniteľnosť bola nahlásená pred viac ako 3 mesiacmi (približne začiatkom mája tohto roku), ale úplné informácie a zverejnenie boli zverejnené len nedávno.

Pokiaľ ide o zraniteľnosť, spomína sa, že toto sa vyskytuje pri prístupe k bloku pamäte, ktorý je už uvoľnený, sa prejavuje v linuxových jadrách počnúc vetvou 5.10.

O chybe zabezpečenia CVE-2022-29582

Táto zraniteľnosť umožňuje prístup k uvoľnenej pamäti ako výsledok race condition pri spracovávaní časových limitov vo funkcii io_flush_timeouts(), ktoráe odstráni záznam časového limitu zo zoznamu a zruší ho bez toho, aby v danom okamihu overil vytvorenie a vymazanie časového limitu.

Aktualizovaný všeobecný popis io_uring už poskytli iní. Vysvetľujú to tisíckrát lepšie ako my, takže sa tomuto podsystému budeme venovať obšírnejšie (skvelý úvod nájdete v tomto článku Grapl Security a tomto článku Flatt Security).

Čo je dôležitejšie, pole operačného kódu určuje, aký typ operácie sa má vykonať. Pre každý "operačný kód", ktorý to vyžaduje, pole fd špecifikuje deskriptor súboru, na ktorom sa má vykonať požadovaný I/O. Takmer všetky normálne I/O systémové volania (čítanie, odosielanie atď.) majú ekvivalentný asynchrónny operačný kód. Každé pole môže prevziať rôzne úlohy v závislosti od operácie.

Po získaní z SQ sa SQE skonvertuje na internú reprezentáciu opísanú pomocou struct io_kiocb (spätné volanie vstupu/výstupu jadra). Tieto objekty sú bežne známe ako žiadosti.

struct io_kiocb sa používa ako ekvivalent k SQE „ready-for-launch“, na ktorom je založený, pričom každý deskriptor súboru je vyriešený ako struct file*s, sú pripojené poverenia používateľa, je pripojená osobnosť (v ktorých budú bežať jadrá) , atď.

Po dokončení požadovanej operácie sa zapíše do frontu dokončenia (CQ) záznam, ktorý zodpovedá SQE. Takýto záznam sa nazýva záznam frontu dokončenia (CQE) a obsahuje polia, ako je kód chyby a výsledná hodnota. Aplikácia užívateľského priestoru môže požiadať CQ o nové položky, aby zistila, či odoslané SQE dokončili spracovanie a aký bol ich výsledok.

Spomína sa to existuje niekoľko scenárov, v ktorých je ľahké nahradiť objekt o pokroku. Existujú však dve obmedzenia:

  • LT' musí byť priradený a inicializovaný v okne pretekov. To znamená, že po uvoľnení LT, ale pred dosiahnutím bodu v LT, ktorý už nie je prístupný.
  • LT' môže byť len ďalší objekt struct io_kiocb. Kvôli izolácii haldy, kde sú objekty v halde oddelené podľa ich typu, je príliš ťažké ich priradiť ako iný typ objektu v rámci okna pretekov.

Výskumníci pripravili funkčný exploit ktorý pre svoju činnosť nevyžaduje zahrnutie priestorov názvov identifikátorov (user namespaces) a môže poskytnúť root prístup k hostiteľovi, keď neprivilegovaný používateľ spustí exploit v izolovanom kontajneri.

Náš exploit sa zameriava na verziu jadra 5.10.90, verziu, ktorú Google v tom čase vzdialene spúšťal. Náš exploit sme museli prispôsobiť konkrétnym špecifikáciám servera (4 jadrá Skylake Xeon @ 2.80 GHz, 16GiB RAM), ale s určitými úpravami by mal byť zneužiteľný každý počítač so zraniteľným jadrom.

Využívanie funguje aj v prostredí nsjail izolované na distribúcii Google COS (Container Optimized OS) založenej na OS Chromium a používané na platforme Google Cloud na virtuálnych strojoch Compute Engine. Exploit je navrhnutý tak, aby pracoval s vetvami jadra od 5.10 do 5.12. V neposlednom rade stojí za zmienku problém bol opravený v apríli v aktualizáciách 5.10.111, 5.15.34 a 5.17.3.

Nakoniec, ak máte záujem dozvedieť sa viac o zraniteľnosti, môžete si pozrieť vydanú publikáciu Na nasledujúcom odkaze.


Zanechajte svoj komentár

Vaša e-mailová adresa nebude zverejnená. Povinné položky sú označené *

*

*

  1. Za údaje zodpovedá: AB Internet Networks 2008 SL
  2. Účel údajov: Kontrolný SPAM, správa komentárov.
  3. Legitimácia: Váš súhlas
  4. Oznamovanie údajov: Údaje nebudú poskytnuté tretím stranám, iba ak to vyplýva zo zákona.
  5. Ukladanie dát: Databáza hostená spoločnosťou Occentus Networks (EU)
  6. Práva: Svoje údaje môžete kedykoľvek obmedziť, obnoviť a vymazať.