Un ataque de recorrido de directorios , recorrido de rutas o ataque de punto y punto con barra diagonal explota la validación de seguridad o la sanitización insuficientes de los nombres de archivo proporcionados por el usuario, de modo que los caracteres que representan "recorrer al directorio padre" se transmiten a la API del sistema de archivos del sistema operativo . Una aplicación afectada puede ser explotada para obtener acceso no autorizado al sistema de archivos .
Ejemplos
En PHP
Un ejemplo típico de una aplicación vulnerable en código PHP es:
<?php $template = "red.php" ; if ( isset ( $_COOKIE [ "TEMPLATE" ])) { $template = $_COOKIE [ "TEMPLATE" ]; } include "/home/users/phpguru/templates/" . $template ;Un ataque contra este sistema podría consistir en enviar la siguiente solicitud HTTP:
GET /vulnerable.php HTTP / 1.0 Cookie : TEMPLATE=../../../../../../../../../etc/passwdEl servidor generaría entonces una respuesta como la siguiente:
HTTP / 1.0 200 OK Content-Type : text/html Server : Apache raíz: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 provocado include()que se acceda al directorio raíz y, a continuación, se incluya el archivo de contraseñas de Unix /etc/passwd.
Unix es un archivo común que se usa para demostrar el recorrido de directorios, ya que los ciberdelincuentes/etc/passwd suelen usarlo para intentar descifrar contraseñas. Sin embargo, en los sistemas Unix más recientes, este archivo no contiene las contraseñas cifradas, sino que se encuentran en otro archivo que los usuarios sin privilegios no pueden leer. Aun así, leerlo muestra una lista de cuentas de usuario, lo que podría servir como punto de partida para ataques posteriores./etc/passwd/etc/shadow/etc/passwd
Vulnerabilidad al deslizamiento de cremallera
Otro ejemplo es la vulnerabilidad "Zip Slip" que afecta a varios formatos de archivo comprimido como ZIP . [ 1 ]
Variaciones
El recorrido de directorios en su forma más simple utiliza el ../patrón. A continuación se enumeran algunas variaciones comunes:
Microsoft Windows
El recorrido de directorios de Microsoft Windows y DOS utiliza los patrones ..\or . [ 2 ]../
Cada partición tiene un directorio raíz independiente (etiquetado C:\como C, que puede ser cualquier partición), y no existe un directorio raíz común superior. Esto significa que, para la mayoría de las vulnerabilidades de directorio en Windows, los ataques se limitan a una sola partición.
El recorrido de directorios ha sido la causa de numerosas vulnerabilidades de Microsoft. [ 3 ] [ 4 ]
Porcentaje de codificación en URI
Algunas aplicaciones web intentan evitar el recorrido de directorios escaneando la ruta de una URI de solicitud en busca de patrones como ../. Esta comprobación a veces se realiza erróneamente antes de la decodificación porcentual%2e%2e/ , lo que provoca que se acepten URI que contienen patrones como a pesar de haber sido decodificadas en ../antes de su uso real. [ 5 ]
Doble codificación
La decodificación porcentual puede realizarse accidentalmente varias veces; una vez antes de la validación, pero otra vez después, lo que hace que la aplicación sea vulnerable a ataques de doble codificación porcentual [ 6 ] en los que los caracteres ilegales se reemplazan por su forma codificada en doble porcentaje para eludir las contramedidas de seguridad. [ 7 ] Por ejemplo, en un ataque de doble codificación porcentual, ../puede ser reemplazado por su forma codificada en doble porcentaje %252E%252E%252F. [ 8 ] Este tipo de vulnerabilidad afectó notablemente a las versiones 5.0 y anteriores del software de servidor web IIS de Microsoft . [ 9 ]
UTF-8
Un decodificador UTF-8 mal implementado puede aceptar caracteres codificados usando más bytes de los necesarios, lo que lleva a codificaciones demasiado largas , como %c0%aeen lugar de %2epara representar .. Esto está específicamente prohibido por el estándar UTF-8, [ 10 ] pero aun así ha dado lugar a vulnerabilidades de recorrido de directorios en software como el servidor web IIS . [ 11 ]
Archivo
Algunos formatos de archivo comprimido, como zip, permiten ataques de recorrido de directorios: los archivos dentro del archivo comprimido pueden escribirse de forma que sobrescriban archivos en el sistema de archivos mediante retroceso. El código que extrae los archivos comprimidos puede escribirse para verificar que las rutas de los archivos dentro del archivo no incurran en ataques de recorrido de directorios.
Prevención
Un posible algoritmo para evitar el recorrido de directorios sería el siguiente:
- Antes de continuar, procese las solicitudes URI que no resulten en una solicitud de archivo, por ejemplo, la ejecución de un gancho en el código del usuario.
- Cuando se realiza una solicitud URI para un archivo o directorio, se construye una ruta completa al archivo o directorio si existe, y se normalizan todos los caracteres (por ejemplo,
%20convirtiéndolos en espacios). - Se supone que se conoce una ruta de acceso completa y normalizada para el directorio raíz del documento, y que esta cadena tiene una longitud N. Se supone 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'.
- En ese caso, 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 estar autorizado a servir.
El uso de una extensión de archivo predefinida y codificada para añadirla al final de la ruta no limita necesariamente el alcance del ataque a los archivos con esa extensión.
<?php include $_GET [ "file" ] . ".html" ;El usuario puede usar el carácter NULL (que indica el final de la cadena) para omitir todo lo que sigue al punto $_GET. (Esto es específico de PHP).
Véase también
- Los entornos chroot pueden ser vulnerables a ataques de recorrido de directorios si se crean incorrectamente. Entre los posibles vectores de ataque se encuentran los descriptores de archivos abiertos a directorios fuera del entorno chroot. El directorio de trabajo es otro posible vector de ataque.
- Referencia directa a objeto insegura
Referencias
- ↑ "Vulnerabilidad Zip Slip" . Snyk .
Esta vulnerabilidad se explota mediante un archivo comprimido especialmente diseñado que contiene nombres de archivo que permiten recorrer directorios (por ejemplo, ../../evil.sh). La vulnerabilidad Zip Slip puede afectar a numerosos formatos de archivo, incluidos tar, jar, war, cpio, apk, rar y 7z.
- ↑ "Nombres de 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 profundos" . SecurityFocus . Archivado del original el 2 de febrero de 2021. Recuperado el 22 de marzo de 2016 .
- ↑ "Microsoft: Vulnerabilidades de seguridad (recorrido de directorios)" . Detalles de CVE.
- ↑ "Recorrido de ruta" . OWASP .
- ↑ "CWE-174: Doble decodificación de los mismos datos" . cwe.mitre.org . Consultado el 24 de julio de 2022.
El software decodifica la misma entrada dos veces, lo que puede limitar la eficacia de cualquier mecanismo de protección que se produzca entre las operaciones de decodificación.
- ↑ "CAPEC-120: Doble codificación" . capec.mitre.org . Consultado el 23 de julio de 2022.
Esta [doble codificación] puede permitir al adversario eludir los filtros que intentan detectar caracteres o cadenas ilegales, como los que podrían usarse en ataques de recorrido o inyección. [...] Intente aplicar doble codificación a partes de la entrada para intentar sortear los filtros.
- ↑ "Doble codificación" . owasp.org . Consultado el 23 de julio de 2022.
Por ejemplo, los caracteres ../ (punto-punto-barra) representan %2E%2E%2F en representación hexadecimal. Cuando el
símbolo % se codifica de nuevo, su representación en código hexadecimal es %25. El resultado del proceso de doble codificación ../ (punto-punto-barra) sería %252E%252E%252F.
- ↑ "CVE-2001-0333" . Vulnerabilidades y exposiciones comunes .
- ↑ Yergeau, F. (2003). "RFC 2279 - UTF-8, un formato de transformación de ISO 10646" . IETF . doi : 10.17487/RFC3629 .
- ↑ "CVE-2002-1744" . Vulnerabilidades y exposiciones comunes .
Recursos
- Proyecto de seguridad de aplicaciones web abiertas
- Clasificación de amenazas WASC: Recorrido de rutas
- Explotación y mitigación de vulnerabilidades de recorrido de ruta
- Enumeración de debilidades comunes (CWE) - Recorrido de caminos
Enlaces externos
- DotDotPwn: el fuzzer transversal de directorio
- Condena por utilizar recorrido de directorios.
- "Solo los malos se benefician de las malas leyes" . comment.zdnet.co.uk . 7 de octubre de 2005. Archivado del original el 8 de octubre de 2006.
- Bugtraq: Ejecución remota del comando %c1%1c de IIS
- Boletín informativo Cryptogram, julio de 2001.
- vulnerabilidades de seguridad web