
CVE-2025-4138 - Escritura arbitraria de archivos fuera del directorio de extracción
filter="data" de Python tarfileEscritura arbitraria de archivos fuera del directorio de extracción mediante una cadena de symlinks PATH_MAX.
Reportero: Caleb Brown (Google)
El filtro de datos tarfile de Python valida los destinos de los symlinks usando os.path.realpath(). Cuando la ruta resuelta supera PATH_MAX (4096 bytes en Linux), realpath() deja de resolver silenciosamente y añade los componentes restantes — incluido ../ — como cadenas literales. El filtro ve una ruta segura; el kernel sigue el recorrido real.
El exploit construye un tar con cuatro etapas:
a→ddd..., b→ddd...). Infla la ruta resuelta a ~3968 bytes.../ × 16 al final de la cadena. realpath() se desborda y no puede resolverlo. El kernel retrocede hasta la raíz de extracción./, y baja al directorio objetivo.ssh-keygen -t ed25519 -f /tmp/key -N ""
python3 CVE-2025-4138_tarfile_filter_bypass.py \
-o evil.tar \
-t /root/.ssh/authorized_keys \
-p /tmp/key.pub \
-m 0600
| Flag | Descripción |
|---|---|
Solo para pruebas de seguridad autorizadas y uso en CTF.
-o| Ruta del tar de salida |
-t | Ruta absoluta del archivo a escribir en el objetivo |
-p | Archivo local que se usará como contenido del payload |
-m | Permisos de archivo en octal (por defecto: 0644) |