CVE-2024-9680
Priorize a correção. Ela está sob exploração confirmada pelo CISA e tem prova de conceito pública.
Apply mitigations per vendor instructions or discontinue use of the product if mitigations are unavailable.
Resumo
Use-after-free no código de Animation Timelines do motor Gecko, explorável por uma página web maliciosa para executar código no processo de conteúdo do Firefox/Thunderbird. A Mozilla confirmou exploração ativa antes da correção, e a falha está no catálogo KEV da CISA — não é um CVSS 9.8 teórico, houve uso real em campanhas de comprometimento via navegador.
Detalhamento técnico
A falha (CWE-416, use-after-free) está em mozilla::dom::DocumentTimeline::RemoveAnimation(mozilla::dom::Animation*) e no mecanismo genérico mozilla::LinkedListElement::remove(). Um objeto Animation é mantido em uma lista encadeada pertencente à timeline do documento; em certas sequências, o objeto é liberado enquanto ainda há uma referência viva apontando para ele na lista.
Segundo o desenvolvedor que corrigiu o bug (Emilio Cobos Álvarez, em comentário no Bugzilla), o gatilho central é que uma chamada a MaybeResolve(this) pode acabar invocando Animation.then — ou seja, resolver uma promise associada à animação dispara execução de JavaScript arbitrário se o atacante sobrescrever o prototype do objeto Animation. Esse callback JS roda em um ponto do ciclo de vida da animação que o código C++ não esperava ser reentrante, e esse JS pode remover ou destruir a animação enquanto o código nativo ainda mantém um ponteiro para ela — daí o use-after-free.
O atacante controla o conteúdo JavaScript da página (prototype manipulation da classe Animation, timing de disparo da promise, e a estrutura da timeline/animação), o que é suficiente para forçar a condição de corrida entre liberação de memória e uso subsequente, sem precisar de nenhuma condição de ambiente especial no navegador.
A correção envolveu simplificar a conversão de LinkedList para nsTArray e remover uma sobrecarga redundante de RemoveAnimation, eliminando o ponto de reentrância perigoso.
Como é explorada
O vetor é uma página web (ou conteúdo HTML/JS equivalente) que a vítima visita ou que é carregada dentro do processo de conteúdo. Não exige autenticação, privilégios elevados nem configuração não padrão — é exatamente o cenário refletido no vetor CVSS (AV:N/AC:L/PR:N/UI:N): basta o processo de conteúdo renderizar e executar o JavaScript malicioso. Em Thunderbird, o caminho de exploração relevante é conteúdo web renderizado pelo motor (ex.: mensagens HTML com JS habilitado em contextos específicos, feeds RSS ou visualização de conteúdo remoto), não o fluxo padrão de e-mails simples.
Um engenheiro da Mozilla observou, ao avaliar o patch para aprovação de segurança, que o exploit 'não é super fácil de construir', mas que, uma vez exposta a stack trace do crash, fica consideravelmente mais simples — o que é coerente com o fato de existirem PoCs públicos documentados após a divulgação. A exploração bem-sucedida de um UAF desse tipo tipicamente envolve técnicas de heap grooming para realocar um objeto controlado pelo atacante no espaço de memória liberado, convertendo o dangling pointer em execução de código controlada.
A Mozilla relatou explicitamente 'reports of this vulnerability being exploited in the wild' antes da correção, e o caso está no catálogo KEV da CISA, confirmando exploração real, embora os detalhes de quem/quantas campanhas usaram a falha não estejam documentados publicamente nas fontes analisadas.
Versões
Como se proteger
Atualizar é a única mitigação real. Não há flag, política de grupo ou configuração de content-security que neutralize um UAF na engine de animação sem desabilitar recursos amplos de renderização (o que quebraria a maioria dos sites). Desativar JavaScript reduziria a superfície, mas não é uma opção viável de uso normal do navegador.
Distribuições Linux com ciclos próprios de empacotamento (ex.: Debian LTS) publicaram backports específicos: para Debian 11 (bullseye), firefox-esr foi corrigido em 128.3.1esr-1~deb11u1 e thunderbird em 1:115.16.0esr-1~deb11u1. Ambientes que dependem de builds de terceiros ou portas (ex.: FreeBSD ports) precisam confirmar que a versão empacotada já incorpora o patch, já que o CVE é tratado como urgência máxima ('0day', na classificação da comunidade FreeBSD) exatamente por já ter exploração confirmada.
Não existe mitigação de rede eficaz (WAF, proxy) porque o payload é JavaScript legítimo do ponto de vista de protocolo, executado dentro do processo de conteúdo — a defesa é a correção do binário do navegador/cliente de e-mail.
Como detectar
Não há assinatura de rede confiável: o payload é JavaScript executado no processo de conteúdo, servido normalmente via HTTPS, indistinguível de tráfego web legítimo. O sinal mais prático é o lado do cliente — crashes recorrentes do processo de conteúdo do Firefox/Thunderbird (relatórios no Crash Reporter da Mozilla apontando para DocumentTimeline::RemoveAnimation ou LinkedListElement::remove(), ou crashes classificados como 'sec-critical' relacionados a Animation) em máquinas que acessaram sites suspeitos antes de outubro de 2024, quando a versão instalada ainda era vulnerável.
Exploits de use-after-free frequentemente falham em corromper a heap com sucesso antes de conseguirem executar código, gerando crashes reprodutíveis; analistas de SOC devem correlacionar crash reports em massa desse tipo com URLs/domínios visitados no mesmo período, já que não há IOC de rede documentado publicamente para esta CVE específica.