Ve Netfilteru, subsystému jádra Linux, který se používá k filtrování a modifikaci síťových paketů, byla zjištěna zranitelnost (CVE-2021-22555), která umožňuje místnímu uživateli získat oprávnění roota v systému, a to i v izolovaném kontejneru. Byla připravena funkční prototyp exploitu pro testování, který obchází ochranné mechanismy KASLR, SMAP a SMEP. Výzkumník, jenž zranitelnost odhalil, obdržel od společnosti Google odměnu ve výši 20 000 dolarů za zjištění metody obcházení izolace kontejnerů Kubernetes v clusteru kCTF.
Problém se projevuje 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, což vede k přetečení zásobníku při odesílání speciálně formátovaných parametrů prostřednictvím systému setsockopt v režimu compat. Za normálních okolností může volání compat_setsockopt() provést pouze uživatel root, ale potřebná oprávnění pro provedení útoku mohou být také získána neprivilegovaným uživatelem v systémech s povolenou podporou prostorů identit uživatelů (user namespaces).
Uživatel může vytvořit kontejner s odděleným uživatelským účtem root a z něj zneužívat zranitelnost. Například, „user namespaces“ je ve výchozím nastavení povolen v Ubuntu a Fedoře, ale není aktivován v Debianu a RHEL. Oprava zranitelnosti byla přidána do jádra Linux 13. dubna. Aktualizace balíčků již byly vytvořeny 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ého na 64bitové zobrazení. Chyba umožňuje zapsat čtyři nulové bajty na jakoukoli pozici mimo vyhrazený buffer, omezenou offsetem 0x4C. Tato možnost byla dostatečná k vytvoření exploitu, který umožňuje získání práv roota — prostřednictvím vymazání ukazatele m_list->next ve struktuře msg_msg se vytvořily podmínky pro přístup k datům po uvolnění paměti (use-after-free), což bylo následně použito k získání informací o adresách a změně dalších struktur pomocí manipulace se systémovým voláním msgsnd().
Zdroj: opennet.ru
