Vulnerabilitet në bibliotekën standarde të gjuhës Rust

Në bibliotekën standarde të gjuhës Rust është identifikuar një vulnerabilitet (CVE-2022-21658) që lidhet me një gjendje garuese në funksionin std::fs::remove_dir_all(). Nëse ky funksion përdoret për të hequr skedarët e përkohshëm në një aplikacion me privilegje, një sulmues mund të arrijë të fshijë skedarë dhe dosje të rastësishme sistemike, për të cilat në kushte normale nuk ka qasje.

Vulnerabiliteti shkaktohet nga një implementim të papërshtatshëm të kontrollit të lidhjeve simbolike para fshirjes rekursive të dosjeve. Në vend që të ndalojë ndjekjen e lidhjeve simbolike, funksioni remove_dir_all() fillimisht kontrollon nëse skedari është një lidhje simbolike. Nëse një lidhje është e përcaktuar, ajo hiqet si skedar, ndërsa nëse është një dosje, operacioni i fshirjes rekursive i përmbajtjes ekzekutohet. Problemi është se midis kontrollit dhe fillimit të operacionit të fshirjes ekziston një vonesë e vogël.

Në momentin kur kontrolli është kryer tashmë, por operacioni i skanimit të katalogut për fshirje nuk ka filluar ende, sulmuesi mund të zëvendësojë katalogun me skedarë temporarë me një lidhje simbolike. Nëse është bërë në momentin e duhur, funksioni remove_dir_all() do ta trajtojë lidhjen simbolike si një katalog dhe do të fillojë të fshijë përmbajtjen në të cilën kjo lidhje tregon. Edhe pse suksesi i sulmit varet nga saktësia e kohës së zgjedhur për zëvendësimin e katalogut dhe kapa me një herë në momentin e duhur është e pakët, gjatë eksperimenteve, studiuesit arritën të realizojnë me sukses sulmin pas ekzekutimit të eksploitit brenda disa sekondash.

Të gjitha versionet e Rust nga 1.0.0 deri në 1.58.0 përfshirë janë të ndjeshme ndaj dobësive. Problemi është zgjidhur për momentin me një patch (korrigjimi do të përfshihet në versionin 1.58.1, i cili pritet brenda disa orësh). Mund të ndiqni zgjidhjen e dobësive në shpërndarje në këto faqe: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch, FreeBSD. Të gjithë përdoruesit e programeve në gjuhën Rust, që ekzekutojnë me privilegje të larta dhe përdorin funksionin remove_dir_all, rekomandohet të azhurnojnë urgjentisht Rust në versionin 1.58.1. Është interesante që patch-i i lëshuar nuk zgjidh problemin në të gjithë sistemet, për shembull, në sistemin operativ REDOX dhe versionet e macOS deri në 10.10 (Yosemite) dobësia nuk bllokohet për shkak të mungesës së flagut O_NOFOLLOW, i cili ndalon ndjekjen e lidhjeve simbolike.

Burimi: opennet.ru

Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS 🔥 Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS | ProHoster