Byly odhaleny detaily zranitelnosti (CVE-2022-0492) v implementaci mechanismu omezení zdrojů cgroups v1 v jádře Linux, kterou by bylo možné využít k úniku z izolovaných kontejnerů. Problém se projevuje od jádra Linux 2.6.24 a byl vyřešen ve verzích jader 5.16.12, 5.15.26, 5.10.97, 5.4.177, 4.19.229, 4.14.266 a 4.9.301. Sledovat vydání aktualizací balíčků ve distribucích lze na těchto stránkách: Debian, SUSE, Ubuntu, RHEL, Fedora, Gentoo, Arch Linux.
Zranitelnost je způsobena logickou chybou v obslužném programu souboru release_agent, kvůli které se při spuštění obslužného programu s plným oprávněním neprováděly řádné kontroly. Soubor release_agent se používá k určení programu, který je jádrem vykonáván při ukončení procesu v cgroup. Tento program se spouští s právy root a se všemi ‚capabilities‘ v kořenovém jmenném prostoru. Předpokládalo se, že přístup k nastavení release_agent má pouze administrátor, avšak ve skutečnosti kontroly spočívaly v poskytnutí přístupu uživateli root, což nevylučovalo změnu nastavení z kontejneru nebo uživatelem root bez oprávnění administrátora (CAP_SYS_ADMIN).
Dříve by taková vlastnost nebyla považována za zranitelnost, ale situace se změnila s příchodem jmenných prostorů identifikátorů uživatelů (user namespaces), které umožňují vytvářet v kontejnerech oddělené uživatele root, kteří se nepřekrývají s uživatelským účtem root hlavního prostředí. Odpovídající k útoku stačí v kontejneru, který má svého uživatele root v odděleném jmenném prostoru identifikátorů uživatelů, připojit svůj obslužný program release_agent, který po dokončení procesu bude vykonán s plnými právy hlavního prostředí.
Přednastaveně je cgroupfs v kontejneru montováno v režimu pouze pro čtení, ale není problém tento pseudofilesystém přimontovat v režimu zápisu, pokud existují oprávnění CAP_SYS_ADMIN, nebo pomocí vytvoření prostřednictvím systémového volání unshare vnořeného kontejneru s odděleným jmenným prostorem uživatelů, ve kterém jsou pro vytvořený kontejner dostupná práva CAP_SYS_ADMIN.

Útok může být proveden, pokud má útočník root oprávnění v izolovaném kontejneru nebo pokud je kontejner spuštěn bez příznaku no_new_privs, který zakazuje získání dodatečných oprávnění. V systému musí být povolena podpora user namespaces (ve výchozím nastavení je povolena v Ubuntu a Fedoře, ale není aktivována v Debianu a RHEL) a musí být k dispozici přístup k root cgroup v1 (například Docker spouští kontejnery v root RDMA cgroup). Útok je také možný při přítomnosti oprávnění CAP_SYS_ADMIN, v takovém případě podpora user namespaces a přístup k root hierarchii cgroup v1 nejsou vyžadovány.
Kromě úniku z izolovaného kontejneru umožňuje zranitelnost také procesům spuštěným uživatelem root bez „capabilities“ nebo jakémukoli uživateli s právy CAP_DAC_OVERRIDE (k provedení útoku je vyžadován přístup k souboru /sys/fs/cgroup/*/release_agent, který patří rootu) získat přístup ke všem systémovým „capabilities“.
Je třeba poznamenat, že zranitelnost nelze využít, pokud jsou použity ochranné mechanismy Seccomp, AppArmor nebo SELinux pro dodatečnou izolaci kontejnerů, protože Seccomp blokuje přístup k systémovému volání unshare(), a AppArmor a SELinux neumožňují připojit cgroupfs v režimu zápisu.
Zdroj: opennet.ru
