Incidentes y vulnerabilidades

Heartbleed (CVE-2014-0160) — un fallo de OpenSSL que filtraba la memoria del servidor

Heartbleed fue un fallo de OpenSSL de 2014 que filtraba memoria del servidor, incluso claves privadas. Cómo funcionaba y qué hacer: reemitir y rotar secretos.

Publicado 2026-06-07 Actualizado 2026-10-23 5 min de lectura
En esta página

Revisitamos un incidente importante del pasado por las lecciones que aún se aplican a tu operación, desde un enfoque defensivo, no como reproducción.

2014
descubierto
~17%
Encuesta TLS al divulgarse (2014)
clave privada
filtración en el peor caso
sin rastro
dificultad de detección

Qué ocurrió: un fallo que devolvía más datos de los pedidos

TLS (el cifrado tras HTTPS) tiene un intercambio de mantenimiento llamado «heartbeat». El cliente envía un poco de datos más una longitud («devuélveme esto»), y el servidor lo repite. Es simple por diseño.

La implementación de OpenSSL no validaba la longitud declarada. Envía unos pocos bytes pero declara «devuelve 64KB», y el servidor lee más allá de tus datos, en la memoria adyacente, y la devuelve. Si ahí había una clave privada o una sesión, también se filtraba.

Normal: longitud enviada = longitud devuelta

«devuelve 'bird' (4 caracteres), longitud 4» → servidor: "bird"

↓ sin validar la longitud…

Heartbleed: payload diminuto + longitud declarada enorme

«devuelve 'bird' (4 caracteres), longitud 64KB» → servidor: "bird + 64KB de memoria vecina (puede incluir claves, sesiones)"

Normalmente recuperas lo que enviaste. Heartbleed confiaba en la longitud declarada y devolvía memoria vecina.

No hacían falta privilegios especiales; repetirlo recopilaba fragmentos de memoria poco a poco. Un diminuto fallo en una biblioteca TLS de la que depende muchísimo software afectó a la seguridad del tráfico HTTPS en todo el mundo.

Una filtración que apenas deja rastro no se puede acotar

Heartbleed dejaba pocos rastros en los registros de acceso normales, así que «¿se filtró?» y «¿qué se filtró?» eran difíciles de afirmar. Ante la duda, actúa sobre el peor caso.

Cronología

  1. 2014-04-07

    Se divulga el fallo y se lanza una versión corregida de OpenSSL el mismo día.
  2. justo después

    Los servidores de todo el mundo parchean en masa; la amplitud del impacto causa alarma.
  3. después

    Muchos servicios revocan y reemiten certificados «asumiendo que la clave se filtró», y piden a los usuarios cambiar contraseñas.

Por qué parchear por sí solo no termina el trabajo

Si la clave privada pudo haberse filtrado, entonces incluso tras parchear, la clave antigua sigue siendo válida. Así que la respuesta tiene dos partes: corregir la vulnerabilidad (parchear) y rotar claves, certificados y secretos como si se hubieran filtrado.

Respuesta insuficiente

  • Actualizar OpenSSL y darlo por «corregido»
  • Rotar solo el único secreto cuyo abuso confirmaste
  • Seguir usando el mismo certificado

Respuesta correcta

  • Actualizar y revocar/reemitir los certificados (regenerar la clave privada)
  • Rotar todos los secretos, claves y contraseñas que tenga el servidor
  • Pedir a los usuarios cambiar sus contraseñas

Lecciones que aún se aplican

1

Actúa como si todo se hubiera filtrado

Rota todos los secretos, claves y contraseñas, no solo el que confirmaste. Cuando una filtración apenas deja rastro, asume lo peor.

2

Revoca y reemite los certificados

Si la clave privada pudo haberse filtrado, reconstruye también el certificado. Hasta que rotes la clave, una clave filtrada en el pasado sigue siendo utilizable.

3

Monitoriza también las bibliotecas base

Rastrea los CVE de bibliotecas base como OpenSSL, no solo los de tu aplicación. Cuanto más software depende de una biblioteca, más amplio el impacto.

4

Valora la seguridad de memoria

Los fallos de «leer más de lo pedido» se reducen estructuralmente con un diseño y lenguajes con seguridad de memoria. Tenlo en cuenta al elegir la tecnología sobre la que construyes.

Lee a continuación

Fuentes y alcance

Estas fuentes primarias respaldan los ajustes, el alcance o las medidas anteriores; enlaces comprobados el 23 de octubre de 2026. Revisa sus condiciones de versión y configuración. Las prioridades y lecciones son recomendaciones del sitio, no una revalidación completa ni una garantía de seguridad.

FAQ

Q¿Qué podía filtrarse en Heartbleed?
A

La memoria del servidor: en el peor caso, la clave privada TLS, el contenido de sesiones y datos de inicio de sesión. Y dejaba pocos rastros, así que «cuánto se filtró» era difícil de determinar después.

Q¿Por qué «devolvía más de lo pedido»?
A

En el intercambio de mantenimiento (heartbeat), el servidor confiaba en la longitud que declaraba el otro extremo en vez de comprobarla. Envía unos pocos bytes pero declara «devuelve 64KB», y el servidor leía más allá de tus datos, en la memoria adyacente, y la devolvía. La causa fue confiar en la entrada (la longitud) sin comprobarla.

Q¿Qué importó más en la respuesta?
A

Tras parchear, actuar como si todo se hubiera filtrado: revocar y reemitir los certificados TLS, y rotar todos los secretos y contraseñas que tuviera el servidor. Parchear la aplicación por sí solo no bastaba.