stringtranslate.com

Ataque de cruce de directorios

Un ataque de recorrido de directorio (o de recorrido de ruta ) aprovecha la insuficiente validación de seguridad o limpieza de los nombres de archivo proporcionados por el usuario, de modo que los caracteres que representan "recorrer al directorio principal" se 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 .

Ejemplos

En PHP

Un ejemplo típico de una aplicación vulnerable en código PHP es:

<?php $plantilla  =  'red.php' ; if  ( isset ( $_COOKIE [ 'TEMPLATE' ]))  {  $plantilla  =  $_COOKIE [ 'TEMPLATE' ]; } include  "/home/usuarios/phpguru/plantillas/"  .  $plantilla ;

Un ataque contra este sistema podría ser enviar la siguiente solicitud HTTP:

GET  /vulnerable.php  HTTP / 1.0 Cookie :  PLANTILLA=../../../../../../../../../etc/passwd

El servidor generaría entonces una respuesta como la siguiente:

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:/inicio/usuarios/phpguru/:/bin/csh

../Los caracteres repetidos después /home/users/phpguru/templates/han provocado include()que se recorra el directorio raíz y luego se incluya el archivo de contraseñas de Unix /etc/passwd.

En Unix, se suele utilizar un archivo para demostrar el recorrido de directorios, ya que los piratas informáticos/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 cifradas, sino que se encuentran en el archivo, que no puede ser leído por usuarios sin privilegios en la máquina. Sin embargo, incluso en ese caso, la lectura sigue mostrando una lista de cuentas de usuario./etc/passwd/etc/shadow/etc/passwd

Vulnerabilidad de Zip Slip

Otro ejemplo es la vulnerabilidad Zip Slip que afecta a varios formatos de archivos 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 ..\o ../. [2]

Cada partición tiene un directorio raíz independiente (etiquetado como C:\C, que podría ser cualquier partición) y no hay un directorio raíz común por encima de este. Esto significa que, en el caso de 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]

Codificación porcentual en las 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 por error antes de la decodificación porcentual , lo que hace que las URI que contienen patrones como , %2e%2e/sean aceptadas a pesar de que se las decodifique ../antes de su uso real. [5]

Doble codificación

La decodificación de porcentajes 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 con doble porcentaje para eludir las contramedidas de seguridad. [7] Por ejemplo, en un ataque de codificación de doble porcentaje, ../puede reemplazarse por su forma codificada con 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 utilizando más bytes de los necesarios, lo que lleva a representaciones de caracteres alternativas, como %2ey %c0%aeque representan .. Esto está específicamente prohibido por el estándar UTF-8, [10] pero aún así ha llevado a vulnerabilidades de recorrido de directorios en software como el servidor web IIS . [11]

Archivo

Algunos formatos de archivo, como el zip, permiten ataques de recorrido de directorio: los archivos del archivo se pueden escribir de forma que sobrescriban los archivos del sistema de archivos mediante un retroceso. Se puede escribir código que extraiga archivos del archivo para comprobar que las rutas de los archivos del archivo no se vean afectadas por un recorrido de ruta.

Prevención

Un posible algoritmo para evitar el recorrido de directorios sería:

  1. Procese las solicitudes de URI que no resulten en una solicitud de archivo, por ejemplo, ejecutando un gancho en el código de usuario, antes de continuar a continuación.
  2. Cuando se debe realizar una solicitud de URI para un archivo/directorio, construya una ruta completa al archivo/directorio si existe y normalice todos los caracteres (por ejemplo, %20conviértalos en espacios).
  3. Se supone que se conoce una ruta normalizada y completamente calificada de 'Document Root' y que esta cadena tiene una longitud N. Suponga que no se pueden servir archivos fuera de este directorio.
  4. Asegúrese de que los primeros N caracteres de la ruta completa al archivo solicitado sean exactamente los mismos que los de la 'Raíz del documento'.
  5. Si es así, permita que se devuelva el archivo.
  6. En caso contrario, devuelve un error, ya que la solicitud está claramente fuera de los límites que el servidor web debería tener permitido servir.

El uso de una extensión de archivo predefinida y codificada como sufijo de la ruta no limita necesariamente el alcance del ataque a los archivos de esa extensión.

<?php include ( $_GET [ 'archivo' ]  .  '.html' );

El usuario puede utilizar el carácter NULL (que indica el final de la cadena) para omitir todo lo que esté después del $_GET. (Esto es específico de PHP).

Véase también

Referencias

  1. ^ "Vulnerabilidad Zip Slip". Snyk . La vulnerabilidad se explota utilizando un archivo especialmente diseñado que contiene nombres de archivos que atraviesan 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.
  2. ^ "Nombrar archivos, rutas y espacios de nombres". Microsoft. Las funciones de E/S de archivos en la API de Windows convierten '/' en '\' como parte de la conversión del nombre a un nombre de estilo NT
  3. ^ Burnett, Mark (20 de diciembre de 2004). "Agujeros de seguridad que son profundos". SecurityFocus . Archivado desde el original el 2 de febrero de 2021. Consultado el 22 de marzo de 2016 .
  4. ^ "Microsoft: vulnerabilidades de seguridad (recorrido de directorios)". Detalles de CVE.
  5. ^ "Recorrido de ruta". OWASP .
  6. ^ "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.
  7. ^ "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 se pueden utilizar en ataques transversales o de inyección. [...] Pruebe a realizar una doble codificación en partes de la entrada para intentar pasar los filtros.
  8. ^ "Codificación doble". 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 se vuelve a codificar el símbolo %, su representación en código hexadecimal es %25. El resultado del proceso de codificación doble ../ (punto-punto-barra) sería %252E%252E%252F
  9. ^ "CVE-2001-0333". Vulnerabilidades y exposiciones comunes .
  10. ^ Yergeau, F. (2003). "RFC 2279 - UTF-8, un formato de transformación de ISO 10646". IETF . doi : 10.17487/RFC3629 .
  11. ^ "CVE-2002-1744". Vulnerabilidades y exposiciones comunes .

Recursos

Enlaces externos