Un ataque de recorrido de directorio (o recorrido de ruta ) explota una validación de seguridad insuficiente o una desinfección de los nombres de archivo proporcionados por el usuario, de modo que los caracteres que representan "recorrido al directorio principal" se pasan a la API del sistema de archivos del sistema operativo . Una aplicación afectada puede explotarse para obtener acceso no autorizado al sistema de archivos .
El recorrido de directorio también se conoce como ../
ataque (dot dot slash), escalada de directorio y retroceso. Algunas formas de este ataque también son ataques de canonización .
Ejemplo
Un ejemplo típico de una aplicación vulnerable en código PHP es:
php $ template = 'red.php' ; if ( isset ( $ _COOKIE [ 'PLANTILLA' ])) { $ plantilla = $ _COOKIE [ 'PLANTILLA' ]; } incluyen "/ home / users / phpguru / templates /" . $ plantilla ;
Un ataque contra este sistema podría ser enviar la siguiente solicitud HTTP:
OBTENER /vulnerable.php HTTP / 1.0 Cookie : PLANTILLA = .. / .. / .. / .. / .. / .. / .. / .. / .. / etc / passwd
El servidor generaría una respuesta como:
HTTP / 1.0 200 OK Tipo de contenido : texto / html Servidor : Apacheroot: fi3sED95ibqR6: 0: 1: Operador del sistema: /: / bin / ksh demonio: *: 1: 1 :: / tmp: phpguru: f8fk3j1OIf31.: 182: 100: Desarrollador: / home / users / phpguru /: / bin / csh
Los ../
caracteres repetidos después /home/users/phpguru/templates/
han hecho include()
que atraviesen el directorio raíz y luego incluyan el archivo de contraseña de Unix /etc/passwd
.
Unix /etc/passwd
es un archivo común que se usa para demostrar el cruce de directorios, ya que los crackers lo usan a menudo para intentar descifrar las contraseñas. Sin embargo, en los sistemas Unix más recientes, el /etc/passwd
archivo no contiene las contraseñas hash, sino que se encuentran en el /etc/shadow
archivo, que no pueden ser leídas por usuarios sin privilegios en la máquina. Sin embargo, incluso en ese caso, la lectura /etc/passwd
sigue mostrando una lista de cuentas de usuario.
Variaciones
El recorrido de directorio en su forma más simple usa el ../
patrón. Algunas variaciones comunes se enumeran a continuación:
Microsoft Windows
El recorrido de directorio de Microsoft Windows y DOS utiliza los patrones ..\
o ../
. [1]
Cada partición tiene un directorio raíz separado (etiquetado C:\
donde C podría ser cualquier partición), y no hay un directorio raíz común por encima de eso. Esto significa que para la mayoría de las vulnerabilidades de directorio en Windows, los ataques se limitan a una sola partición.
El cruce de directorios ha sido la causa de numerosas vulnerabilidades de Microsoft. [2] [3]
Porcentaje de codificación en URI
Algunas aplicaciones web intentan evitar el cruce de directorios escaneando la ruta de un URI de solicitud en busca de patrones como ../
. Esta verificación a veces se realiza por error antes de la decodificación porcentual , lo que hace que los URI que contienen patrones similares %2e%2e/
sean aceptados a pesar de haber sido decodificados ../
antes del uso real. [4]
Codificación doble
La decodificación porcentual puede realizarse accidentalmente varias veces; una vez antes de la validación, pero nuevamente después, lo que hace que la aplicación sea vulnerable a la entrada codificada porcentualmente de forma recursiva, como %252e%252e/
(una sola pasada de decodificación de porcentaje se convierte %25
en un signo de% literal). Este tipo de vulnerabilidad afectó notablemente las versiones 5.0 y anteriores de Microsoft 's IIS software de servidor web. [5]
UTF-8
Un decodificador UTF-8 mal implementado puede aceptar caracteres codificados usando más bytes de los necesarios, lo que lleva a representaciones de caracteres alternativas, como %2e
y %c0%ae
ambos representan .
. Esto está específicamente prohibido por el estándar UTF-8, [6] pero aún ha dado lugar a vulnerabilidades de cruce de directorios en software como el servidor web IIS . [7]
Archivo
Algunos formatos de archivo como zip permiten ataques transversales de directorio: los archivos en el archivo se pueden escribir de manera que sobrescriban los archivos del sistema de archivos retrocediendo. Se puede escribir código que extrae archivos de almacenamiento para verificar que las rutas de los archivos en el archivo no se involucren en el recorrido de la ruta.
Prevención
Un posible algoritmo para evitar el cruce de directorios sería:
- Procese las solicitudes de URI que no generen una solicitud de archivo, por ejemplo, ejecutando un enlace en el código de usuario, antes de continuar a continuación.
- Cuando se va a realizar una solicitud de URI para un archivo / directorio, cree una ruta completa al archivo / directorio, si existe, y normalice todos los caracteres (por ejemplo,
%20
convertidos a espacios). - Se supone que un 'Documento Root' totalmente calificado, normalizada, la ruta es conocida, y esta cadena tiene una longitud N . Suponga que no se pueden servir archivos fuera de este directorio.
- Asegúrese de que los primeros N caracteres de la ruta completa al archivo solicitado sean exactamente iguales a la 'Raíz del documento'.
- Si es así, permita que se devuelva el archivo.
- De lo contrario, devuelva un error, ya que la solicitud está claramente fuera de los límites de lo que el servidor web debería poder servir.
El uso de una extensión de archivo predefinida codificada para agregar un sufijo a la ruta no necesariamente limita el alcance del ataque a los archivos de esa extensión de archivo.
php include ( $ _GET [ 'archivo' ] . '.html' );
El usuario puede usar el carácter NULL (que indica el final de la cadena) para omitir todo después de $_GET
. (Esto es específico de PHP).
Ver también
- Las cárceles chroot pueden estar sujetas a un cruce de directorios si se crean incorrectamente. Los posibles vectores de ataque transversal de directorio son descriptores de archivos abiertos a directorios fuera de la cárcel. El directorio de trabajo es otro posible vector de ataque.
- Referencia de objeto directo inseguro
Referencias
- ^ "Nombrar archivos, rutas y espacios de nombres" . Microsoft.
Las funciones de E / S de archivos en la API de Windows convierten '/' a '\' como parte de la conversión del nombre a un nombre de estilo NT
- ^ Burnett, Mark (20 de diciembre de 2004). "Agujeros de seguridad que son profundos" . SecurityFocus .
- ^ "Microsoft: vulnerabilidades de seguridad (directorio transversal)" . Detalles CVE.
- ^ "Recorrido de ruta" . OWASP .
- ^ "CVE-2001-0333" . Vulnerabilidades y exposiciones comunes .
- ^ "RFC 2279 - UTF-8, un formato de transformación de ISO 10646" . IETF .
- ^ "CVE-2002-1744" . Vulnerabilidades y exposiciones comunes .
Recursos
- Proyecto de seguridad de aplicaciones web abiertas
- Clasificación de amenazas de WASC: recorrido de ruta
- Explotación y corrección de vulnerabilidades de Path Traversal
- Enumeración de debilidades comunes de CWE: recorrido de ruta
enlaces externos
- DotDotPwn - El difusor transversal de directorios - [1]
- Convicción por utilizar el cruce de directorios. [2] [3]
- Bugtraq: ejecución remota de comandos IIS% c1% 1c
- Boletín de Cryptogram, julio de 2001 [4] .