martes, 8 de abril de 2014

OpenSSL afectada por una vulnerabilidad apodada Heartbleed

El proyecto OpenSSL acaba de liberar una nueva versión de la librería que corrige una muy curiosa y relativamente grave vulnerabilidad. La han llamado "Heartbleed", algo así como corazón desangrado, el motivo es que el fallo se encuentra en una extensión denominada "Heartbeat" y obviamente los que la han descubierto no han dejado pasar el juego de palabras, veremos la razón.

Heartbeat es una funcionalidad añadida a TLS/DTLS que básicamente permite refrescar una sesión segura sin necesidad de efectuar una renegociación. Entre cliente y servidor se envían mensajes en forma de estructuras muy básicas para asegurarse que el cliente va a seguir enviando peticiones o el servidor sigue ahí para seguir respondiéndolas.

Cuando OpenSSL se decidió a implementar el RFC correspondiente, introdujo un bug en la implementación. Dicho fallo permite leer partes de la memoria del proceso, hasta 64k, tanto en el cliente como en el servidor, dependiendo del punto de vista del atacante. Ese es el motivo del apodo con el que han bautizado la vulnerabilidad.

El problema reside en la función 'dtls1_process_heartbeat' de 'ssl/di_both.c' al no validar correctamente la longitud de la estructura 'ssl3_record_st'. Dicha longitud puede ser manipulada a un valor de 65535 bytes y la parte de datos mucho menor o simplemente 0. Cuando se reserva memoria para construir la respuesta, se hace teniendo en cuenta la longitud indicada por la petición. Posteriormente cuando los datos (que recordemos pueden estar a 0) sean copiados a la respuesta, mediante la función 'memcpy', lo que se van a copiar son datos de la memoria cercana a dicha estructura pero no relacionados con la misma.

Esto es así porque se le está indicando que nuestros datos son de 65535 cuando en realidad hemos enviado una cantidad muchísimo menor o 0. Obviamente, el receptor de la respuesta recibirá los datos en bruto de ese trozo de memoria.

Solo pueden ser leídos 64k como máximo, pero tal y como advierten en la web dedicada al fallo (http://heartbleed.com/) es posible renegociar la conexión una y otra vez y volver a obtener otros 64k reiterativamente aunque de manera no controlada, es decir, no sabemos que parte de la memoria "tocará". Según los descubridores esto les permitió efectuando pruebas de concepto extraer las claves privadas del servidor y diversa información sensible.

Recordemos que OpenSSL es una librería usada en multitud de proyectos y es distribuida en múltiples versiones de Linux, etc. Es decir, actualmente existe un número astronómico de equipos y servidores que podrían estar expuestos a esta vulnerabilidad. Hay que actualizar la librería OpenSSL a la última versión no vulnerable o compilar las fuentes descartando el soporte Heartbeat definiendo la opción -DOPENSSL_NO_HEARTBEATS.

Esta vulnerabilidad está presente desde la versión de OpenSSL que introdujo la implementación con el bug, desde la versión 1.0.1. El fallo fue descubierto por investigadores de la empresa Codenomicon en colaboración con Neel Mehta del equipo de seguridad de Google e independientemente por el equipo de seguridad de la empresa Codenomicon. Tiene asignado el CVE-2014-0160. Podemos leer un análisis técnico (en inglés) aquí y el commit al repositorio Git de OpenSSL del parche en este enlace . El parche se encuentra incluido en la última versión de OpenSSL, la 1.0.1g.

Más información:

The Heartbleed Bug

existential type crisis  : Diagnosis of the OpenSSL Heartbleed Bug

projects / openssl.git / commitdiff

Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS) Heartbeat Extension


David García
Twitter: @dgn1729

4 comentarios:

  1. Significa esto que tenemos que regenerar nuestras claves??

    Saludos

    ResponderEliminar
  2. @Luirro
    No creo, pero como menciona el artículo la memoria contigua a la petición puede contener cualquier información "sensible". Incluso claves y/o hash.

    Qué curioso que me entere de este bug precisamente por un anuncio de actualización de Filezilla Server que aparece aquí:
    https://filezilla-project.org/

    ResponderEliminar
  3. A cambiar las contraseñas ahora mismo:

    "The Heartbleed Hit List: The Passwords You Need to Change Right Now"
    http://mashable.com/2014/04/09/heartbleed-bug-websites-affected/?utm_cid=mash-com-Tw-main-link

    ResponderEliminar
  4. Leonardo Uzcategui14 de abril de 2014, 14:45

    Les hare una critica constructiva, en este articulo se fueron mas explicando la parte tecnica, falto explicar de forma lo mas sencillo posible que es este fallo, las dimensiones de como afecta esto las paginas web , el riesgo existente y como prevenirlo. Algo importantisimo que no lei en el articulo es que esto afecta a dos terceras partes de la internet. La BBC saco un articulo explicando a los mortales como es este fallo
    http://www.bbc.co.uk/mundo/noticias/2014/04/140410_heartbleed_fallo_claves_qa_rg.shtml

    ResponderEliminar