
Directory Traversal
En esta sección, explicaremos qué es el cruce de directorios, describiremos cómo llevar a cabo ataques de cruce de ruta y eludir obstáculos comunes, y detallaremos cómo prevenir las vulnerabilidades de cruce de ruta.
¿Qué es, directory traversal?
El cruce de directorios (también conocido como cruce de rutas de archivos) es una vulnerabilidad de seguridad web que permite a un atacante leer archivos arbitrarios en el servidor que ejecuta una aplicación. Esto podría incluir código y datos de la aplicación, credenciales para sistemas back-end y archivos confidenciales del sistema operativo. En algunos casos, un atacante podría escribir en archivos arbitrarios en el servidor, lo que le permitiría modificar los datos o el comportamiento de la aplicación y, en última instancia, tomar el control total del servidor.
Lectura de archivos arbitrarios a través del recorrido de directorios
Considere una aplicación de compras que muestre imágenes de artículos en venta. Las imágenes se cargan a través de algún HTML como el siguiente:

La loadImage
URL toma un filename
parámetro y devuelve el contenido del archivo especificado. Los propios archivos de imagen se almacenan en el disco en la ubicación /var/www/images/
. Para devolver una imagen, la aplicación agrega el nombre de archivo solicitado a este directorio base y utiliza una API de sistema de archivos para leer el contenido del archivo. En el caso anterior, la aplicación lee desde la siguiente ruta de archivo:
/var/www/images/218.png
La aplicación no implementa defensas contra los ataques transversales de directorios, por lo que un atacante puede solicitar la siguiente URL para recuperar un archivo arbitrario del sistema de archivos del servidor:
https://insecure-website.com/loadImage?filename= ../../../etc /passwd
Esto hace que la aplicación lea desde la siguiente ruta de archivo:
/var/www/images/../../../etc /passwd
La secuencia ../
es válida dentro de una ruta de archivo y significa subir un nivel en la estructura del directorio. ../
Las tres secuencias consecutivas aumentan desde /var/www/images/
la raíz del sistema de archivos, por lo que el archivo que realmente se lee es:
/etc /passwd
Edición empresarial de Burp Suite
Más seguro no debería significar menos ágil.
Escanéalo todo. Con el escáner de vulnerabilidad web dinámico habilitado para empresas.
En los sistemas operativos basados en Unix, este es un archivo estándar que contiene detalles de los usuarios que están registrados en el servidor.
En Windows, ambas ../
y ..\
son secuencias transversales de directorio válidas, y un ataque equivalente para recuperar un archivo de sistema operativo estándar sería:
https://insecure-website.com/loadImage?filename=..\..\..\windows\win.ini
Obstáculos comunes para explotar las vulnerabilidades transversales de la ruta del archivo
Muchas aplicaciones que colocan la entrada del usuario en las rutas de los archivos implementan algún tipo de defensa contra los ataques de cruce de rutas, y estos a menudo se pueden eludir.
Si una aplicación elimina o bloquea las secuencias de recorrido de directorios del nombre de archivo proporcionado por el usuario, entonces podría ser posible eludir la defensa utilizando una variedad de técnicas.
Es posible que pueda usar una ruta absoluta desde la raíz del sistema de archivos, como filename=/etc /passwd
, para hacer referencia directamente a un archivo sin usar ninguna secuencia transversal.
Es posible que pueda usar secuencias transversales anidadas, como ....//
o ....\/
, que volverán a ser secuencias transversales simples cuando se elimine la secuencia interna.
En algunos contextos, como en una ruta de URL o el filename
parámetro de una multipart/form-data
solicitud, los servidores web pueden eliminar cualquier secuencia de recorrido de directorio antes de pasar su entrada a la aplicación. A veces, puede omitir este tipo de saneamiento mediante la codificación de URL, o incluso la doble codificación de URL, los ../
caracteres que resultan en %2e%2e%2f
o %252e%252e%252f
respectivamente. Varias codificaciones no estándar, como ..%c0%af
o ..%ef%bc%8f
, también pueden funcionar.
Para los usuarios de Burp Suite Professional , Burp Intruder proporciona una lista de carga útil predefinida ( Fuzzing – recorrido de ruta ), que contiene una variedad de secuencias de recorrido de ruta codificadas que puede probar.
Si una aplicación requiere que el nombre de archivo proporcionado por el usuario comience con la carpeta base esperada, como /var/www/images
, entonces podría ser posible incluir la carpeta base requerida seguida de secuencias transversales adecuadas. Por ejemplo:
filename=/var/www/images/../../../etc /passwd
Si una aplicación requiere que el nombre de archivo proporcionado por el usuario termine con una extensión de archivo esperada, como .png
, entonces podría ser posible usar un byte nulo para terminar efectivamente la ruta del archivo antes de la extensión requerida. Por ejemplo:
filename=../../../etc/passwd%00.png
Solicita una cotización del mejor escaner de vulnerabilidades de sitios web y aplicativos expuestos, con precios por anualidad e intercambio de targets, BURP SUITE ENTERPRISE es el único que lo ofrece, cambia YA!
Cómo prevenir un ataque transversal de directorio
La forma más efectiva de prevenir las vulnerabilidades de cruce de rutas de archivos es evitar pasar la entrada proporcionada por el usuario a las API del sistema de archivos. Muchas funciones de aplicación que hacen esto se pueden reescribir para ofrecer el mismo comportamiento de una manera más segura.
Si se considera inevitable pasar la entrada proporcionada por el usuario a las API del sistema de archivos, se deben usar dos capas de defensa juntas para evitar ataques:
- La aplicación debe validar la entrada del usuario antes de procesarla. Idealmente, la validación debería compararse con una lista blanca de valores permitidos. Si eso no es posible para la funcionalidad requerida, entonces la validación debe verificar que la entrada contenga solo contenido permitido, como caracteres puramente alfanuméricos.
- Después de validar la entrada proporcionada, la aplicación debe agregar la entrada al directorio base y usar una API de sistema de archivos de plataforma para canonicalizar la ruta. Debe verificar que la ruta canónica comience con el directorio base esperado.
A continuación se muestra un ejemplo de un código Java simple para validar la ruta canónica de un archivo en función de la entrada del usuario:
File file = new File(BASE_DIRECTORY, userInput);
if (file.getCanonicalPath().startsWith(BASE_DIRECTORY)) {
// process file
}
Encuentre vulnerabilidades transversales de directorio utilizando el escáner de vulnerabilidades web de Burp Suite
Si te ha gustado, ¡compártelo con tus amigos!