Sårbarhed i Rust-standardbiblioteket

En sårbarhed (CVE-2022-21658) er blevet identificeret i Rust-standardbiblioteket på grund af en racetilstand i std::fs::remove_dir_all()-funktionen. Hvis denne funktion bruges til at slette midlertidige filer i et privilegeret program, kan en angriber opnå sletning af vilkårlige systemfiler og mapper, som angriberen normalt ikke ville have adgang til at slette.

Sårbarheden er forårsaget af forkert implementering af kontrol af symbolske links før rekursiv sletning af mapper. I stedet for at forhindre symlinks i at blive fulgt, kontrollerer remove_dir_all() først, om filen er et symbollink. Hvis et link er defineret, slettes det som en fil, og hvis det er en mappe, kaldes en rekursiv indholdsfjernelsesoperation. Problemet er, at der er en lille forsinkelse mellem kontrollen og starten af ​​sletningsoperationen.

På et tidspunkt, hvor kontrollen allerede er udført, men operationen med at opregne mapper til sletning endnu ikke er begyndt, kan angriberen erstatte mappen med midlertidige filer med et symbolsk link. Hvis det rammer på det rigtige tidspunkt, vil funktionen remove_dir_all() behandle det symbolske link som en mappe og begynde at fjerne det indhold, som linket peger på. På trods af at angrebets succes afhænger af nøjagtigheden af ​​det valgte tidspunkt for udskiftning af mappen og at ramme det rigtige øjeblik den første gang er usandsynligt, var forskerne under eksperimenterne i stand til at opnå et gentageligt succesfuldt angreb efter at have udført udnyttelsen inden for et par sekunder.

Alle versioner af Rust fra 1.0.0 til og med 1.58.0 er berørt. Problemet er blevet løst i patchform indtil videre (rettelsen vil blive inkluderet i 1.58.1-udgivelsen, som forventes inden for et par timer). Du kan overvåge elimineringen af ​​sårbarheden i distributioner på disse sider: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch, FreeBSD. Alle brugere af Rust-programmer, der kører med forhøjede rettigheder og bruger funktionen remove_dir_all, rådes til hurtigst muligt at opdatere Rust til version 1.58.1. Det er interessant, at den frigivne patch ikke løser problemet på alle systemer; for eksempel i REDOX OS og versioner af macOS før 10.10 (Yosemite), er sårbarheden ikke blokeret på grund af fraværet af O_NOFOLLOW-flaget, som deaktiverer følgende symbolske links.

Kilde: opennet.ru

Tilføj en kommentar