Vulnerabilitatea în biblioteca standard Rust

O vulnerabilitate (CVE-2022-21658) a fost identificată în biblioteca standard Rust din cauza unei condiții de concurență în funcția std::fs::remove_dir_all(). Dacă această funcție este utilizată pentru a șterge fișiere temporare dintr-o aplicație privilegiată, un atacator poate obține ștergerea fișierelor și directoarelor de sistem arbitrare pe care atacatorul nu ar avea acces în mod normal să le ștergă.

Vulnerabilitatea este cauzată de implementarea incorectă a verificării legăturilor simbolice înainte de a șterge recursiv directoarele. În loc să împiedice urmărirea legăturilor simbolice, remove_dir_all() verifică mai întâi dacă fișierul este un link simbolic. Dacă o legătură este definită, atunci este șters ca fișier, iar dacă este un director, atunci este apelată o operație recursivă de eliminare a conținutului. Problema este că există o ușoară întârziere între verificare și începerea operațiunii de ștergere.

Într-un moment în care verificarea a fost deja efectuată, dar operațiunea de enumerare a directoarelor pentru ștergere nu a început încă, atacatorul poate înlocui directorul cu fișiere temporare cu o legătură simbolică. Dacă ajunge la momentul potrivit, funcția remove_dir_all() va trata linkul simbolic ca pe un director și va începe să elimine conținutul către care indică linkul. În ciuda faptului că succesul atacului depinde de acuratețea timpului ales de înlocuire a directorului și de a lovi momentul potrivit pentru prima dată este puțin probabil, în timpul experimentelor, cercetătorii au reușit să realizeze un atac repetabil cu succes după executarea exploitului în cadrul câteva secunde.

Toate versiunile Rust de la 1.0.0 la 1.58.0 inclusiv sunt afectate. Problema a fost rezolvată sub formă de patch pentru moment (remedierea va fi inclusă în versiunea 1.58.1, care este așteptată în câteva ore). Puteți monitoriza eliminarea vulnerabilității în distribuții pe aceste pagini: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch, FreeBSD. Toți utilizatorii programelor Rust care rulează cu privilegii ridicate și care folosesc funcția remove_dir_all sunt sfătuiți să actualizeze de urgență Rust la versiunea 1.58.1. Este interesant că patch-ul lansat nu rezolvă problema pe toate sistemele; de ​​exemplu, în sistemul de operare REDOX și versiunile de macOS înainte de 10.10 (Yosemite), vulnerabilitatea nu este blocată din cauza absenței steagului O_NOFOLLOW, care dezactivează urmărirea simbolică. link-uri.

Sursa: opennet.ru

Adauga un comentariu