Ataque de inyección CCS con MITM en OpenSSL (CVE-2014-0224)

Todavía no nos hemos recuperado del susto del Heartbleed cuando aparece una nueva vulnerabilidad crítica en OpenSSL (CVE-2014-0224). Parece que se está poniendo de moda las vulnerabilidades en las librerías de cifrado. En este caso se trata de combinar un ataque de Man-in-the-Middle (MITM) con una inyección de paquetes CCS para renegociar los atributos de seguridad de la conexión segura.

openssl-logo

Bien es cierto que para que el ataque tenga éxito, tanto el cliente como el servidor han de ser vulnerables. Parece ser que todos los clientes OpenSSL son vulnerables, y los servidores los de la versión 1.0.1, además el atacante tiene que estar en disposición de poder hacer un MITM. Hoy en día con las redes WiFi disponibles en bares, restaurantes, hoteles o aeropuertos esto es más probable que hace 10 años.

¿Cómo se realizaría el ataque?

Las sesiones SSL/TLS se inician con los mensajes de ClientHello y ServerHello desde ambos lados de la conexión, similar al handsake en las conexiones TCP/IP. Durante esta parte del protocolo se negocian los atributos de la sesión como por ejemplo las claves de cifrado o protocolo de cifrado.

Por alguna razón, el cliente o el servidor puede modificar la estrategia de cifrado de la conexión durante la etapa del handshake. Esto es posible gracias al ChangeCipherSpec (CCS), que consiste en paquetes enviados entre cliente y servidor para informar que los siguientes registros de la conexión estarán protegidos bajo otras especificaciones de cifrado y claves.

ChangeCipherSpec

El mensaje CCS se envía durante el handshake, después de que los parámetros de seguridad han sido aceptados pero antes de verificar si se ha enviado el mensaje de «Finalizado».

Ante este escenario un atacante podría esperar a una nueva conexión TLS, seguido de los mensajes ClientHello y ServerHello. A continuación emitir un paquete CCS en ambas direcciones provocando que OpenSSL use una clave maestra con longitud cero, obligando a que las claves de sesión usen una longitud cero, así como las futuras claves de sesión, extrapolando la debilidad de la sesión durante toda la conexión. Una vez renegociados los parámetros del handshake, el atacante podrá descifrar y modificar los paquetes que pasen por sus manos.

OpenSSL ya ha corregido esta vulnerabilidad (CVE-2014-0224) cambiando la forma en la que los paquetes CCS son recibidos y no permitiendo longitudes cero como valores de las claves maestras.

Espero que os sirva de ayuda para entender mejor en qué consiste la vulnerabilidad y hasta que punto nos puede afectar.

Hasta la próxima!