jueves, 26 de febrero de 2015

JetLeak: como revelar las últimas peticiones hechas a servidores Jetty

Según un reciente análisis realizado por el investigador Stephen Komal de Gotham Digital Science, existe una vulnerabilidad en el servidor Jetty que puede permitir extraer información sensible del sistema. Se ven afectadas las versiones 9.2.3 a la 9.2.8 y la rama 9.3.x beta

Jetty es un servidor Web y contenedor de 'servlets' basado en Java. Se distribuye y usa en entornos de desarrollo como Eclipse, o multitud de servidores de aplicaciones como JBoss, Apache Geronimo, Google GWT o App Engine entre otros.

La vulnerabilidad JetLeak (CVE-2015-2080) se debe a una incorrecta implementación de las peticiones realizadas al módulo 'HttpParser' a la hora de gestionar en detalle los eventos de error. Debido a esto, una petición especialmente manipulada conseguiría recabar los últimos 16 bytes del búfer compartido de peticiones, dentro de la respuesta HTTP 400. Lo que llevaría a mostrar por tanto información sensible como Cookies, credenciales, correos y diversa información del sistema.

Si entramos en detalle en la vulnerabilidad, una petición realizada a un servidor ya actualizado y que generara un error al utilizar caracteres incorrectos (no ASCII por ejemplo), debería dar una respuesta HTTP 400 similar a ésta:

HTTP/1.1 400 Illegal character 0x7
Content-Length: 0
Connection: close
Server: Jetty(9.2.9.v20150224)

Mientras que en un servidor vulnerable, ante esa misma petición especialmente manipulada daría como resultado el volcado del buffer en la misma respuesta, de la siguiente manera:

HTTP/1.1 400 Illegal character 0x7 in state=HEADER_IN_NAME in 'GET
/dummy/ HTTP/... localhost\nCoo\x07<<<kie: \x07\n\n>>>e:
application/x-...\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
Content-Length: 0
Connection: close
Server: Jetty(9.2.8.v20150217)

Como podemos comprobar, se concatena información del buffer de 'debug' y cualquier script modificado para realizar múltiples conexiones al servidor podría ir recabando todo tipo de información sobre las últimas peticiones hechas.

Se ha facilitado un script para comprobar los servidores afectados:

O a través del siguiente listado de versiones afectadas:
9.2.3.v20140905
9.2.4.v20141103
9.2.5.v20141112
9.2.6.v20141205
9.2.7.v20150116
9.2.8.v20150217
9.3.0.M0
9.3.0.M1

Se recomienda actualizar lo antes posible a la versión 9.2.9:

Más información:

JetLeak Vulnerability: Remote Leakage Of Shared Buffers In Jetty Web Server [CVE-2015-2080]

Jetleak Testing Script

CVE-2015-2080 : JetLeak Vulnerability Remote Leakage of Shared Buffers in Jetty

HttpParser Error Buffer Bleed Vulnerability

Powered by Jetty




José Mesa Orihuela

miércoles, 25 de febrero de 2015

No Me Han Hackeado. Stop.

Hace unos años, a la popular aplicación de mensajería que todo el mundo usa le salió un rival que aprovechaba los puntos débiles de su adversario: la seguridad y privacidad de las comunicaciones, además de otras funcionalidades no relacionadas con la seguridad. En el momento de su lanzamiento tuvo un espectacular crecimiento de usuarios, llegando al nivel de las más veteranas en poco tiempo. Hablemos de Telegram.

Sus creadores, los hermanos Durov, confiaban tanto en las características de cifrado de su creación, que no dudaron en ofrecer una recompensa de 200.000 dólares en bitcoins para aquel que consiguiera descifrar un texto que contenía una dirección de correo electrónico cifrada con MTProto, el protocolo de cifrado propio de la arquitectura.

El premio quedó desierto y volvieron a desafiar a la comunidad, elevando la cuantía a 300.000 dólares y permitiendo esta vez ciertos tipos de elementos más próximos a un escenario de ataque real. En concreto se podía emplear la captura de tráfico entre cliente y servidor, actuar como un servidor malicioso y usar lo que denominaron "ataques activos". Después veremos cómo esta definición tan abierta de "ataque activo" fue tensada hasta el extremo de toparse con su propio cuello.

Nadie consiguió los objetivos del segundo desafío. El premio quedó desierto de nuevo y en el aire la expectativa del lanzamiento de un tercer guante.

¿Sería posible que alguien consiguiera "romper" el cifrado, días después de expirar el reto, y dejara pasar la oportunidad de ganar 300.000 dólares o mucho más en el siguiente desafío?

Según algunos medios sí y por supuesto no tardaron mucho en hacer correr ríos de bits anunciando la noticia, sin más elementos de juicio que un enlace a un post donde se termina cantando las supuestas virtudes de sus propios productos y servicios.

A nadie le pasa desapercibido que un buen titular a tiempo es pegarle un buen empujón a las visitas. No viste lo mismo anunciar una denegación de servicio debido a una referencia a un puntero nulo que un titular del estilo: "Hackean tu Facebook a través de un ataque a tu WhatsApp debido a un exploit en GMail".

El supuesto "hackeo" a Telegram, no es un ataque basado en una debilidad en el protocolo de cifrado o una implementación defectuosa en el cliente que permita a un servidor controlado por el atacante explotarla. La técnica usada para acceder a los mensajes es general, de libro, se resume en un solo párrafo.

Envías a un objetivo un enlace que explota una vulnerabilidad en el navegador, estableces un canal, elevas privilegios y ya eres root. Listo, ya puedes acceder a cualquier rincón del sistema, memoria, disco, tarjeta, etc. con el añadido extra de que si se trata de un terminal móvil inteligente casi te aseguras una conexión persistente. O más fácil todavía, empaquetas todo eso en una aplicación maliciosa y se la regalas a tu objetivo, listo, ya tienes lo que necesitas.

Es fácil caer en ese fallo de concepto. No se trata de un ataque a una aplicación concreta, se trata de un compromiso total del sistema, una vez eres root se acabó el juego, no hay nada más después.

La intención del desafío de los Durov no era esa. Los mensajes se encuentran en dos estados distintos, en tránsito o en reposo. El supuesto ataque se apoya en el acceso a la información en reposo, esto es en disco o en la RAM, pero el reto estaba en acceder y descifrar u obtener la información en tránsito de dos clientes. El truco para justificar el post es ese "ataques activos". Esa definición tan abierta puede dar pie a interpretar el todo vale y en esa posición no hay ningún solo sistema o aplicación que se sostenga sola, todas caen, al final es una cuestión de tiempo.

Más información:

$200,000 to the hacker who can break Telegram

MTProto Mobile Protocol

$300,000 for Cracking Telegram Encryption

Crypto Contest Ends

David García
Twitter: @dgn1729