
PoC para CVE-2025-62518 que demuestra el contrabando de archivos tar mediante el análisis de encabezados PAX de tokio-tar, creando cargas maliciosas y un extractor vulnerable para mostrar la inyección en la cadena de suministro.
Vídeo: https://youtu.be/EYBB4BHsp9E
./outputmalicious.tar simple con un ejemplo de contenido oculto, los comentarios explican paso a paso y bloque por bloque lo que se está haciendoUsa el script de reproducción proporcionado o hazlo manualmente
Ejecuta malicious-payload para generar el payload
malicious.tarPasar este archivo a nuestra aplicación vulnerable-extract produce:
/vulnerable-extract$ ll output/
total 12
drwxrwxr-x 2 airinei airinei 4096 Jan 19 22:40 ./
drwxrwxr-x 5 airinei airinei 4096 Jan 19 22:40 ../
-rw-rw-r-- 1 airinei airinei 0 Jan 1 1970 benign_file.txt
-rw-rw-r-- 1 airinei airinei 18 Jan 1 1970 sh_profile_hijack
Mientras que al ejecutar la utilidad tar proporcionada por nuestro SO ((GNU tar) 1.35 en este caso) se obtiene:
malicious-payload$ tar -tvf malicious.tar
---------- 0/0 1024 1970-01-01 02:00 benign_file.txt
Observa que ve el tamaño del archivo como 1024
Alternativamente, usando astral-tokio-tar 0.5.6 en lugar de la abandonada tokio-tar 0.3.1 extrae correctamente el archivo.
CVE-2025-62518 (TARmageddon) es una vulnerabilidad de seguridad encontrada en la librería Rust tokio-tar (¡vulnerabilidad en Rust 😮). Se trata de un error lógico en cómo se analizan las cabeceras del formato tar, permitiendo a un atacante introducir archivos de contrabando.
La falla existe en la lógica que maneja las Cabeceras Extendidas PAX. En un archivo TAR, existen diferentes tipos de cabeceras:
USTAR: La cabecera estándar que contiene nombre de archivo, permisos y tamaño.PAX (Tipo x): Una cabecera de extensión utilizada para proporcionar metadatos (como un tamaño de archivo muy grande) para el siguiente archivo en el archivo.Cuando una cabecera PAX está presente, un analizador debe resolver el tamaño real del archivo priorizando los metadatos PAX sobre la cabecera estándar USTAR.
Pero ¿POR QUÉ hay 2 tipos de cabeceras que tienen prioridades para lo que parece ser lo mismo? Porque el formato TAR es antiguo (estandarizado en 1988), y USTAR tiene sus limitaciones (tamaño de hasta 8GB, nombre de archivo de hasta 256 caracteres). Eso es un problema, así que la cabecera PAX se añadió en 2001 para permitir archivos más grandes y nombres de archivo más largos.
En versiones vulnerables de tokio-tar, el analizador adopta correctamente el tamaño de la cabecera PAX para el lector de contenido del archivo, pero usa incorrectamente el tamaño de la cabecera USTAR para determinar dónde comienza la siguiente cabecera de archivo.
El núcleo del problema es un desajuste de puntero. Cuando la librería vulnerable procesa un archivo, usa dos "cabezas" internas diferentes para leer el flujo:
En un archivo normal, estas dos cabezas están de acuerdo. En TARmageddon, las forzamos a estar en desacuerdo. Al establecer el tamaño de PAX a 1024 y el tamaño de USTAR a 0, creamos una paradoja:
benign_file.txt.0 en la cabecera USTAR y piensa: "Ya estoy al final del archivo." Se queda exactamente donde está.En consecuencia, la Cabeza de Análisis trata los datos dentro del bloque de 1024 bytes como el siguiente conjunto de instrucciones. Si esos datos parecen una cabecera TAR válida, la librería "descubrirá" y extraerá un segundo archivo que técnicamente no existe según la estructura global del archivo.
El Payload de Contrabando:
El payload se construye como una secuencia de bloques de 512 bytes. Aquí está el diseño utilizado en el generador malicious-payload:
| Bloque | Rol | Descripción |
|---|---|---|
| 1 & 2 | Metadatos PAX | Afirma que el siguiente archivo tiene 1024 bytes de largo. |
| 3 | Cabecera Base | benign.txt. Crucialmente establece el tamaño a 0. |
| 4 | Cabecera de Contrabando | backdoor.sh. Oculto dentro del área de "datos". |
| 5 | Datos de Contrabando | El contenido malicioso (por ejemplo, alias de shell). |
| 6 & 7 | EOF | Terminación estándar de bloque nulo. |
Debido a que las herramientas estándar (como GNU tar) siguen correctamente el tamaño de PAX, ven los Bloques 4 y 5 como datos binarios inofensivos que pertenecen a benign_file.txt. Nunca "ejecutan" la cabecera en el Bloque 4.
¿Cómo puede explotarse que este crate tenga una vulnerabilidad? ¿Por qué importa que se introduzca un archivo de contrabando en un archivo?
Un atacante introduce archivos maliciosos de contrabando en un sistema de compilación. Extraer esto, ya sea para desarrollo o en una máquina CI, puede sobrescribir archivos de compilación legítimos, comprometiendo esa máquina e incluso engañando al sistema de compilación para que firme archivos maliciosos.
Un escáner inspecciona un .tar, escaneándolo solo en el modo correcto, pueden estar presentes archivos no deseados en la extracción pero que no fueron escaneados.
Inspirado por este análisis