stringtranslate.com

Ataque transversal de directorio

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 .

Ejemplos

En PHP

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

Vulnerabilidad de deslizamiento de cremallera

Otro ejemplo es la vulnerabilidad Zip Slip que afecta a varios formatos de archivos como ZIP . [1]

Variaciones

El recorrido de directorio en su forma más simple utiliza el ../patrón. Algunas variaciones comunes se enumeran a continuación:

Microsoft Windows

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]

Codificación porcentual en URI

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]

Doble codificación

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]

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%aeambos 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]

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 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.

Prevención

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

  1. Procese las solicitudes de URI que no resulten en una solicitud de archivo, por ejemplo, ejecutando un enlace 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, cree una ruta completa al archivo/directorio si existe y normalice todos los caracteres (por ejemplo, %20conviértalos a espacios).
  3. Se supone que se conoce una ruta de acceso 'Document Root' totalmente calificada y normalizada, y que esta cadena tiene una longitud N . Supongamos 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 la 'Raíz del documento'.
  5. Si es así, permita que se devuelva el archivo.
  6. De lo contrario, devolverá un error, ya que la solicitud está claramente fuera de los límites de lo que el servidor web debería poder atender.

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).

Ver también

Referencias

  1. ^ "Vulnerabilidad de deslizamiento de cremallera". Snyk . 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.
  2. ^ "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
  3. ^ Burnett, Mark (20 de diciembre de 2004). "Agujeros de seguridad profundos". Enfoque de seguridad . 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 camino". 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 podrían usarse en ataques transversales o de inyección. [...] Intente codificar dos veces partes de la entrada para intentar superar los filtros.
  8. ^ "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 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
  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 . {{cite journal}}: Citar diario requiere |journal=( ayuda )
  11. ^ "CVE-2002-1744". Vulnerabilidades y exposiciones comunes .

Recursos

enlaces externos