Der standardbibliotek i Rust-sproget er blevet opdaget en sårbarhed (CVE-2022-21658) relateret til en race condition i funktionen std::fs::remove_dir_all(). Hvis denne funktion anvendes til at fjerne midlertidige filer i en privilegeret applikation, kan en angriber opnå fjernelse af vilkårlige systemfiler og -mapper, som de normalt ikke har adgang til.
Sårbarheden skyldes en fejlagtig implementering af tjekket for symboliske links før rekursiv sletning af mapper. I stedet for at forhindre følgning af symboliske links, kontrollerer funktionen remove_dir_all() først, om filen er et symbolsk link. Hvis linket er defineret, fjernes det som en fil, og hvis det er en mappe, kaldes operativt rekursiv sletning af indholdet. Problemet er, at der er en liten forsinkelse mellem tjekket og starten af sletningsoperationen.
I det øjeblik, hvor tjekket allerede er udført, men operationen med at gennemgå mapperne til sletning endnu ikke er startet, kan angriberen erstatte mappen med midlertidige filer med et symbolsk link. Hvis det sker på det rette tidspunkt, vil funktionen remove_dir_all() behandle det symbolske link som en mappe og begynde at slette indholdet, som dette link henviser til. Selvom suksessen af angrebet afhænger af nøjagtigheden af det valgte tidsvindue, og det er usandsynligt at ramme det rette øjeblik første gang, har forskere været i stand til at gentage et vellykket angreb efter at have udført exploit'et inden for et par sekunder.
Alle versioner af Rust fra 1.0.0 til og med 1.58.0 er udsat for sårbarheden. Problemet er midlertidigt løst i form af en patch (rettelsen vil blive inkluderet i version 1.58.1, som forventes inden for et par timer). Man kan følge op på reparationen af sårbarheden i distributionerne på disse sider: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch, FreeBSD. Alle brugere af programmer skrevet i Rust, der kører med forhøjede privilegier og bruger funktionen remove_dir_all, anbefales stærkt at opdatere Rust til version 1.58.1. Interessant nok løser den udgivne patch ikke problemet på alle systemer; for eksempel i REDOX-OS og versioner af macOS før 10.10 (Yosemite) blokkeres sårbarheden ikke på grund af manglen på O_NOFOLLOW-flaget, der forhindrer følge af symboliske links.
Kilde: opennet.ru
