Dobësi në bibliotekën standarde të gjuhës Rust

Në bibliotekën standarde të gjuhës Rust është zbuluar një dobësi (CVE-2022-21658), e lidhur me një race condition 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 me privilegje, një sulmues mund të arrijë të fshijë skedarë dhe direktoriume arbitrare të sistemit, të cilat në kushte normale nuk i ka të aksesueshme për fshirje.

Dobësia shkaktohet nga një zbatim i pasaktë i kontrollit të lidhjeve simbolike përpara fshirjes rekursive të direktoriumeve. Në vend që të ndalohet ndjekja e lidhjeve simbolike, funksioni remove_dir_all() fillimisht kontrollon nëse skedari është një lidhje simbolike. Nëse zbulohet një lidhje, ajo fshihet si skedar, ndërsa nëse është direktorium, thirret operacioni i fshirjes rekursive të përmbajtjes. Problemi qëndron në faktin se midis kontrollit dhe nisjes së operacionit të fshirjes ekziston një vonesë e vogël.

Në momentin kur kontrolli është kryer tashmë, por operacioni i përshkimit të direktoriumeve për fshirje ende nuk ka nisur, sulmuesi mund ta zëvendësojë direktoriumin me skedarë të përkohshëm me një lidhje simbolike. Nëse veprimi kryhet në momentin e duhur, funksioni remove_dir_all() do ta trajtojë lidhjen simbolike si direktorium dhe do të nisë fshirjen e përmbajtjes ku ajo lidhje referon. Edhe pse suksesi i sulmit varet nga saktësia e kohës së zgjedhur për zëvendësimin e direktoriumit dhe goditja e saktë që në përpjekjen e parë është pak e mundshme, gjatë eksperimenteve studiuesit arritën të siguronin një kryerje të përsëritshme dhe të suksesshme të sulmit pas ekzekutimit të eksploitit për disa sekonda.

Të gjitha versionet e Rust nga 1.0.0 deri te 1.58.0, përfshirë, preken nga kjo cenueshmëri. Problemi deri tani është rregulluar në formën e një patch-i (rregullimi do të përfshihet në versionin 1.58.1, që pritet brenda disa orësh). Ecuria e eliminimit të cenueshmërisë në distributime mund të ndiqet në këto faqe: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch, FreeBSD. Të gjithë përdoruesit e programeve të shkruara në Rust, që ekzekutohen me privilegje të ngritura dhe përdorin funksionin remove_dir_all, këshillohen të përditësojnë urgjentisht Rust në versionin 1.58.1. Vlen të theksohet se patch-i i publikuar nuk e zgjidh problemin në të gjitha sistemet; për shembull, në OS REDOX dhe në versionet e macOS para 10.10 (Yosemite), cenueshmëria nuk bllokohet për shkak të mungesës së flamurit O_NOFOLLOW, i cili çaktivizon ndjekjen e lidhjeve simbolike.

Burimi: opennet.ru

Blini hosting të besueshëm për faqe interneti me mbrojtje nga DDoS, serverë VPS VDS 🔥 Blini hosting të besueshëm për faqe interneti me mbrojtje nga DDoS, serverë VPS VDS | ProHoster