Un ataque de recorrido de directorio (o recorrido de ruta ) aprovecha una validación o desinfección de seguridad insuficiente de los nombres de archivos proporcionados por el usuario, de modo que los caracteres que representan "atravesar el directorio principal" pasan 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 .
Un ejemplo típico de una aplicación vulnerable en código PHP es:
<?php $plantilla = 'rojo.php' ; if ( isset ( $_COOKIE [ 'PLANTILLA' ])) { $plantilla = $_COOKIE [ 'PLANTILLA' ]; } incluye "/home/users/phpguru/templates/" . $plantilla ;
Un ataque contra este sistema podría consistir en enviar la siguiente solicitud HTTP:
OBTENER /vulnerable.php HTTP / 1.0 Cookie : PLANTILLA=../../../../../../../../../etc/passwd
Luego, el servidor generaría una respuesta como:
HTTP / 1.0 200 OK Tipo de contenido : texto/html Servidor : Apacheraíz:fi3sED95ibqR6:0:1:Operador del sistema:/:/bin/kshdemonio:*: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 luego se incluya el archivo de contraseña de Unix /etc/passwd
.
Unix es un archivo común que se utiliza para demostrar el recorrido de directorios, ya que los crackers/etc/passwd
suelen utilizarlo para intentar descifrar las contraseñas. Sin embargo, en los sistemas Unix más recientes, el archivo no contiene las contraseñas hash, sino que se encuentran en el archivo, que los usuarios sin privilegios de la máquina no pueden leer. Incluso en ese caso, la lectura todavía muestra una lista de cuentas de usuario./etc/passwd
/etc/shadow
/etc/passwd
Otro ejemplo es la vulnerabilidad Zip Slip que afecta a varios formatos de archivos como ZIP . [1]
El recorrido de directorio en su forma más simple utiliza el ../
patrón. Algunas variaciones comunes se enumeran a continuación:
El recorrido de directorios de Microsoft Windows y DOS utiliza los patrones ..\
o ../
. [2]
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 encima de ese. Esto significa que para la mayoría de las vulnerabilidades de directorio en Windows, los ataques se limitan a una única partición.
El cruce de directorios ha sido la causa de numerosas vulnerabilidades de Microsoft. [3] [4]
Algunas aplicaciones web intentan evitar el cruce de directorios escaneando la ruta de un URI de solicitud en busca de patrones como ../
. A veces, esta verificación se realiza por error antes de la decodificación porcentual , lo que hace que los URI que contienen patrones similares %2e%2e/
se acepten a pesar de haber sido decodificados ../
antes de su uso real. [5]
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 ataques de codificación de doble porcentaje [6] en los que los caracteres ilegales se reemplazan por su forma codificada de doble porcentaje para evitar las contramedidas de seguridad. [7] Por ejemplo, en un ataque de codificación de doble porcentaje, ../
puede reemplazarse por su forma codificada de 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]
Un decodificador UTF-8 mal implementado puede aceptar caracteres codificados utilizando más bytes de los necesarios, lo que lleva a representaciones de caracteres alternativas, como %2e
y %c0%ae
ambos que representan .
. Esto está específicamente prohibido por el estándar UTF-8, [10] pero aún así ha dado lugar a vulnerabilidades de cruce de directorios en software como el servidor web IIS . [11]
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 en el sistema de archivos al retroceder. El código que extrae archivos comprimidos se puede escribir para comprobar que las rutas de los archivos en el archivo comprimido no intervienen en el recorrido de ruta.
Un posible algoritmo para evitar el cruce de directorios sería:
%20
conviértalos a espacios).El uso de una extensión de archivo predefinida codificada como sufijo en la ruta no necesariamente limita el alcance del ataque a archivos con esa extensión de archivo.
<?php incluir ( $_GET [ 'archivo' ] . '.html' );
El usuario puede utilizar el carácter NULL (que indica el final de la cadena) para omitir todo lo que sigue al $_GET
. (Esto es específico de PHP).
La vulnerabilidad se explota utilizando un archivo especialmente diseñado que contiene nombres de archivos transversales de directorio (por ejemplo, ../../evil.sh). La vulnerabilidad Zip Slip puede afectar numerosos formatos de archivo, incluidos tar, jar, war, cpio, apk, rar y 7z.
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
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.
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 transversales o de inyección. [...] Intente codificar dos veces partes de la entrada para intentar superar los filtros.
Por ejemplo, los caracteres ../ (punto-punto-barra) representan %2E%2E%2F en representación hexadecimal. Cuando se vuelve a codificar el símbolo %, 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
{{cite journal}}
: Citar diario requiere |journal=
( ayuda )