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:

Imagen 1. Parámetro visible desde 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:

Imagen 2. Resultado Nmap

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:

Imagen 3. Petición vulnerable

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!

 

Imagen 4. Error de cambio de dirección

En la última consulta se pudo leer el archivo passwd, mostrando su contenido en la repuesta del servidor:

Imagen 5. Respuesta con el archivo passwd

Y en el siguiente diagrama se muestra cómo se realizó la solicitud al archivo “inicio.php”.

Imagen 6. Estructura de solicitud de archivo.

Finalmente, este fue el flujo para localizar el archivo passwd dentro de un entorno Linux divulgando información confidencial.

Imagen 7. Estructura de archivo solicitado aplicando path traversal

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