Vulnerabilidad en la biblioteca estándar del lenguaje Rust

Se ha identificado una vulnerabilidad en la biblioteca estándar del lenguaje Rust (CVE-2022-21658), relacionada con una condición de carrera en la función std::fs::remove_dir_all(). Si se utiliza esta función para eliminar archivos temporales en una aplicación privilegiada, un atacante podría lograr eliminar archivos y directorios del sistema arbitrarios, a los que normalmente no tendría acceso.

La vulnerabilidad es causada por una implementación incorrecta de la verificación de enlaces simbólicos antes de eliminar directorios recursivamente. En lugar de prohibir el seguimiento de enlaces simbólicos, la función remove_dir_all() primero verifica si el archivo es un enlace simbólico. Si se determina que es un enlace, se elimina como un archivo, mientras que si es un directorio, se inicia la operación de eliminación recursiva de su contenido. El problema es que hay un pequeño retraso entre la verificación y el inicio de la operación de eliminación.

En el momento en que se ha llevado a cabo la verificación, pero la operación de exploración de directorios para la eliminación aún no ha comenzado, el atacante puede reemplazar el directorio de archivos temporales por un enlace simbólico. Si el atacante actúa en el momento adecuado, la función remove_dir_all() tratará el enlace simbólico como un directorio y comenzará a eliminar el contenido al que apunta dicho enlace. A pesar de que el éxito del ataque depende de la precisión en la elección del momento de reemplazo del directorio y es poco probable que se logre en el primer intento, los investigadores han conseguido llevar a cabo con éxito el ataque de manera repetible tras ejecutar el exploit en cuestión de segundos.

Todas las versiones de Rust desde 1.0.0 hasta 1.58.0 inclusivo son vulnerables. El problema se ha abordado mediante un parche (la corrección se incluirá en la versión 1.58.1, que se espera en unas pocas horas). Se puede hacer un seguimiento de la corrección de la vulnerabilidad en los siguientes distribuciones: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch, FreeBSD. Se recomienda a todos los usuarios de programas escritos en Rust que se ejecutan con privilegios elevados y utilizan la función remove_dir_all que actualicen urgentemente Rust a la versión 1.58.1. Curiosamente, el parche lanzado no resuelve el problema en todos los sistemas, por ejemplo, en el sistema operativo REDOX y en las versiones de macOS anteriores a 10.10 (Yosemite), la vulnerabilidad no se bloquea debido a la falta de la bandera O_NOFOLLOW, que desactiva el seguimiento de enlaces simbólicos.

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster