Chyba zabezpečení v cgroups v1 umožňující opuštění izolovaného kontejneru

Byly zveřejněny podrobnosti o zranitelnosti (CVE-2022-0492) v implementaci mechanismu omezování zdrojů cgroups v1 v jádře. Linux, který lze použít k opuštění izolovaných kontejnerů. Problém se projevuje již v jádru. Linux 2.6.24 a opraveno ve verzích jádra 5.16.12, 5.15.26, 5.10.97, 5.4.177, 4.19.229, 4.14.266 a 4.9.301. Vydávání aktualizací balíčků v distribucích můžete sledovat 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, která bránila správným kontrolám při spuštění obslužného programu s plnými oprávněními. Soubor release_agent se používá k definování programu spuštěného jádrem při ukončení procesu v kontrolní skupině (cgroup). Tento program běží s oprávněními root a všemi funkcemi v kořenovém jmenném prostoru. Přístup ke konfiguraci release_agent měl být omezen na administrátora, ale ve skutečnosti byly kontroly omezeny na udělení přístupu uživateli root, což nebránilo změně konfigurace z kontejneru nebo uživatelem root bez oprávnění správce (CAP_SYS_ADMIN).

Dříve by tato funkce nebyla považována za zranitelnost, ale situace se změnila s příchodem jmenných prostorů uživatelů, které umožňují vytváření samostatných uživatelů root v kontejnerech, které se nepřekrývají s uživatelem root hlavního prostředí. Pro provedení útoku tedy kontejner s vlastním uživatelem root v samostatném jmenném prostoru uživatelů stačí připojit vlastní obslužný program release_agent. Po ukončení procesu se obslužný program spustí s plnými oprávněními hlavního prostředí.

Ve výchozím nastavení je cgroupfs připojen v kontejneru v režimu pouze pro čtení, ale není problém znovu připojit tento pseudo-fs v režimu zápisu, pokud máte práva CAP_SYS_ADMIN, nebo vytvořením vnořeného kontejneru se samostatným jmenným prostorem uživatelů pomocí systémového volání unshare, ve kterém jsou pro vytvořený kontejner k dispozici práva CAP_SYS_ADMIN.

Chyba zabezpečení v cgroups v1 umožňující opuštění izolovaného kontejneru

Útok lze provést s root oprávněními v izolovaném kontejneru nebo při spuštění kontejneru bez příznaku no_new_privs, který brání udělení dalších oprávnění. Uživatelské jmenné prostory musí být v systému povoleny (ve výchozím nastavení povoleny v Ubuntu a Fedora, ale neaktivovaný v Debian a RHEL) a přístup ke kořenové cgroup v1 (například Docker spouští kontejnery v kořenové cgroup RDMA). Útok je možný i s oprávněními CAP_SYS_ADMIN, v takovém případě není vyžadována podpora jmenného prostoru uživatelů a přístup ke kořenové hierarchii cgroup v1.

Kromě úniku z izolovaného kontejneru tato zranitelnost také umožňuje procesům spuštěným uživatelem root bez oprávnění nebo jakýmkoli uživatelem s oprávněními CAP_DAC_OVERRIDE (útok vyžaduje přístup k souboru /sys/fs/cgroup/*/release_agent, jehož vlastníkem je root), získat přístup ke všem systémovým funkcím.

Je třeba poznamenat, že tuto zranitelnost nelze zneužít při použití ochranných mechanismů Seccomp, AppArmor nebo SE.Linux pro dodatečnou izolaci kontejnerů, protože Seccomp blokuje volání systémového volání unshare() a AppArmor a SELinux Nepovolte připojení cgroupfs v režimu zápisu.

Zdroj: opennet.ru

Kupte si spolehlivý hosting pro stránky s DDoS ochranou, VPS VDS servery 🔥 Kupte si spolehlivý webhosting s ochranou DDoS, VPS VDS servery | ProHoster