En la biblioteca async-tar, escrita en Rust y que proporciona funciones para leer y escribir archivos tar, se ha detectado una vulnerabilidad (CVE-2025-62518, nombre en clave TARmageddon) que permite al descomprimir un archivo tar especialmente diseñado no solo extraer los archivos contenidos en él, sino también aquellos de un archivo tar anidado. La vulnerabilidad puede ser utilizada para eludir sistemas de verificación de archivos y descomprimir archivos que no han sido validados.
La vulnerabilidad también se manifiesta en bifurcaciones de la biblioteca async-tar, como tokio-tar, krata-tokio-tar y astral-tokio-tar, así como en utilidades basadas en ellas, como el gestor de paquetes uv, desarrollado como un reemplazo de alto rendimiento de 'pip' para proyectos en Python. Entre los proyectos populares que utilizan bibliotecas vulnerables se incluyen la herramienta testcontainers para ejecutar contenedores docker y el entorno de ejecución de WebAssembly wasmCloud. En el repositorio crates.is, en los últimos 90 días, la biblioteca async-tar ha tenido 1.3 millones de descargas, tokio-tar 2.2 millones y testcontainers 2.9 millones.
La vulnerabilidad es causada por la elección incorrecta de la posición al analizar diferentes valores de tamaño en las cabeceras ustar y PAX. En archivos tar en formato PAX, para cada archivo dentro del archivo se especifican dos cabeceras: la clásica ustar y la ampliada PAX. El problema radica en que las bibliotecas vulnerables, al descomprimir archivos, en lugar de calcular el desplazamiento basado en el tamaño de la cabecera ampliada PAX, tomaban el tamaño de la obsoleta cabecera ustar. Con un tamaño cero en la cabecera ustar, el contenido siguiente se procesaba como un bloque TAR de cabecera válido para el siguiente archivo.


Para llevar a cabo un ataque, es suficiente crear un archivo TAR en el que en la cabecera ustar se indique un tamaño cero, y en la cabecera para el formato PAX el tamaño real, lo que provoca que el contenido de un archivo con otro archivo tar se procese como parte del archivo principal. Un ejemplo de código para crear tales archivos está disponible en GitHub. La vulnerabilidad se ha solucionado en las versiones tokio-tar 0.5.6 y uv 0.9.5. Para las demás bibliotecas, las correcciones aún no se han publicado, pero se han preparado parches por separado para astral-tokio-tar, async-tar y krata-tokio-tar.
Las vulnerabilidades en las bibliotecas han recibido un nivel de gravedad de 8.1 sobre 10, ya que el problema puede ser utilizado para sobrescribir archivos extraídos (en las implementaciones vulnerables se extraerán archivos diferentes de los que eran visibles en el archivo comprimido). Sin embargo, la vulnerabilidad en el gestor de paquetes uv se marcó como no peligrosa, ya que si un atacante puede influir en el contenido del archivo comprimido original, no tiene sentido complicar el ataque y explotar la vulnerabilidad a través de un archivo comprimido anidado, cuando se puede lograr la ejecución de código a través de scripts de construcción en el archivo comprimido principal.
Los investigadores que detectaron la vulnerabilidad propusieron varios escenarios hipotéticos de ataques que permiten eludir las comprobaciones de seguridad y lograr la ejecución de código mediante la sustitución de archivos de configuración o la intervención en el proceso de compilación. Se supone que el archivo comprimido enviado podrá pasar un chequeo automatizado por un escáner de seguridad y una auditoría manual, durante la cual el auditor no prestará atención a un extraño archivo comprimido anidado con otros archivos, después de lo cual, al descomprimirlo con las bibliotecas de Rust, se extraerá contenido diferente al esperado.
Por ejemplo, un atacante puede cargar un archivo comprimido modificado en el repositorio de PyPI, que pasará la verificación basada en el análisis del contenido del archivo comprimido principal, que contiene un archivo legítimo pyproject.toml. Al procesar este paquete con la herramienta uv, el pyproject.toml legítimo será reemplazado por una variante maliciosa del archivo comprimido anidado, que contiene comandos que se ejecutarán durante la compilación en la computadora del desarrollador o en el sistema de integración continua. De manera similar, se puede organizar la sobrescritura de archivos del contenedor al extraer la imagen del contenedor usando la herramienta testcontainers.
Fuente: opennet.ru
