Chyba zabezpečení ve standardní knihovně Rust

Ve standardní knihovně Rust byla identifikována chyba zabezpečení (CVE-2022-21658) kvůli sporu ve funkci std::fs::remove_dir_all(). Pokud je tato funkce použita k odstranění dočasných souborů v privilegované aplikaci, může útočník dosáhnout odstranění libovolných systémových souborů a adresářů, ke kterým by útočník normálně neměl přístup.

Tato chyba zabezpečení je způsobena nesprávnou implementací kontroly symbolických odkazů před rekurzivním mazáním adresářů. Namísto toho, aby se zabránilo následování symbolických odkazů, remove_dir_all() nejprve zkontroluje, zda je soubor symbolickým odkazem. Pokud je definován odkaz, je odstraněn jako soubor, a pokud se jedná o adresář, je volána operace rekurzivního odstranění obsahu. Problém je v tom, že mezi kontrolou a zahájením operace odstranění je malé zpoždění.

V době, kdy již byla kontrola provedena, ale operace výčtu adresářů pro smazání ještě nezačala, může útočník nahradit adresář dočasnými soubory se symbolickým odkazem. Pokud zasáhne ve správný čas, funkce remove_dir_all() bude se symbolickým odkazem zacházet jako s adresářem a začne odstraňovat obsah, na který odkaz ukazuje. Navzdory skutečnosti, že úspěšnost útoku závisí na přesnosti zvoleného času nahrazení adresáře a trefení správného okamžiku napoprvé je nepravděpodobné, během experimentů byli výzkumníci schopni dosáhnout opakovatelného úspěšného útoku po provedení exploitu v rámci pár sekund.

Ovlivněny jsou všechny verze Rust od 1.0.0 do 1.58.0 včetně. Problém byl prozatím vyřešen ve formě opravy (oprava bude zahrnuta ve verzi 1.58.1, která se očekává během několika hodin). Odstranění zranitelnosti v distribucích můžete sledovat na těchto stránkách: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch, FreeBSD. Všem uživatelům programů Rust běžících se zvýšenými oprávněními a používajících funkci remove_dir_all se doporučuje urychleně aktualizovat Rust na verzi 1.58.1. Zajímavé je, že vydaný patch neřeší problém na všech systémech, například v REDOX OS a verzích macOS před 10.10 (Yosemite) není zranitelnost blokována kvůli absenci příznaku O_NOFOLLOW, který deaktivuje následující symbolické Odkazy.

Zdroj: opennet.ru

Přidat komentář