El path traversal, también conocido como directory traversal, ocurre cuando un usuario malintencionado manipula datos proporcionados por el usuario para obtener acceso no autorizado a archivos y directorios. Típicamente, el atacante intentará acceder a registros y credenciales que se encuentran en directorios diferentes. El path traversal no es una vulnerabilidad nueva y ha sido explotado activamente desde los años 90, cuando los servidores web ganaron popularidad, muchos dependían de scripts de Common Gateway Interface (CGI) para ejecutar contenido dinámico del lado del servidor.
Con una historia tan larga, ¿sigue siendo popular el path traversal hoy en día? Realizamos un estudio de proyectos tanto de código abierto como de código cerrado para recopilar datos y ver cuán común era el path traversal en 2024 y si estamos mejorando, spoiler: no lo estamos.
Ejemplo de path traversal
Entonces, ¿cómo funciona exactamente el path traversal? Veamos un ejemplo sencillo.
En esta aplicación sencilla, se le proporciona a un usuario un archivo para descargar a través de una variable en la URL.

Hay un código Python de backend sencillo que maneja la solicitud.
import os
def download_file(file):
base_directory = "/var/www/files"
file_path = os.path.join(base_directory, file)
if os.path.exists(file_path):
with open(file_path, 'rb') as f:
return f.read()
else:
return "Archivo no encontrado"
Ahora, como la variable se suministra en la URL, podemos cambiarla a algo como esto. file=../../../../etc/passwd

Aquí el atacante está utilizando ../../ para ascender en la estructura de directorios hasta el nivel raíz del sistema y acceder al archivo pasado, obteniendo potencialmente acceso a información sensible.
Si quieres ver cómo se podría asegurar este método, desplázate hasta el contenido extra.
En escenarios más complejos que involucran múltiples capas de directorios o caracteres codificados (p. ej., %2e%2e%2f), los atacantes pueden eludir los filtros básicos y obtener un acceso más profundo al sistema de archivos.Path traversal en cifras
- El 2.7% de todas las vulnerabilidades encontradas en proyectos de código abierto en lo que va de 2024 fueron de path traversal.
- ¡3.5% para proyectos de código cerrado!
- Un aumento en el número total de vulnerabilidades de path traversal en proyectos de código abierto de 742 (2023) a un esperado 1.000 (2024).
- Como porcentaje de todas las vulnerabilidades, el path traversal se está volviendo más común con un aumento masivo del 85% en proyectos de código cerrado.

Nuestra investigación se centró en analizar proyectos tanto de código abierto como de código cerrado para revelar cuántos contenían vulnerabilidades de path traversal ocultas.
En general, el número de vulnerabilidades de path traversal es menor que el de otras que hemos investigado, como las inyecciones de comandos o las inyecciones SQL. Pero considerando que esta vulnerabilidad puede ser muy peligrosa y tiene soluciones bien documentadas para prevenirla, es alarmante ver que las cifras son tan altas. Es aún más alarmante ver que las tendencias de esta vulnerabilidad van en la dirección equivocada.
Proyectos de Código Abierto
En proyectos de código abierto, el recorrido de rutas representó el 2,6% de todas las vulnerabilidades reportadas en 2023. Esta cifra experimentó un ligero aumento en 2024, ascendiendo al 2,75%. Aunque este incremento pueda parecer marginal a primera vista, subraya los desafíos continuos en la seguridad del software de código abierto frente a vulnerabilidades incluso simples.
Proyectos de Código Cerrado
La tendencia más destacada se observó en proyectos de código cerrado, donde los incidentes de recorrido de rutas se dispararon del 1,9% en 2023 al 3,5% en 2024, un aumento sustancial del 85% que subraya una tendencia alarmante de este tipo de vulnerabilidad.
Las malas noticias, lamentablemente, no terminan ahí. Seguimos observando un aumento en el número total de vulnerabilidades reportadas en proyectos de código abierto. El número total de vulnerabilidades de inyección reportadas en proyectos de código abierto pasó de 742 en 2023 a 917 en lo que va de 2024 (se espera que alcance las 1.000).

