Sårbarhet i Rust-standardbiblioteket

En sårbarhet (CVE-2022-21658) har blitt identifisert i Rust-standardbiblioteket på grunn av en rasetilstand i std::fs::remove_dir_all()-funksjonen. Hvis denne funksjonen brukes til å slette midlertidige filer i et privilegert program, kan en angriper oppnå sletting av vilkårlige systemfiler og kataloger som angriperen normalt ikke ville ha tilgang til å slette.

Sårbarheten er forårsaket av feil implementering av kontroll av symbolske lenker før rekursiv sletting av kataloger. I stedet for å forhindre at symbolkoblinger følges, sjekker remove_dir_all() først om filen er en symbolkobling. Hvis en kobling er definert, slettes den som en fil, og hvis det er en katalog, kalles en operasjon for rekursiv innholdsfjerning. Problemet er at det er en liten forsinkelse mellom kontrollen og starten av sletteoperasjonen.

På et tidspunkt da kontrollen allerede er utført, men operasjonen med å telle opp kataloger for sletting ennå ikke har begynt, kan angriperen erstatte katalogen med midlertidige filer med en symbolsk lenke. Hvis den treffer til rett tid, vil remove_dir_all()-funksjonen behandle den symbolske lenken som en katalog og begynne å fjerne innholdet som koblingen peker til. Til tross for at suksessen til angrepet avhenger av nøyaktigheten til det valgte tidspunktet for å erstatte katalogen og treffe riktig øyeblikk første gang er usannsynlig, under eksperimentene var forskerne i stand til å oppnå et repeterbart vellykket angrep etter å ha utført utnyttelsen innen noen få sekunder.

Alle versjoner av Rust fra 1.0.0 til og med 1.58.0 er berørt. Problemet er løst i oppdateringsform foreløpig (reparasjonen vil bli inkludert i 1.58.1-utgivelsen, som forventes i løpet av noen få timer). Du kan overvåke eliminering av sårbarheten i distribusjoner på disse sidene: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch, FreeBSD. Alle brukere av Rust-programmer som kjører med forhøyede rettigheter og bruker remove_dir_all-funksjonen, anbefales å raskt oppdatere Rust til versjon 1.58.1. Det er interessant at den utgitte oppdateringen ikke løser problemet på alle systemer; for eksempel i REDOX OS og versjoner av macOS før 10.10 (Yosemite), er ikke sårbarheten blokkert på grunn av fraværet av O_NOFOLLOW-flagget, som deaktiverer følgende symbolske lenker.

Kilde: opennet.ru

Legg til en kommentar