El lunes 7 de abril de 2014 será uno de esos días que Internet jamás olvidará, por haberse masificado una nueva vulnerabilidad en OpenSSL, la implementación más popular del estándar TLS. Es importante destacar que el bug no se encuentra en el protocolo en si mismo sino en la implementación, lo cual es uno de los problemas más comunes en lo que a criptografía se refiere.
Su original nombre, Heartbleed (sangrado de corazón), surgió de un juego de palabras de la extensión en la que se encontró el bug, llamada Heartbeat (latido). La funcionalidad Heartbeat (ya conocida en los entornos de redes VPN) de TLS/DTLS, permite mantener viva una sesión sin que sea necesario renegociar parámetros de cifrado y funciona mediante el envío de mensajes entre cliente y servidor.
La vulnerabilidad existe en el código desde diciembre de 2011. Las versiones vulnerables son la 1.0.2-beta y todas las previas de la serie 1.0.1 anteriores a la 1.0.1g. Su código CVE es CVE-2014-0160, y puede encontrarse más información al respecto en el sitio oficial de OpenSSL y en el sitio www.heartbleed.com (en inglés). Ha sido descubierto independientemente por los ingenieros de la compañía de seguridad Codenomicon y por Neel Mehta, investigador del equipo de seguridad de Google.
El bug posibilita la lectura de ciertos fragmentos de la memoria del propio proceso (hasta 64k por vez) tanto del lado del cliente como del lado del servidor, con lo que un potencial atacante podría entonces vulnerar a cualquiera de las partes.
Para realizar el ataque, se debe construir un requerimiento de heartbeat malformado de forma tal que provoque la lectura de la memoria remotamente, en base a la falta de verificación de cierta variable. Técnicamente, afecta a la función dtls1_process_heartbeat de ssl/di_both.c, donde no se realiza la validación correcta de la estructura ssl3_record_st, que entonces puede ser manipulada maliciosamente. Si bien sólo es posible leer un máximo de 64kb, si se renegocia la conexión reiteradamente se pueden obtener nuevos fragmentos. Según esto, se lo puede clasificar como una falla de buffer over-read, que es cuando un programa permite leer más datos de los que debería permitir.
La gravedad del asunto radica especialmente en que realizando pedidos de a 64kb sería posible obtener los datos correspondientes a la clave privada del servidor (o del cliente) y otros datos sensibles. Si a esto le sumamos que OpenSSL masivamente es utilizado y presente en las dos terceras partes de los servidores web de Internet, estamos antes un escenario de un nivel de riesgo dantesco que no se repetirá por mucho tiempo.
Al dia de hoy, ya existen diversos sitios y herramientas que permiten verificar la existencia de la vulnerabilidad en un servidor y, en alguno casos, hasta explotarla. Uno de los primeros en publicar un chequeador fue el especialista italiano en criptografía Filippo Valsorda, quien montó una web para tal fin: http://filippo.io/heartbleed.
En el caso de los administradores de servidores, la manera de evitar ser afectados por Heartbleed es sencillamente actualizar a la última versión de OpenSSL o bien para los más puristas, recompilar el código anulando el soporte para Heartbeat.
Por Federico Pacheco, experto en seguridad informática. Autor de los libros Criptografía y Los menores y los riesgos de las nuevas tecnologías. En Twitter: @fedequark