Vulnerabilitat a la biblioteca estàndard Rust

S'ha identificat una vulnerabilitat (CVE-2022-21658) a la biblioteca estàndard de Rust a causa d'una condició de carrera a la funció std::fs::remove_dir_all(). Si aquesta funció s'utilitza per suprimir fitxers temporals en una aplicació privilegiada, un atacant pot aconseguir la supressió de fitxers i directoris del sistema arbitraris que l'atacant normalment no tindria accés per eliminar.

La vulnerabilitat és causada per una implementació incorrecta de la comprovació dels enllaços simbòlics abans d'eliminar els directoris de manera recursiva. En lloc d'evitar que es segueixin els enllaços simbòlics, primer remove_dir_all() comprova si el fitxer és un enllaç simbòlic. Si es defineix un enllaç, s'elimina com a fitxer i, si és un directori, s'anomena una operació d'eliminació de contingut recursiva. El problema és que hi ha un lleuger retard entre la comprovació i l'inici de l'operació d'eliminació.

En un moment en què la comprovació ja s'ha realitzat, però encara no ha començat l'operació d'enumeració de directoris per esborrar, l'atacant pot substituir el directori per fitxers temporals amb un enllaç simbòlic. Si arriba en el moment adequat, la funció remove_dir_all() tractarà l'enllaç simbòlic com un directori i començarà a eliminar el contingut al qual apunta l'enllaç. Tot i que l'èxit de l'atac depèn de la precisió del moment escollit per substituir el directori i arribar al moment adequat la primera vegada és poc probable, durant els experiments els investigadors van poder aconseguir un atac repetible amb èxit després d'executar l'explotació dins de uns segons.

Totes les versions de Rust de l'1.0.0 a la 1.58.0 incloses estan afectades. De moment, el problema s'ha resolt en forma de pedaç (la correcció s'inclourà a la versió 1.58.1, que s'espera d'aquí a unes hores). Podeu controlar l'eliminació de la vulnerabilitat a les distribucions en aquestes pàgines: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch, FreeBSD. Es recomana a tots els usuaris dels programes Rust que s'executen amb privilegis elevats i que utilitzen la funció remove_dir_all que actualitzin urgentment Rust a la versió 1.58.1. És interessant que el pedaç llançat no resol el problema en tots els sistemes; per exemple, en REDOX OS i versions de macOS anteriors a la 10.10 (Yosemite), la vulnerabilitat no està bloquejada a causa de l'absència de la bandera O_NOFOLLOW, que desactiva el seguiment simbòlic. enllaços.

Font: opennet.ru

Afegeix comentari