lunes, febrero 06, 2012

Robar Cookies HTTPOnly con XSS en webs con Apache

Se ha publicado una vulnerabilidad en servidores Apache descubierta por Norman Hippert que permite robar cookies marcadas con el flag de HTTPOnly por medio de un ataque XSS. El bug ha recibido el CVE-2012-0053 y afecta a las versiones de Apache de la 2.2.0 a la 2.2.21, con lo que el volumen de sitios afectados en Internet es muy grande.

El flag HTTPOnly le indica al navegador que una Cookie no puede ser consultada nunca por medio de Javascript y que sólo debe usarte cuando se vaya a utilizar en una petición HTTP. Así, las técnicas para robar cookies HTTPOnly se ha basado en conseguir que el servidor rebote una respuesta con el valor de la Cookie como si fuera una cadena de texto, como vimos en el ejemplo del método Trace para robar cookies HTTPOnly.

En esta ocasión el bug está en la manera en que Apache construye la respuesta al error 400 Bad Request cuando uno de los parámetros supera el límite de tamaño. En esa respuesta se copian todos los parámetros enviados.

Figura 1: Probando la generación de un error 400 con una Cookie Maliciosa

Así, un atacante que pueda hacer un XSS sobre una aplicación que funciona sobre Apache sólo necesita construir una Cookie maliciosa lo suficientemente grande - yo lo he hecho con 7.000 caracteres - y forzar una petición HTTP al servidor Apache. Cuando se haga la petición HTTP, el navegador sumará a ella la Cookie marcada como HTTPOnly. Al llegar la petición al servidor, la Cookie maliciosa de gran tamaño genera el error 400 y en la respuesta que da el servidor vienen, como texto, todos los parámetros de la petición, incluyendo, claro está, el valor de la Cookie marcada como HTTPOnly.

Figura 2: POC publicada por Norman Hippert

Mientras actualizas los servidores, puedes mirar en el artículo que escribí hace ya algún tiempo de Fortificación de Apache cómo cambiar los documentos asociados a los códigos de error, para modificar el comportamiento por defecto ante un error 400.


Saludos Malignos!

2 comentarios: