domingo, 19 de febrero de 2012

CVE-2012-0053: Capturando cookies httpOnly

¡Saludos!

Por el tema de los exámenes y demases he dejado estas semanas el blog un poco apalancado, pero ya estoy un poco más online y puedo publicar cosas. Hoy voy a explicar brevemente en qué consiste el CVE-2012-0053, ya que he visto en un par de foros preguntar acerca de él.


Esta vulnerabilidad, descubierta por Hippert (fuente original aquí) permite poder robar aquellas cookies que tienen el flag httpOnly. ¿Qué es "httpOnly"? Es una medida de seguridad extra que impide a los lenguajes que corren desde el lado del cliente poder trabajar con una cookie, es decir, evita poder leer / escribir sobre esa cookie. Esto tiene implicaciones claras a la hora de preservar la integridad de esa cookie, bloqueando de esta forma la captura por el método clásico de un XSS.


Ahora bien, ¿si no podemos hacer que un script acceda a la cookie, como podremos robarla?. Hete aquí la idea: hecha la ley, hecha la trampa. Si no podemos acceder a la cookie, tendremos que hacer que el contenido de la cookie sea devuelto en alguna parte donde sí podamos acceder a ella. Esta triquiñuela ya la hizo Jeremiah Grossman en su paper sobre XST (XSS + método TRACE, un must read para todos los que siempre envían algún mensaje tipo "kiero juankear la web d mi vcino y le e pasao n escaner y me dic k tiene habilitado TRACE ke es eso"). En este caso la idea es que el contenido de la cookie sea devuelto dentro del cuerpo del documento, donde podremos acceder fácilmente con un script.


Para lograr este fin Hipper recurre a provocar un error 400 (Bad Request) en el servidor, ya que en el mensaje de error se muestran los parámetros enviados, y entre ellos encontraremos la cookie. Para poder generar dicho error simplemente podemos enviar una cabecera HTTP con una cookie de un tamaño que sobrepase el límite:



Y el servidor vulnerable (recordemos que se trata de las versiones de apache 2.2.0 - 2.2.21 ) nos soltará un error 400, porque hemos excedido el límite de tamaño, donde encontraremos nuestra ansiada cookie :)



(En verde está la cookie de sesión original con el flag httpOnly, y en rojo los caracteres para provocar el error.)



Para poder robar una cookie en un servidor vulnerable a XSS y a esta técnica, lo que tendremos que hacer es utilizar XMLHttpRequest para adherir la cookie gigante a la cookie original, y de esta forma provocar el error. El resto sería símplemente leer lo que deseamos del documento HTML. El descubridor hizo un pequeño PoC que podeis ver aquí.
5 0verl0ad Labs: febrero 2012 ¡Saludos! Por el tema de los exámenes y demases he dejado estas semanas el blog un poco apalancad...
< >