¿Que es, el ataque Directory Traversal?

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:

				
					<img data-lazyloaded="1" src="data:image/gif;base64,R0lGODdhAQABAPAAAMPDwwAAACwAAAAAAQABAAACAkQBADs=" decoding="async" data-src="/loadImage?filename=218.png">
				
			

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.

Conocer..

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 ../ ..\ 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 ....// ....\/, 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 %252e%252e%252f respectivamente. Varias codificaciones no estándar, como ..%c0%af ..%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!

Cotizar..

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!

Scroll al inicio

Portal de Clientes