Chyba zabezpečení v io_uring umožnila uživateli bez oprávnění stát se rootem i v kontejnerech

Nedávno zveřejněné informace o zranitelnosti (CVE-2022-29582) v implementaci asynchronního I/O rozhraní io_uring, které je součástí linuxového jádra od verze 5.1 a které umožňuje neprivilegovanému uživateli stát se rootem v systému, i když spouští exploit kontejneru.

Za zmínku stojí uvedená zranitelnost byla hlášena před více než 3 měsíci (přibližně začátkem května tohoto roku), ale úplné informace a zveřejnění byly zveřejněny teprve nedávno.

Pokud jde o zranitelnost, je zmíněno, že toto dochází při přístupu k již uvolněnému bloku paměti, se projevuje v linuxových jádrech počínaje větví 5.10.

O chybě zabezpečení CVE-2022-29582

Tato chyba zabezpečení umožňuje přístup k uvolněné paměti jako výsledek sporu při zpracování časových limitů ve funkci io_flush_timeouts(), kteráe odstraní záznam časového limitu ze seznamu a zruší jej, aniž by v daném okamžiku ověřil vytvoření a smazání časového limitu.

Aktualizovaný obecný popis io_uring již poskytli jiní. Vysvětlují to tisíckrát lépe než my, takže se subsystému budeme věnovat obšírněji (skvělý úvod najdete v tomto článku Grapl Security a tomto článku Flatt Security).

Co je důležitější, pole operační kód určuje, jaký typ operace se má provést. Pro každý "operační kód", který to vyžaduje, pole fd určuje deskriptor souboru, na kterém se má provést požadovaný I/O. Téměř všechna normální I/O systémová volání (čtení, odesílání atd.) mají ekvivalentní asynchronní operační kód. Každé pole může zastávat různé role v závislosti na operaci.

Jakmile je SQE získán z SQ, je převeden na interní reprezentaci popsanou pomocí struct io_kiocb (zpětné volání vstupu/výstupu jádra). Tyto objekty jsou běžně známé jako žádosti.

struct io_kiocb se používá jako ekvivalent k SQE „ready-for-launch“, na kterém je založen, přičemž jakýkoli deskriptor souboru je vyřešen na struct file*s, jsou připojeny přihlašovací údaje uživatele, je připojena osobnost (ve kterém poběží jádra) , atd.

Po dokončení požadované operace je zapsána do fronty dokončení (CQ) záznam, který odpovídá SQE. Takový záznam se nazývá záznam fronty dokončení (CQE) a obsahuje pole, jako je kód chyby a výsledná hodnota. Aplikace uživatelského prostoru může dotazovat CQ na nové položky, aby zjistila, zda odeslané SQE dokončily zpracování a jaký byl jejich výsledek.

Je uvedeno, že existují některé scénáře, ve kterých je snadné vyměnit objekt o pokroku. Ale jsou tu dvě omezení:

  • LT' musí být přiřazen a inicializován v okně závodu. To znamená, že po uvolnění LT, ale před dosažením bodu v LT, který již není přístupný.
  • LT' může být pouze jiný objekt struct io_kiocb. Kvůli izolaci haldy, kde jsou objekty na haldě odděleny podle svého typu, je příliš obtížné je znovu přiřadit jako jiný typ objektu v okně závodu.

Výzkumníci připravili funkční exploit který pro svůj provoz nevyžaduje zahrnutí jmenných prostorů identifikátorů uživatele (user namespaces) a může poskytnout root přístup k hostiteli, když neprivilegovaný uživatel spustí exploit v izolovaném kontejneru.

Náš exploit se zaměřuje na jádro verze 5.10.90, verzi, kterou Google v té době vzdáleně spouštěl. Museli jsme přizpůsobit náš exploit konkrétním specifikacím serveru (4 jádra Skylake Xeon @ 2.80 GHz, 16GiB RAM), ale s určitými úpravami by měl být zneužitelný každý stroj se zranitelným jádrem.

Exploit funguje také v prostředí nsjail izolované na distribuci Google COS (Container Optimized OS) založené na Chromium OS a používané na Google Cloud Platform na virtuálních strojích Compute Engine. Exploit je navržen pro práci s větvemi jádra od 5.10 do 5.12. V neposlední řadě stojí za zmínku problém byl opraven v dubnu v aktualizacích 5.10.111, 5.15.34 a 5.17.3.

A konečně, pokud máte zájem dozvědět se o zranitelnosti více, můžete si prohlédnout vytvořenou publikaci Na následujícím odkazu.


Zanechte svůj komentář

Vaše e-mailová adresa nebude zveřejněna. Povinné položky jsou označeny *

*

*

  1. Za data odpovídá: AB Internet Networks 2008 SL
  2. Účel údajů: Ovládací SPAM, správa komentářů.
  3. Legitimace: Váš souhlas
  4. Sdělování údajů: Údaje nebudou sděleny třetím osobám, s výjimkou zákonných povinností.
  5. Úložiště dat: Databáze hostovaná společností Occentus Networks (EU)
  6. Práva: Vaše údaje můžete kdykoli omezit, obnovit a odstranit.