Dobësi në bibliotekën standarde Rust

Një dobësi (CVE-2022-21658) është identifikuar në bibliotekën standarde Rust për shkak të një gjendjeje race në funksionin std::fs::remove_dir_all(). Nëse ky funksion përdoret për të fshirë skedarë të përkohshëm në një aplikacion të privilegjuar, një sulmues mund të arrijë fshirjen e skedarëve dhe drejtorive arbitrare të sistemit që sulmuesi normalisht nuk do të kishte akses për t'i fshirë.

Dobësia shkaktohet nga zbatimi i gabuar i kontrollimit të lidhjeve simbolike përpara fshirjes rekursive të drejtorive. Në vend që të parandaloni ndjekjen e lidhjeve simbolesh, remove_dir_all() së pari kontrollon nëse skedari është një lidhje simbole. Nëse përcaktohet një lidhje, atëherë ajo fshihet si skedar, dhe nëse është një direktori, atëherë thirret një operacion për heqjen e përmbajtjes rekursive. Problemi është se ka një vonesë të lehtë midis kontrollit dhe fillimit të operacionit të fshirjes.

Në një kohë kur kontrolli tashmë është kryer, por operacioni i numërimit të drejtorive për fshirje nuk ka filluar ende, sulmuesi mund të zëvendësojë drejtorinë me skedarë të përkohshëm me një lidhje simbolike. Nëse godet në kohën e duhur, funksioni remove_dir_all() do ta trajtojë lidhjen simbolike si një direktori dhe do të fillojë të heqë përmbajtjen në të cilën tregon lidhja. Përkundër faktit se suksesi i sulmit varet nga saktësia e kohës së zgjedhur të zëvendësimit të drejtorisë dhe goditja në momentin e duhur herën e parë nuk ka gjasa, gjatë eksperimenteve studiuesit ishin në gjendje të arrinin një sulm të suksesshëm të përsëritur pas ekzekutimit të shfrytëzimit brenda disa sekonda.

Të gjitha versionet e Rust nga 1.0.0 në 1.58.0 përfshirëse janë prekur. Problemi tani për tani është zgjidhur në formë patch (rregullimi do të përfshihet në versionin 1.58.1, i cili pritet brenda pak orësh). Ju mund të monitoroni eliminimin e cenueshmërisë në shpërndarjet në këto faqe: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch, FreeBSD. Të gjithë përdoruesit e programeve Rust që funksionojnë me privilegje të larta dhe përdorin funksionin remove_dir_all këshillohen që të përditësojnë urgjentisht Rust në versionin 1.58.1. Është interesante që patch-i i lëshuar nuk e zgjidh problemin në të gjitha sistemet; për shembull, në REDOX OS dhe versionet e macOS para 10.10 (Yosemite), cenueshmëria nuk është e bllokuar për shkak të mungesës së flamurit O_NOFOLLOW, i cili çaktivizon ndjekjen simbolike lidhjet.

Burimi: opennet.ru

Shto një koment