| Heartbleed | |
|---|---|
Logótipo representativo de Heartbleed. A conscientização e a cobertura da mídia sobre o Heartbleed foram excepcionalmente altas para um bug de software. | |
| Identificador CVE | CVE-2014-0160 |
| Pontuação CVSS | Base: 7.5 HIGH, CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N |
| Lançamento | 1 de fevereiro de 2012 |
| Data da descoberta | 1 de abril de 2014 |
| Data da correção | 7 de abril de 2014 |
| Descobridor | Neel Mehta (Google Security) Riku, Antti, and Matti (Codenomicon) |
| Software afetado | OpenSSL (1.0.1) |
| Website | heartbleed |
Heartbleed é um bug na biblioteca de software de criptografia open-source OpenSSL, que permite a um atacante ler a memória de um servidor ou de um cliente, permitindo a este recuperar chaves SSL privadas do servidor. Os logs que foram examinados até agora, levam a crer que alguns hackers podem ter explorado a falha de segurança pelo menos cinco meses antes da falha ser descoberta por equipes de segurança.

A extensão Heartbeat da RFC 6520 testa links de comunicação seguros TLS/DTLS, permitindo que um computador numa extremidade da conexão envie uma mensagem de solicitação de pulsação (ou Heartbeat Request), composta por uma carga útil, geralmente uma string de texto, juntamente com o comprimento da carga útil como um inteiro de 16 bits . O computador receptor deve então re-enviar a mesma carga útil de volta ao remetente.
As versões afetadas do OpenSSL alocam um buffer de memória para a mensagem a ser retornada com base no campo de comprimento da mensagem solicitada, sem terem em consideração o tamanho real do conteúdo da mensagem. Devido a esta falha na verificação adequada dos limites, a mensagem retornada consiste no conteúdo, possivelmente seguido por qualquer outro elemento presente no buffer de memória alocado.
O Heartbleed é, portanto, explorado através do envio de uma solicitação de pulsação malformada, com uma pequena carga útil e um campo de comprimento grande, para a parte vulnerável (geralmente um servidor) para obter uma resposta da vítima, permitindo aos atacantes lerem até 64 kibibytes da memória da vítima que provavelmente foram usados anteriormente pelo OpenSSL. Enquanto uma solicitação de heartbeat pode pedir a uma parte para "enviar de volta a palavra de quatro letras 'gato'", resultando numa resposta "gato", uma solicitação de Heartbleed (uma solicitação de heartbeat maliciosa) a pedir para "enviar de volta a palavra de 500 letras 'gato'" faria com que a vítima retornasse "gato" seguido por quaisquer 496 caracteres subsequentes que a vítima tivesse na memória ativa. Os atacantes, dessa forma, poderiam ler dados sensíveis, comprometendo a confidencialidade das comunicações da vítima. Embora um atacante tenha algum controlo sobre o tamanho do bloco de memória revelado, não tem controlo sobre sua localização e, portanto, não pode escolher que conteúdo será revelado.
As versões afetadas do OpenSSL são as versões entre OpenSSL 1.0.1 e 1.0.1f (inclusive). Versões subsequentes (1.0.1g e posteriores) e versões anteriores (branch 1.0.0 e anteriores) não são vulneráveis. As instalações das versões afetadas são vulneráveis, a menos que o OpenSSL tenha sido compilado com a bandeira -DOPENSSL_NO_HEARTBEATS .
Os ficheiros-fonte do programa vulneráveis são t1_lib.c e d1_both.c e as funções vulneráveis são tls1_process_heartbeat() e dtls1_process_heartbeat() .
O problema pode ser resolvido ignorando as mensagens de solicitação de pulsação (ou Heartbeat Request) que pedem mais dados do que o necessário para sua carga útil, conforme exigido pela RFC.
A versão 1.0.1g do OpenSSL adiciona algumas verificações de limites para evitar a leitura excessiva do buffer. O teste listado abaixo foi introduzido para determinar se uma solicitação de heartbeat seria um ataque Heartbleed, descartando silenciosamente solicitações maliciosas.
if (1 + 2 + payload + 16 > s->s3->rrec.length) return 0; /* descartar silenciosamente, de acordo com RFC 6520 sec. 4 */