Prevención del Recorrido de Rutas
La prevención de vulnerabilidades de inyección de comandos requiere un enfoque multifacético:
Validación de Entradas
- Sanear las entradas de usuario: Eliminar o codificar caracteres peligrosos como
../,..\,..%2f, u otras variaciones. - Enfoque de lista blanca: Definir un conjunto estricto de entradas permitidas (p. ej., nombres de archivo o rutas) y rechazar cualquier cosa que no esté en esta lista.
Restringir el Acceso a Archivos
- Usar una jaula chroot o sandbox: Limitar el acceso a archivos de la aplicación a un directorio restringido, asegurando que no pueda recorrer más allá del árbol de directorios previsto.
- Establecer directorios raíz: Definir directorios base y asegurar que todas las rutas sean relativas a ellos. Utilizar APIs o frameworks que impongan esto, como:
java.nio.file.Paths.get("baseDir").resolve(userInput).normalize()en Java.os.path.realpath()yos.path.commonpath()en Python.
APIs de Acceso Seguro a Archivos
- Utilice métodos seguros de acceso a archivos proporcionados por bibliotecas o frameworks modernos: En Java, utilice
Files.newInputStream()oFiles.newBufferedReader()para un manejo seguro de archivos.
En Python, asegúrese de validar las rutas de los archivos antes de acceder a ellos.
Utilice Restricciones de Entorno
- Establezca permisos restrictivos de sistema de archivos: Asegúrese de que la aplicación tenga solo los privilegios mínimos requeridos.
Deniegue el acceso a directorios sensibles (p. ej.,/etc,/var,/usr, y directorios de inicio de usuario). - Deshabilite características innecesarias en servidores web o frameworks (p. ej., seguimiento de enlaces simbólicos).
Pruebas Automatizadas
- Utilice herramientas como Aikido para escanear su código fuente y aplicación y descubrir estas vulnerabilidades.
- Las herramientas SAST y DAST deben usarse juntas, junto con el escaneo de dominio y la seguridad en la nube, para asegurar que no tiene vulnerabilidades ocultas de path traversal.
Utilice un firewall integrado en la aplicación
- Una de las mejores defensas contra los ataques de inyección es un firewall integrado en la aplicación que sea capaz de detectar y bloquear comandos maliciosos.
El camino a seguir
El path traversal es una vulnerabilidad presente desde los inicios de las aplicaciones web y, aunque a menudo es bastante simple, también puede ser un exploit muy devastador. Esto hace que sea preocupante que un porcentaje tan elevado de proyectos siga lidiando con estos problemas. Si bien el 3,5% no parece una cifra alta, es bastante notable que el número esté creciendo en popularidad a pesar de su clara amenaza continua y bien documentada.
El path traversal no es una vulnerabilidad que vaya a desaparecer, pero la buena noticia es que existen formas claras de encontrar estas vulnerabilidades en nuestra aplicación y remediar cualquier problema que encontremos.
Contenido adicional
Incidentes en el mundo real
En los últimos años se han producido varias brechas o vulnerabilidades de alto perfil que involucraron el path traversal como punto de entrada principal o como parte de una cadena de vulnerabilidades.
Microsoft IIS Unicode Exploit (2001)
Uno de los primeros exploits de path traversal de alto perfil dirigidos a servidores Microsoft IIS. Los atacantes utilizaron rutas codificadas para eludir los mecanismos de validación (por ejemplo, usando %c0%af para representar /). Esto les permitió acceder y ejecutar archivos fuera del directorio raíz web.
Esto permitió el despliegue de malware y la desfiguración de numerosos sitios web.
Fortinet VPN Path Traversal (2019)
Se descubrió que la VPN SSL de Fortinet tenía una vulnerabilidad de directory traversal (CVE-2018-13379). Los atacantes explotaron esta falla para acceder a archivos de sistema sensibles, como contraseñas en texto plano para usuarios de VPN.
Miles de credenciales de VPN se filtraron en línea, exponiendo a las organizaciones a accesos no autorizados y a ataques posteriores.
Capital One Breach (2019)
Qué sucedió: Aunque la causa principal fue una vulnerabilidad SSRF, el atacante también aprovechó el directory traversal para acceder a los metadatos de los buckets de AWS S3. El atacante explotó configuraciones erróneas para recuperar archivos de configuración que deberían haber sido inaccesibles.
Esto expuso datos personales de 106 millones de solicitantes de tarjetas de crédito.
Path Traversal in Kubernetes Dashboard (2020)
El Dashboard de Kubernetes tenía un fallo de directory traversal (CVE-2020-8563). Los atacantes lo explotaron para leer archivos sensibles en el contenedor, incluyendo secretos almacenados en /etc.
Protege tu software ahora.



.avif)
