El recorrido de directorios (path traversal) es una vulnerabilidad que permite leer o escribir archivos fuera de la carpeta prevista manipulando rutas con secuencias como ../.
Cómo funciona
Las aplicaciones suelen construir rutas de archivo a partir de la entrada del usuario: download?file=report.pdf se convierte en /var/www/files/report.pdf. Si la entrada no se valida, un atacante puede pedir ../../../../etc/passwd o ..\..\windows\win.ini y salir del directorio previsto. Variantes codificadas (%2e%2e%2f), rutas absolutas y archivos comprimidos con nombres manipulados («Zip Slip») esquivan los filtros ingenuos. La debilidad está catalogada como CWE-22.
Por qué es importante
Leer archivos arbitrarios expone configuraciones, código fuente, claves privadas, hashes de contraseñas y datos de sesión. Escribirlos es aún peor: el atacante puede dejar una web shell o sobrescribir la configuración y lograr la ejecución remota de código. Ejemplos destacados:
- Fortinet FortiOS SSL VPN (CVE-2018-13379): un fallo de path traversal exponía archivos de sesión de la VPN con contraseñas en texto claro; más tarde se publicaron en foros de hackers listas con decenas de miles de equipos afectados.
- Citrix ADC/NetScaler (CVE-2019-19781): un recorrido de directorios permitía ejecutar código y se explotó de forma masiva a principios de 2020.
Este tipo de fallos aparece con frecuencia en el catálogo Known Exploited Vulnerabilities de CISA, sobre todo en pasarelas VPN, servidores de transferencia de archivos e interfaces de gestión web, donde los exploits públicos llegan poco después de la divulgación.
Cómo prevenirlo
- No usar la entrada del usuario directamente en rutas; asignar las peticiones a identificadores o a una lista de nombres permitidos.
- Canonicalizar la ruta y comprobar que no sale del directorio base permitido.
- Ejecutar los servicios con permisos mínimos sobre el sistema de archivos y aislarlos (contenedores, chroot).
- Validar las entradas de los archivos comprimidos antes de extraerlos.
El recorrido de directorios está muy relacionado con otras vulnerabilidades de manejo de entradas, como la inyección de código.