XUT_ / COURSES / PENETRATION TESTER

Privilege Escalation - PATH

Si un archivo, para el que tu usuario tiene permisos de escritura, está situado en el PATH, podrías, potencialmente, secuestrar una aplicación para correr un script. PATH en Linux, es una variable de entorno que le dice al sistema operativo dónde buscar ejecutables. Para cualquier comando que no esté construido en la shell o definido en el PATH, Linux empezará a buscar en directorios bajo el PATH.

El PATH se ve así:

Privilege Escalation - PATH

Esto podemos usarlo en nuestro favor de la siguiente manera:

Primero debemos responder a las siguientes preguntas:

  1. ¿Qué directorios están bajo el $PATH?
  2. ¿Tiene permisos de escritura en alguno de estos nuestro usuario actual?
  3. ¿Puedes modificar el $PATH?
  4. ¿Hay algún script/aplicación que puedas arrancar que sea afectada por esta vulnerabilidad?

Con propósitos de demostración, usaremos el siguiente script:

Privilege Escalation - PATH

CAUTION

Añade: #include <stdlib.h> // PARA system() (para que no pete).

Este script intenta lanzar un binario de sistema llamado thm pero se puede replicar con cualquier binario.

Compilamos este en un ejecutable con bit SUID configurado.

Privilege Escalation - PATH

Nuestro usuario ahora tiene acceso al script "path" con SUID.

Privilege Escalation - PATH

Si ejecutamos "path", este buscará un archivo ejecutable llamado "thm" en todos los directorios listados en PATH. Si alguno de los directorios listados en PATH es escribible, podríamos crear un binario "thm" y el script "path" lo ejecutaría. Como tiene configurado el SUID, correría con permisos de root.

Para encontrar estos directorios usamos: find / -writable 2>/dev/null | cut -d "/" -f 2 | sort -u

Privilege Escalation - PATH

Algunos escenarios CTF pueden presentar diferentes directorios pero un sistema normal mostraría algo similar a lo que vemos arriba. Si lo comparamos al path podemos ver cuáles son.

Privilege Escalation - PATH

Como vemos directorios como /usr/local/bin, podemos ajustar nuestro comando de búsqueda de la siguiente manera: find / -writable 2>/dev/null | cut -d "/" -f 2,3 | grep -v proc | sort -u

Privilege Escalation - PATH

Por desgracia, no son escribibles.

El directorio más fácilmente escribible es /tmp. Pero este no es un directorio de PATH, por lo que necesitamos añadirlo: export PATH=/tmp:$PATH.

Privilege Escalation - PATH

Ahora ya buscará en /tmp por lo que si creamos el binario allí se ejecutará.

Privilege Escalation - PATH

Lo que hace que esta escalada de privilegios funcione es que el script path se ejecuta con permisos de administrador.

Privilege Escalation - PATH