O Retorno do Cache Poisoning

La Belle Dame Sans Merci por Frank Cadogan Cowper em 1901

Recentemente, dois fantasmas do passado voltaram a assombrar o coração da Internet: cache poisoning em DNS. As vulnerabilidades críticas CVE-2025-40778 e CVE-2025-40780, descobertas no software BIND 9, reacendem um risco que muitos já consideravam enterrado desde 2008.


O que é cache poisoning?

Em um resolver DNS recursivo (como o BIND), a resposta a uma consulta é armazenada em cache para acelerar requisições futuras. O problema é: se o cache for preenchido com dados falsos, todos os usuários seguintes serão redirecionados para o destino errado.

Imagine: alguém digita admin.hackerfofo.com e, em vez de chegar no seu servidor real (IP 198.18.0.42), é enviado para 240.0.0.66, onde há um clone malicioso pronto para capturar credenciais.

Isso é cache poisoning. E sim, ainda funciona.


As falhas no BIND 9

CVE-2025-40778 — “Confia, pode guardar”

BIND aceita registros não solicitados em uma resposta DNS.

Ou seja, ao responder por www.hackerfofo.com, um atacante injeta junto um registro A para admin.hackerfofo.com. Mesmo que a consulta original não pedisse esse segundo nome, ele é cacheado e usado futuramente.


CVE-2025-40780 — A entropia morreu aqui

A geração de números pseudoaleatórios está fraca. O atacante pode prever a porta de origem e o ID da transação DNS.

Com isso, torna-se viável forjar respostas falsas com os valores corretos, enganando o resolver.

Detalhe importante: isso não é só sorte. É exploração da baixa entropia criptográfica.


A importância da entropia e por que ela quebra ou sustenta a Internet

O que é entropia?

Entropia é a medida de imprevisibilidade. Quanto mais entropia, mais difícil prever um valor gerado aleatoriamente — seja uma chave criptográfica, um token de sessão ou… o ID de transação e porta de uma requisição DNS.

O ataque de 2008 é a resposta.

Antes de 2008, a maioria dos resolvers usava:

  • Porta fixa 53 para todas as requisições;
  • ID de transação com somente 16 bits (65.536 combinações);

Após o ataque de Dan Kaminsky, a comunidade implementou:

  • Portas de origem aleatórias (com mais de 16 bits);
  • IDs imprevisíveis;
  • Total de entropia: > 30 bits combinados.

E o BIND 9 em 2025?

Com a falha no PRNG do BIND, os valores não são mais verdadeiramente aleatórios. Isso reduz o espaço de busca para um atacante — que, mesmo sem controle total da rede, pode adivinhar porta + ID e enviar a resposta falsa no timing certo.

Criptografia sem entropia é decoração. O mesmo vale para DNS seguro.


Cache Poisoning

BEGIN

target_dns = "198.18.0.53"
malicious_ip = "240.0.0.66"
target_domain = "www.hackerfofo.com"

trigger_dns_query(target_dns, target_domain)

FOR tid FROM 0 TO 65535 DO
    fake_response = construct_dns_response(
        transaction_id = tid,
        source_ip = malicious_ip,
        destination_ip = target_dns,
        query_domain = target_domain,
        answer_ip = malicious_ip
    )

    send_udp_packet(fake_response, target_dns, port=53)

    IF cache_contains(target_domain, malicious_ip) THEN
        display("Cache successfully poisoned")
        EXIT LOOP
    ENDIF
ENDFOR

END

Esse ataque tenta “acertar” o ID de transação e se beneficiar de respostas permissivas do BIND. A entropia comprometida facilita o sucesso.


Como se proteger

✅ Atualize para BIND 9.18.41, 9.20.15 ou 9.21.14
✅ Ative e exija DNSSEC para registros sensíveis
✅ Bloqueie spoofing com BCP38 na borda da rede
✅ Aplique Rate Limiting em resolvers recursivos
✅ Use PRNGs seguros baseados em CSPRNG (como ChaCha20, /dev/urandom)


Conclusão

A Internet moderna é construída sobre protocolos frágeis remendados por boas práticas. Toda vez que um sistema perde sua entropia, um atacante ganha uma porta de entrada.

Atualize. Assine. Monitore. Ou um clone de hackerfofo.com pode ser seu novo front-end...

Subscribe to Hacker Fofo

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
[email protected]
Subscribe