Haavatavus Rusti standardteegis

Funktsiooni std::fs::remove_dir_all() võistlustingimuse tõttu tuvastati Rusti standardteegis haavatavus (CVE-2022-21658). Kui seda funktsiooni kasutatakse privilegeeritud rakenduses ajutiste failide kustutamiseks, võib ründaja saavutada suvaliste süsteemifailide ja kataloogide kustutamise, mille kustutamiseks ründajal tavaliselt pole juurdepääsu.

Haavatavuse põhjuseks on sümboolsete linkide kontrollimise vale rakendamine enne kataloogide rekursiivset kustutamist. Selle asemel, et takistada sümbolilinkide järgimist, kontrollib remove_dir_all() esmalt, kas fail on sümlink. Kui link on defineeritud, siis see kustutatakse failina ja kui tegemist on kataloogiga, siis kutsutakse välja rekursiivne sisu eemaldamise operatsioon. Probleem on selles, et kontrollimise ja kustutamistoimingu alguse vahel on väike viivitus.

Ajal, mil kontroll on juba tehtud, kuid kustutatavate kataloogide loendamine pole veel alanud, saab ründaja asendada kataloogi sümboolse lingiga ajutiste failidega. Kui see tabab õigel ajal, käsitleb funktsioon remove_dir_all() sümboolset linki kataloogina ja hakkab eemaldama sisu, millele link osutab. Hoolimata asjaolust, et ründe õnnestumine sõltub valitud aja täpsusest kataloogi asendamiseks ja õige hetke tabamine esimesel korral on ebatõenäoline, suutsid teadlased katsete käigus saavutada korratava eduka rünnaku pärast ärakasutamist. paar sekundit.

Mõjutatud on kõik Rusti versioonid 1.0.0 kuni 1.58.0 (kaasa arvatud). Probleem on praeguseks plaastri kujul lahendatud (parandus lisatakse versioonile 1.58.1, mida oodatakse mõne tunni jooksul). Haavatavuse kõrvaldamist saate jälgida järgmistel lehtedel: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch, FreeBSD. Kõigil kõrgendatud õigustega ja funktsiooni remove_dir_all kasutavatel Rusti programmide kasutajatel soovitatakse Rust kiiresti versioonile 1.58.1 värskendada. Huvitav on see, et välja antud plaaster ei lahenda probleemi kõigis süsteemides; näiteks REDOX OS-is ja macOS-i versioonides enne 10.10 (Yosemite) ei blokeerita haavatavust lipu O_NOFOLLOW puudumise tõttu, mis keelab sümboolse jälgimise. lingid.

Allikas: opennet.ru

Lisa kommentaar