Vulnerabilidad Path traversal
www.onlinetis.com
La vulnerabilidad Path Traversal, también conocida como "Directory Traversal", es un ataque que permite a un atacante acceder a archivos y directorios fuera del directorio raíz previsto de una aplicación. Esto se logra al manipular la entrada del usuario con secuencias especiales, como ../
, que le permiten "subir" en la estructura de directorios del servidor.
¿Cómo funciona?
El ataque explota un control de validación insuficiente en las funciones de la aplicación que manejan rutas de archivos. El atacante inyecta una secuencia que representa un directorio padre para navegar libremente por el sistema de archivos del servidor.
Ejemplo de ataque:
Imagina una aplicación que carga archivos de imagen basándose en un parámetro de la URL:
http://ejemplo.com/mostrar.php?file=imagen1.jpg
El servidor podría estar construyendo la ruta del archivo de la siguiente manera:
/var/www/images/ + [entrada_del_usuario]
Si el atacante no valida la entrada, puede sustituir imagen1.jpg
por una secuencia maliciosa:
http://ejemplo.com/mostrar.php?file=../../../../etc/passwd
El servidor, al procesar esta petición, construiría la siguiente ruta:
/var/www/images/../../../../etc/passwd
Al resolver esta ruta, el servidor termina accediendo al archivo /etc/passwd
del sistema de archivos, devolviendo su contenido al atacante. Con esta técnica, un atacante puede leer archivos de configuración, código fuente o cualquier otro archivo sensible en el servidor.
Prevención
La prevención se basa en validar y controlar la entrada del usuario de manera estricta:
Validación de entrada: Acepta solo nombres de archivo que no contengan los caracteres
../
o secuencias similares que permitan la navegación de directorios. La mejor práctica es utilizar una lista blanca de caracteres permitidos.Normalización de rutas: Antes de procesar la entrada, normaliza la ruta del archivo para asegurarse de que no contenga secuencias de escape.
Limitar el alcance: Restringe la capacidad de la aplicación para acceder a archivos fuera de un directorio específico. Esto se puede lograr con un "chroot jail" (cambio de directorio raíz) o un entorno de contenedor que aísle la aplicación.
Evitar concatenar directamente la entrada: En lugar de concatenar la entrada del usuario, utiliza APIs de acceso a archivos que resuelvan la ruta de forma segura.