Chyba zabezpečení v subsystému jádra Linux Netfilter

V Netfilter, subsystému linuxového jádra používaného k filtrování a úpravě síťových paketů, byla identifikována zranitelnost (CVE-2021-22555), která umožňuje místnímu uživateli získat v systému oprávnění root, a to i v izolovaném kontejneru. K testování byl připraven funkční prototyp exploitu, který obchází ochranné mechanismy KASLR, SMAP a SMEP. Výzkumník, který zranitelnost objevil, obdržel od Googlu odměnu 20 XNUMX dolarů za identifikaci metody, jak obejít izolaci kontejnerů Kubernetes v clusteru kCTF.

Problém se objevuje od jádra 2.6.19, vydaného před 15 lety, a je způsoben chybou v obslužných rutinách IPT_SO_SET_REPLACE a IP6T_SO_SET_REPLACE, která způsobuje přetečení vyrovnávací paměti při odesílání speciálně formátovaných parametrů prostřednictvím volání setsockopt v režimu compat. Za normálních okolností může compat_setsockopt() volat pouze uživatel root, ale oprávnění potřebná k provedení útoku může získat také neprivilegovaný uživatel na systémech s povolenou podporou jmenných prostorů uživatelů.

Uživatel může vytvořit kontejner se samostatným uživatelem root a odtud zneužít zranitelnost. Například „uživatelské jmenné prostory“ jsou ve výchozím nastavení povoleny na Ubuntu a Fedoře, ale nejsou povoleny na Debianu a RHEL. Oprava opravující zranitelnost byla do linuxového jádra přijata 13. dubna. Aktualizace balíčků již vygenerovaly projekty Debian, Arch Linux a Fedora. V Ubuntu, RHEL a SUSE se aktualizace připravují.

Problém nastává ve funkci xt_compat_target_from_user() kvůli nesprávnému výpočtu velikosti paměti při ukládání struktur jádra po převodu z 32bitové na 64bitovou reprezentaci. Chyba umožňuje zapsat čtyři nulové bajty do libovolné pozice mimo přidělenou vyrovnávací paměť ohraničenou offsetem 0x4C. Tato funkce se ukázala jako dostatečná k vytvoření exploitu, který umožňoval získat práva roota – vymazáním ukazatele m_list->next ve struktuře msg_msg byly vytvořeny podmínky pro přístup k datům po uvolnění paměti (use-after-free), které byl poté použit k získání informací o adresách a změnách jiných struktur prostřednictvím manipulace se systémovým voláním msgsnd().

Zdroj: opennet.ru

Přidat komentář