Sårbarhet i Rust-standardbiblioteket

En sårbarhet (CVE-2022-21658) har identifierats i Rust-standardbiblioteket på grund av ett rastillstånd i std::fs::remove_dir_all()-funktionen. Om den här funktionen används för att ta bort temporära filer i en privilegierad applikation, kan en angripare ta bort godtyckliga systemfiler och kataloger som angriparen normalt inte skulle ha tillgång till att radera.

Sårbarheten orsakas av felaktig implementering av kontroll av symboliska länkar innan kataloger tas bort rekursivt. Istället för att förhindra att symboliska länkar följs, kontrollerar remove_dir_all() först om filen är en symbolisk länk. Om en länk är definierad raderas den som en fil, och om det är en katalog anropas en rekursiv borttagning av innehåll. Problemet är att det finns en liten fördröjning mellan kontrollen och starten av raderingsoperationen.

Vid en tidpunkt då kontrollen redan har utförts, men operationen med att räkna upp kataloger för radering ännu inte har börjat, kan angriparen ersätta katalogen med temporära filer med en symbolisk länk. Om den träffar vid rätt tidpunkt kommer funktionen remove_dir_all() att behandla den symboliska länken som en katalog och börja ta bort innehållet som länken pekar på. Trots att attackens framgång beror på noggrannheten i den valda tiden för att byta ut katalogen och träffa rätt ögonblick första gången är osannolikt, under experimenten kunde forskarna uppnå en repeterbar framgångsrik attack efter att ha utfört exploateringen inom några sekunder.

Alla versioner av Rust från 1.0.0 till och med 1.58.0 påverkas. Problemet har lösts i patchform för tillfället (fixen kommer att inkluderas i 1.58.1-versionen, som förväntas inom några timmar). Du kan övervaka elimineringen av sårbarheten i distributioner på dessa sidor: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch, FreeBSD. Alla användare av Rust-program som körs med förhöjda privilegier och använder funktionen remove_dir_all rekommenderas att omedelbart uppdatera Rust till version 1.58.1. Det är intressant att den släppta patchen inte löser problemet på alla system; till exempel i REDOX OS och versioner av macOS före 10.10 (Yosemite), blockeras inte sårbarheten på grund av frånvaron av flaggan O_NOFOLLOW, vilket inaktiverar följande symboliska länkar.

Källa: opennet.ru

Lägg en kommentar