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

Hay un sencillo código Python que gestiona la petición.
import os
def descargar_archivo(archivo):
directorio_base = "/var/www/archivos"
ruta_archivo = os.path.join(directorio_base, archivo)
if os.path.exists(ruta_archivo):
with open(ruta_archivo, '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

En este caso, el atacante utiliza ../../ para recorrer la estructura de directorios hasta el nivel raíz del sistema y acceder al archivo pasado, lo que le permite acceder a información confidencial.
Si quiere ver cómo se puede asegurar este método, desplácese hacia abajo hasta el contenido adicional.
En situaciones más complejas que impliquen varias capas de directorios o caracteres codificados (por ejemplo, %2e%2e%2f
), los atacantes pueden saltarse los filtros básicos y obtener un acceso más profundo al sistema de archivos.
Recorrido por los números
- El 2,7% de todas las vulnerabilidades detectadas en proyectos de código abierto en 2024 hasta la fecha eran de tipo 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 una previsión de 1.000 (2024).
- Como porcentaje de todas las vulnerabilidades, el path traversal es cada vez más común, con un aumento masivo en proyectos de código cerrado del 85%.

Nuestra investigación se centró en investigar proyectos tanto de código abierto como de código cerrado para revelar cuántos de ellos escondían vulnerabilidades de path traversal.
En general, el número de vulnerabilidades de path traversal es inferior al 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 los números tan altos como son. Es aún más alarmante ver que las tendencias de esta vulnerabilidad van en la dirección equivocada. f
Proyectos de código abierto
En los proyectos de código abierto, el path traversal representó el 2,6% de todas las vulnerabilidades notificadas en 2023. Esta cifra aumentó ligeramente en 2024, hasta el 2,75%. Aunque este incremento pueda parecer marginal a primera vista, subraya los retos que sigue planteando la protección del software de código abierto incluso frente a vulnerabilidades sencillas.
Proyectos de código cerrado
La tendencia más notable se observó en los proyectos de código cerrado, donde los incidentes de path traversal pasaron del 1,9% en 2023 al 3,5% en 2024, un aumento sustancial del 85% que pone de manifiesto una tendencia alarmante de este tipo de vulnerabilidad.
Por desgracia, las malas noticias no acaban aquí. Seguimos asistiendo a un aumento del número total de vulnerabilidades notificadas en proyectos de código abierto. El número total de vulnerabilidades de inyección notificadas 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).

Evitar el cruce de rutas
La prevención de las vulnerabilidades de inyección de comandos requiere un enfoque multifacético:
Validación de entradas
- Sanear las entradas de usuario: Elimina o codifica caracteres peligrosos como
../
,..\
,..%2f
u otras variaciones. - Enfoque de lista permitida: Definir un conjunto estricto de entradas permitidas (por ejemplo, nombres de archivos o rutas) y rechazar cualquier cosa fuera de esta lista.
Restringir el acceso a archivos
- Utilizar una jaula chroot o sandbox: Limita el acceso a los archivos de la aplicación a un directorio restringido, asegurando que no pueda atravesar más allá del árbol de directorios previsto.
- Establecer directorios raíz: Define directorios base y asegúrate de que todas las rutas son relativas a ellos. Utiliza APIs o frameworks que obliguen a ello, como:
java.nio.file.Paths.get("baseDir").resolve(userInput).normalize()
en Java.os.path.realpath()
yos.path.commonpath()
en Python.
API de acceso seguro a archivos
- Utilice métodos de acceso seguro a archivos proporcionados por bibliotecas o marcos de trabajo modernos:En JavaUtilice
Files.newInputStream()
oFiles.newBufferedReader()
para un manejo seguro de los archivos.
En PythonAsegúrate de validar las rutas de los archivos antes de acceder a ellos.
Restricciones de uso del entorno
- Establecer restricciones permisos del sistema de archivos:Asegúrese de que la aplicación sólo tiene los privilegios mínimos necesarios.
Denegar el acceso a directorios sensibles (por ejemplo,/etc
,/var
,/usr
y los directorios personales de los usuarios). - Desactivar funciones innecesarias en servidores web o frameworks (por ejemplo, el seguimiento de enlaces simbólicos).
Pruebas automatizadas
- Utilice herramientas como Aikido para escanear su código fuente y su aplicación y descubrir estas vulnerabilidades.
- Ambas herramientas, SAST y DAST, deben utilizarse conjuntamente con el escaneado de dominios y la seguridad en la nube para garantizar que no existen vulnerabilidades de paso ocultas.
Utiliza un cortafuegos integrado en la aplicación
- Una de las mejores defensas contra los ataques de inyección es un cortafuegos integrado en la aplicación capaz de detectar y bloquear comandos maliciosos.
El camino a seguir
Path traversal es una vulnerabilidad que ha estado presente desde el principio de las aplicaciones web y, aunque a menudo es bastante simple, también puede ser un exploit muy devastador. Por eso es tan preocupante que un porcentaje tan elevado de proyectos siga luchando con este tipo de problemas. Aunque un 3,5% no parece una cifra elevada, es bastante notable que siga creciendo a pesar de su clara amenaza continuada y bien documentada.
Path traversal no es una vulnerabilidad que vaya a desaparecer pero la buena noticia es que hay formas claras de encontrar estas vulnerabilidades en nuestra aplicación y remediar cualquier problema que encontremos.
Contenido adicional
Incidentes reales
En los últimos años se han producido varias infracciones o vulnerabilidades de gran repercusión que han implicado el cruce de rutas como principal punto de entrada o como parte de una cadena de vulnerabilidades.
Microsoft IIS Unicode Exploit (2001)
Uno de los primeros exploits de alto perfil de path traversal dirigido a servidores Microsoft IIS. Los atacantes utilizaban rutas codificadas para eludir los mecanismos de validación (por ejemplo, utilizando %c0%af
para representar /
). Esto les permitía acceder y ejecutar archivos fuera del directorio raíz de la web.
Esto permitió el despliegue de programas maliciosos y la desfiguración de numerosos sitios web.
Fortinet VPN Path Traversal (2019)
Se descubrió que SSL VPN de Fortinet tiene una vulnerabilidad de cruce de directorios (CVE-2018-13379). Los atacantes aprovecharon este fallo para acceder a archivos confidenciales del sistema, como contraseñas en texto plano de usuarios de VPN.
Miles de credenciales de VPN se filtraron en Internet, exponiendo a las organizaciones a accesos no autorizados y a nuevos ataques.
El incumplimiento de Capital One (2019)
Lo que ocurrió: 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 aprovechó los errores de configuración para recuperar archivos de configuración que deberían haber sido inaccesibles.
Esto expuso los datos personales de 106 millones de solicitantes de tarjetas de crédito.
Path Traversal en Kubernetes Dashboard (2020)
El tablero de mandos de Kubernetes tenía un fallo de traspaso de directorios (CVE-2020-8563). Los atacantes explotaban esto para leer archivos sensibles en el contenedor, incluyendo secretos almacenados en /etc
.