Directory traversalUn directory traversal (o salto de directorio o cruce de directorio o path traversal) consiste en explotar una vulnerabilidad informática que ocurre cuando no existe suficiente seguridad en cuanto a la validación de un usuario, permitiéndole acceder a cualquier tipo de directorio superior (padre) sin ningún control. La finalidad de este ataque es ordenar a la aplicación a acceder a un archivo al que no debería poder acceder o no debería ser accesible. Este ataque se basa en la falta de seguridad en el código. El software está actuando exactamente como debe actuar y en este caso el atacante no está aprovechando un bug en el código. Directory traversal también es conocido como el ../ ataque punto punto barra, escalado de directorios y backtracking. EjemploUn ejemplo típico de una aplicación vulnerable es: <?php
$template = 'blue.php';
if ( isset( $_COOKIE['TEMPLATE'] ) )
$template = $_COOKIE['TEMPLATE'];
include ( "/home/users/phpguru/templates/" . $template );
?>
Un ataque contra este sistema podría ser mandar la siguiente petición de HTTP: GET /vulnerable.php HTTP/1.0 Cookie: TEMPLATE=../../../../../../../../../etc/shadow Generando el servidor una respuesta como: HTTP/1.0 200 OK Content-Type: text/html Server: Apache root:fi3sED95ibqR6:0:1:System Operator:/:/bin/ksh daemon:*:1:1::/tmp: phpguru:f8fk3j1OIf31.:182:100:Developer:/home/users/phpguru/:/bin/csh La repetición de los caracteres ../ después de /home/users/phpguru/templates/ ha causado que el código El archivo de contraseñas de UNIX es un archivo que se utiliza comúnmente para realizar el directory traversal, y es utilizado frecuentemente para crackear las contraseñas. Variaciones de directory traversalDirectory traversal es más complicado de prevenir de lo que puede parecer. Una estrategia de filtrar los caracteres que puedan suponer una amenaza es probable que falle. Hay muchos más factores implicados que pueden determinar el funcionamiento de un ataque directory traversal. Sin embargo, si la aplicación no valida la legitimidad de los parámetros, es bastante probable que los atacantes tengan muchas probabilidades de explotar esta funcionalidad para propósitos maliciosos. A continuación se listan algunas de las cadenas de ataques directory traversal conocidas: Directory traversal en UNIXEn los sistemas Unix o similares se utiliza los caracteres ../, para realizar el directory traversal. Directory traversal en Microsoft WindowsEn Microsoft Windows o DOS el directory traversal se realiza mediante ..\. Actualmente, muchos programas para Windows o APIs aceptan además los caracteres utilizados para directory traversal en sistemas Unix o similares. Cada partición tiene un directorio raíz (nombrado C:\ para una partición particular C) y no existen un directorio común raíz por encima de este. Esto quiere decir que las vulnerabilidades de directorio en Windows están limitadas a una única partición. URI codificado directory traversalAlgunas aplicaciones realizan escaneos sobre las cadenas introducidas bucando caracteres peligrosos como:
para prevenir el directory traversal. Sin embargo, la cadena es usualmente decodificada en URI antes de ser utilizada. Es por ello que estas aplicaciones son vulnerables a percent encoded directory traversal como puede ser:
etc. Unicode / UTF-8 codificado directory traversalUTF-8 ha sido marcada como fuente de vulnerabilidades y ataques vectoriales en Cryptogram Newsletter July 2000 por Bruce Schneier y Jeffrey Streifling. Cuando Microsoft añadió soporte unicode a su servidor Web, una nueva forma de codificar los caracteres ../ fue introducida en su código, causando vulnerabilidades de codificación en cuanto a directory traversal. La codificación de porcentajes múltiples, como por ejemplo:
se traducen a los caracteres / o \. Esto se debe a que las cadenas cifradas con porcentajes se decodifican en caracteres de 8-bit (por parte de un Microsoft webserver). Este comportamiento ha sido históricamente correcto por parte de Windows y DOS que tradicionalmente han utilizado 8-bit basados en el canon de ASCII. Sin embargo, el UTF-8 original no seguía ningún canon, y muchas cadenas cifradas que podían ser traducidas a una misma cadena. Microsoft desarrolló un sistema anti-traversal para UTF-8, no dándose cuenta de que C0AF y 2F en (HEX) eran los mismos caracteres cuando se realizaban comparaciones de cadenas. Posibles métodos para prevenir Directory TraversalUn posible algoritmo para prevenir el directory traversal podría ser:
Enlaces externos
|