Pular para o conteúdo
>_ITDITDPlataforma de Segurança Web

Incidentes e Vulnerabilidades

Heartbleed (CVE-2014-0160) — quando memória vazou da base do tráfego criptografado

Em 2014, o OpenSSL (que sustenta o HTTPS) tinha o Heartbleed — vazando memória do servidor, até chaves privadas e sessões. Como funcionava o bug do 'retorna mais do que foi pedido' e as lições: assuma que tudo vazou, reemita certificados, rotacione todo segredo.

Publicado 2026-06-07 Atualizado 2026-06-07 4 min de leitura

Revisitando um evento marcante pelas lições que ainda valem para suas operações — de forma defensiva, não como reprodução.

2014
descoberto
~17%
dos servidores web 'seguros' afetados
chave privada
vazamento no pior caso
sem rastro
dificuldade de detecção

O que aconteceu — "retorna mais do que foi pedido"

O TLS (a criptografia por trás do HTTPS) tem uma troca de keep-alive chamada "heartbeat". O cliente envia um pouco de dados mais um comprimento ("devolva isto"), e o servidor o ecoa de volta — simples por design.

A implementação do OpenSSL não validava o comprimento alegado. Envie alguns bytes mas alegue "devolva 64KB", e o servidor lê além dos seus dados, na memória adjacente, e a retorna. Se uma chave privada ou sessão estivesse ali, vazava junto.

Normal: comprimento enviado = comprimento retornado

"devolva 'bird' (4 caracteres), comprimento 4" → servidor: "bird"

↓ sem validar o comprimento…

Heartbleed: payload minúsculo + comprimento alegado enorme

"devolva 'bird' (4 caracteres), comprimento 64KB" → servidor: "bird + 64KB de memória vizinha (pode incluir chaves, sessões)"

Normalmente você recebe de volta o que enviou. O Heartbleed confiava no comprimento alegado e retornava a memória vizinha.

Nenhum privilégio especial era necessário; repetir isso coletava fragmentos de memória aos poucos. Um bug minúsculo na mais fundamental das camadas abalou a confiança no tráfego do mundo inteiro.

O pavor de um vazamento 'sem rastro'

O Heartbleed deixava pouquíssimo rastro nos logs de acesso normais, então "vazou?" e "o que vazou?" eram difíceis de afirmar. Na dúvida, aja com base no pior caso.

Linha do tempo

  1. 2014-04-07

    A falha é divulgada e um OpenSSL corrigido é lançado no mesmo dia.
  2. logo depois

    Servidores no mundo todo são corrigidos em massa; a amplitude do impacto causa alarme.
  3. depois disso

    Muitos serviços revogam e reemitem certificados "assumindo que a chave vazou", e pedem aos usuários que troquem as senhas.

Por que "só corrigir" não é o fim

Se a chave privada pode ter vazado, então mesmo depois de corrigir, a chave antiga ainda é válida. Então a resposta tem duas partes — fechar o buraco (patch) mais rotacionar os ativos como se tivessem vazado (chaves, certificados, segredos).

Resposta insuficiente

  • Atualizar o OpenSSL e considerar "resolvido"
  • Rotacionar apenas o único segredo que você confirmou abusado
  • Continuar usando o mesmo certificado

Resposta correta

  • Atualizar e revogar/reemitir os certificados (regerar a chave privada)
  • Rotacionar todo segredo, chave e senha que o servidor guarda
  • Solicitar aos usuários que troquem as senhas

Lições que ainda valem

1

Aja como se tudo tivesse vazado

Rotacione todo segredo, chave e senha — não apenas o único que você confirmou. Com um vazamento sem rastro, assuma o pior.

2

Revogue e reemita certificados

Se a chave privada pode ter vazado, reconstrua também o certificado. Até você rotacionar a chave, o vazamento passado continua vivo.

3

Monitore também o software de base

Acompanhe os CVEs em "bases" como o OpenSSL, não só no seu app. Quanto mais profunda a camada, mais amplo o impacto.

4

Valorize a segurança de memória

Bugs de "ler mais do que foi pedido" diminuem estruturalmente com design e linguagens seguros em memória. Leve isso em conta no que você constrói.

Leia em seguida

FAQ

QO que podia vazar no Heartbleed?
A

Memória do servidor — no pior caso, a chave privada TLS, o conteúdo da sessão e dados de login. E deixava pouquíssimo rastro, então 'quanto vazou' era difícil de determinar depois.

QPor que ele 'retornava mais do que foi pedido'?
A

Na troca de keep-alive (heartbeat), o servidor confiava no comprimento que o outro lado alegava em vez de verificá-lo. Envie alguns bytes mas alegue 'devolva 64KB', e o servidor lia além dos seus dados, na memória adjacente, e a retornava. Confiar na entrada (o comprimento) era o buraco.

QO que mais importava na resposta?
A

Depois de corrigir, agir como se tudo tivesse vazado: revogar e reemitir os certificados TLS, e rotacionar todo segredo e senha que o servidor guardava. Só corrigir o app não bastava.