Zraniteľnosť v štandardnej knižnici Rust

Zraniteľnosť (CVE-2022-21658) bola identifikovaná v štandardnej knižnici Rust v dôsledku sporu vo funkcii std::fs::remove_dir_all(). Ak sa táto funkcia používa na odstránenie dočasných súborov v privilegovanej aplikácii, útočník môže dosiahnuť odstránenie ľubovoľných systémových súborov a adresárov, ku ktorým by útočník za normálnych okolností nemal prístup.

Zraniteľnosť je spôsobená nesprávnou implementáciou kontroly symbolických odkazov pred rekurzívnym vymazaním adresárov. Namiesto toho, aby sa zabránilo sledovaniu symbolických odkazov, remove_dir_all() najprv skontroluje, či je súbor symbolickým odkazom. Ak je definovaný odkaz, potom sa odstráni ako súbor, a ak ide o adresár, potom sa zavolá rekurzívna operácia odstránenia obsahu. Problém je v tom, že medzi kontrolou a spustením operácie odstránenia je malé oneskorenie.

V čase, keď už bola kontrola vykonaná, ale operácia vyčíslovania adresárov na vymazanie ešte nezačala, môže útočník nahradiť adresár dočasnými súbormi so symbolickým odkazom. Ak zasiahne v správnom čase, funkcia remove_dir_all() bude považovať symbolický odkaz za adresár a začne odstraňovať obsah, na ktorý odkaz ukazuje. Napriek tomu, že úspešnosť útoku závisí od presnosti zvoleného času výmeny adresára a prvého zásahu do správneho momentu je nepravdepodobné, počas experimentov sa výskumníkom podarilo dosiahnuť opakovateľný úspešný útok po vykonaní exploitu v rámci pár sekúnd.

Ovplyvnené sú všetky verzie Rustu od 1.0.0 do 1.58.0 vrátane. Problém je zatiaľ vyriešený formou opravy (oprava bude zahrnutá vo vydaní 1.58.1, ktoré sa očakáva v priebehu niekoľkých hodín). Odstránenie zraniteľnosti v distribúciách môžete sledovať na týchto stránkach: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch, FreeBSD. Všetkým používateľom programov Rust spustených so zvýšenými oprávneniami a používajúcich funkciu remove_dir_all sa odporúča urýchlene aktualizovať Rust na verziu 1.58.1. Je zaujímavé, že vydaná oprava nerieši problém na všetkých systémoch, napríklad v REDOX OS a verziách macOS starších ako 10.10 (Yosemite) nie je zraniteľnosť zablokovaná kvôli absencii príznaku O_NOFOLLOW, ktorý znemožňuje nasledujúce symbolické odkazy.

Zdroj: opennet.ru

Pridať komentár