Path Traversal o Directory Traversal
Path traversal o directory traversal es una vulnerabilidad HTTP que permite a un atacante manipular la URL de una aplicación Web, para salir de su directorio raíz y tener acceso a partes del sistema de archivos, lo que le permitirá leer y divulgar el contenido como código y datos de la aplicación, credenciales para sistemas back-end, archivos confidenciales del sistema operativo, etcétera.
Los ataques de path traversal suelen manipular las entradas de la aplicación mediante el uso de la secuencia punto-punto-barra o alguna de sus variaciones (por ejemplo: “../” o “..\”), las cuales se usan para “volver a un directorio atrás/arriba”, con el fin de acceder a las carpetas que están jerárquicamente sobre la carpeta raíz Web, en el sistema de archivos del servidor
Algunas variaciones de la secuencia punto-punto-barra son las siguientes:
(../) punto-punto-barra | (..\) punto-punto-barra_invertida | |
Codificación URL | %2e%2e%2f | %2e%2e%5c |
%2e%2e/ | %2e%2e\ | |
..%2f | .. %5c | |
Doble codificación | ..%252F | ..%255C |
Lo que un atacante necesitaría para realizar un ataque path traversal es un navegador Web, así como conocimientos sobre los archivos y directorios predeterminados del sistema operativo definido como objetivo.
Contexto
Durante la ejecución de una prueba de seguridad a una aplicación Web, se identificó una petición en la cual se manda a llamar un archivo desde un parámetro “page”, el cual es visible en la URL:
Con ayuda Nmap, una herramienta de reconocimiento de servicios, se lanzó un escaneo para conocer el sistema operativo en el cual la aplicación estaba alojada, dando como resultado un sistema operativo Linux:
Una vez conocido el sistema operativo, nos enfocamos en consultar un archivo especifico, para conocer el nivel en el cual la aplicación se encuentra alojada: se tomó como referencia el archivo passwd, que en un entorno Linux está ubicado en la carpeta etc (/etc/passwd).
Con ayuda de una herramienta para la edición de peticiones HTTP (burp suite), se capturó la solicitud en la que se muestra el parámetro page y se envió a la opción llamada Repeater de la herramienta:
La opción de Repeater facilitó probar manualmente la dirección en la cual se aloja el archivo solicitado en la petición (inicio.php). En la prueba se modificó el valor del parámetro page por las siguientes cadenas:
../etc/passwd
../../etc/passwd
../../../etc/passwd
../../../../etc/passwd
Como resultado de los primeros recorridos de dirección, la aplicación devolvió el siguiente mensaje:
ERROR: File not found!
En la última consulta se pudo leer el archivo passwd, mostrando su contenido en la repuesta del servidor:
Y en el siguiente diagrama se muestra cómo se realizó la solicitud al archivo “inicio.php”.
Finalmente, este fue el flujo para localizar el archivo passwd dentro de un entorno Linux divulgando información confidencial.
Referencias
CWE-35: “Trayecto trasversal: ‘… /… //'”
https://cwe.mitre.org/data/definitions/35.html
CWE 73: “Recorrido de directorios”
https://cwe.mitre.org/data/definitions/73.html
CWE-200: “Exposición de información confidencial a un actor no autorizado”
https://cwe.mitre.org/data/definitions/200.html