Path traversal: leer y escribir ficheros fuera de su carpeta
Guía en castellano sobre path traversal (recorrido de directorios): uso de ../, descompresión de archivos (Zip Slip) y cómo se valida bien una ruta.
Qué es
El path traversal (recorrido de directorios) aparece cuando una aplicación construye la ruta de un fichero con datos del usuario y no impide salir de la carpeta prevista. Con secuencias como ../ se sube de nivel hasta llegar a cualquier fichero que el proceso pueda leer o escribir.
- GET /descargar?fichero=informe.pdf HTTP/1.1
+ GET /descargar?fichero=../../../../etc/passwd HTTP/1.1
Leer permite obtener configuración con contraseñas o claves. Escribir puede ser peor: sobrescribir ficheros de la aplicación suele terminar en ejecución de código.
Dónde suele aparecer
- Descargas y visores de ficheros con el nombre en un parámetro.
- Subida de ficheros que respeta el nombre original del fichero.
- Descompresión de archivos ZIP o TAR con rutas como
../dentro (el ataque conocido como Zip Slip). - Plantillas, idiomas o temas cargados por nombre (
?lang=es). - Herramientas y librerías que copian o mueven ficheros a partir de datos externos.
Cómo se busca
- Localiza parámetros que parezcan nombres de fichero o rutas.
- Prueba
../y sus variantes: codificadas en URL (%2e%2e%2f), doblemente codificadas, con barra invertida (..\) en servidores Windows o con rutas absolutas. - Si la aplicación añade una extensión o un prefijo, comprueba si se puede esquivar.
- Para los archivos comprimidos, crea uno con una entrada cuyo nombre contenga
../y súbelo donde se descomprima.
Para demostrar la lectura basta con un fichero del sistema sin datos sensibles. No leas claves ni datos de usuarios.
Cómo se evita
- No usar nombres de fichero del usuario: guardar un identificador y resolverlo en el servidor.
- Si no queda otra, normalizar la ruta completa y comprobar que sigue dentro de la carpeta permitida después de normalizarla.
- Al descomprimir, validar cada entrada del archivo de la misma forma.
- Ejecutar el proceso con permisos solo sobre las carpetas que necesita.
Al reportarlo
Indica si es lectura o escritura, qué ficheros quedan al alcance y con qué permisos se ejecuta el proceso. La escritura en una ruta controlada es mucho más grave que leer un fichero público del sistema.
Casos reales de Path traversal
Path traversal en ActiveStorage de Rails: una clave de blob manipulada permite escribir, leer y borrar ficheros
El DiskService de ActiveStorage construía rutas con la clave del blob sin validarla. Si una aplicación dejaba llegar datos del usuario al parámetro key: de attach(), se podía escribir, leer o borrar ficheros fuera del directorio de almacenamiento.
7 min
Path traversal en el rastreador de Burp Suite Professional al tratar los campos de subida de ficheros
Una web maliciosa rastreada por el escáner de Burp Suite Professional podía forzar la escritura de un fichero controlado por el atacante en una ruta arbitraria del usuario, abusando del tratamiento de `<input type="file">`.
4 min
Path traversal en mbstream (mariadb-backup): un .xbstream malicioso escribe fuera del directorio de destino
La utilidad mbstream de mariadb-backup no rechazaba componentes «..» en las rutas de un archivo .xbstream, así que un archivo malicioso creaba ficheros fuera del destino; con la extracción como root, escalaba a ejecución de código vía /etc/cron.d.
9 min
wcurl en Windows: una barra invertida literal en la URL escribe ficheros fuera del directorio elegido
get_url_filename() de wcurl neutralizaba las secuencias %2F y %5C, pero dejaba pasar la barra invertida literal. En Windows eso permitía crear un fichero fuera de la carpeta elegida por el usuario (CVE-2026-80256).
2 min
Leer cualquier fichero del servidor de GitLab moviendo una incidencia entre proyectos
Al copiar los adjuntos de una incidencia a otro proyecto, GitLab no validaba la ruta: con ../ se podía traer /etc/passwd o cualquier otro fichero del servidor.
2 min