← voltar
CVE-2013-1690highsob ataqueCWE-119

CVE-2013-1690

98Vexday Risk Score

Corrija agora. Ela está sob exploração confirmada pelo CISA e tem exploit funcional público.

ssvc Actcvss 8.8epss 69%
da publicação à arma43 dias
Publicada no NVD26 de jun.
1ª PoC+43d
metasploit25 de jun.
CISA KEV+3197d
probabilidade de exploração
69%top 1% das CVEs
exploração observada
simCISA + VulnCheck
3 exploit(s) público(s)
Ação exigida pela CISAprazo federal: 2022-04-18

Apply updates per vendor instructions.

Resumo

Use-after-free na engine de navegação do Firefox/Thunderbird (baseados no Gecko) quando um handler do evento onreadystatechange é executado durante um reload de documento (location.reload() ou navegação). A falha ficou famosa por ter sido usada em agosto de 2013 para deanonimizar usuários do Tor Browser Bundle através de sites .onion hospedados no Freedom Hosting, episódio associado à Operação Torpedo do FBI — não é um caso teórico, foi exploração real em massa antes mesmo da correção ser amplamente distribuída.

Detalhamento técnico

O bug está no componente de navegação de documentos do Gecko (originalmente catalogado em DOM: Events, depois reclassificado como DOM: Document Navigation). Quando um script registra um handler onreadystatechange e o documento é recarregado — via nsLocation::Reload chamando nsDocShell::Reload/nsDocShell::Stop/nsDocShell::InternalLoad — objetos internos como o nsXULPrototypeDocument e estruturas do content sink (nsContentSink::DidBuildModelImpl) podem ser liberados enquanto ainda existem referências pendentes sendo usadas pelo fluxo de execução do reload. Isso é um clássico use-after-free (a Mozilla marcou o bug com a tag csectype-uaf e sec-critical).

O relato original do pesquisador (Nils, Bugzilla #857883) descreve o problema como 'muito dependente de timing': reproduzível quase toda vez a partir de file://, mas exigindo várias tentativas de reload quando acessado remotamente via HTTP. Isso indica uma condição de corrida entre a liberação de memória do documento antigo e a execução assíncrona do callback de onreadystatechange, cujo resultado final documentado pela Mozilla é 'tentativa de executar dados em um endereço de memória não mapeado' — ou seja, o ponteiro corrompido pode ser redirecionado para um endereço controlado pelo atacante via heap grooming, abrindo caminho para execução de código arbitrário além do simples crash.

A descrição oficial da Mozilla (MFSA 2013-53) resume isso como 'Execution of unmapped memory through onreadystatechange event'. O atacante não precisa de nenhuma permissão especial no navegador: o vetor é JavaScript comum, disponível a qualquer página web renderizada pelo motor vulnerável.

Como é explorada

O vetor é uma página web maliciosa (ou conteúdo controlado pelo atacante, como um iframe) que registra um listener onreadystatechange e força reloads repetidos do documento em sequência calculada para colidir com a liberação do objeto. Não há necessidade de autenticação, plugin ou configuração não padrão — basta que a vítima carregue a página com JavaScript habilitado (AC:L, UI:R na notação CVSS: interação do usuário é simplesmente visitar o site). A exploração é probabilística: depende do layout do heap no momento, por isso os PoCs observados repetem a tentativa várias vezes até acertar o timing.

A exploração ativa documentada (Bugzilla #901365) ocorreu quando um código malicioso foi injetado em páginas .onion do Freedom Hosting em agosto de 2013. O payload observado (nome de arquivo 'magneto' nos pastebins analisados pela Mozilla) não visava controle total do sistema em todos os casos relatados publicamente: ele explorava o UAF para executar shellcode que coletava o endereço MAC e o hostname do Windows da máquina vítima e enviava essas informações via HTTP para um servidor de coleta — comportamento consistente com uma operação de desanonimização de usuários do Tor Browser Bundle (que na época era baseado em Firefox ESR 17), não com um ransomware ou backdoor persistente. A engenharia do exploit, porém, demonstra capacidade de execução de código arbitrário, e o bug está listado no catálogo KEV da CISA como exploração confirmada, além de ter módulo Metasploit e PoC pública circulando.

Para Thunderbird, o próprio advisory da Red Hat ressalva que a exploração via e-mail HTML não funciona porque JavaScript vem desabilitado por padrão em mensagens; o vetor realista no cliente de e-mail seria conteúdo remoto de feeds RSS, que pode carregar JS de forma equivalente à navegação web.

Versões

Afetadas
Mozilla Firefox anterior a 22.0; Firefox ESR 17.x anterior a 17.0.7; Thunderbird anterior a 17.0.7; Thunderbird ESR 17.x anterior a 17.0.7. O rastreamento do Bugzilla também lista firefox20 e firefox21 como afetados (wontfix nessas linhas, corrigido a partir de firefox22).
Corrigidas em
Firefox 22.0; Firefox ESR 17.0.7; Thunderbird 17.0.7; Thunderbird ESR 17.0.7. Pacotes corrigidos distribuídos por Red Hat (firefox e thunderbird 17.0.7-1.el5_9/el6_4) e por advisories do openSUSE referenciados.

Como se proteger

A correção definitiva é atualizar: Firefox para 22.0 ou superior, Firefox ESR 17.x para 17.0.7 ou superior, Thunderbird para 17.0.7 ou superior, e Thunderbird ESR 17.x para 17.0.7 ou superior. Distribuições Linux publicaram backports equivalentes — Red Hat via RHSA-2013:0981 (firefox 17.0.7 ESR) e RHSA-2013:0982 (thunderbird 17.0.7), além de pacotes correspondentes no openSUSE.

Não há flag de configuração ou pref que neutralize o bug de forma confiável sem quebrar a navegação normal: como o vetor é JavaScript comum (onreadystatechange é parte básica do DOM), a única mitigação compensatória real é desabilitar JavaScript inteiramente (via extensão tipo bloqueio de script ou política de rede que impeça carregamento de scripts), o que inviabiliza a maior parte da web moderna e deve ser tratado como paliativo de curtíssimo prazo, não solução. Para Thunderbird, manter JavaScript desabilitado para mensagens (comportamento padrão) já reduz a superfície de e-mail, mas não protege contra conteúdo remoto de feeds RSS carregado com JS habilitado.

O que não funciona: atualizar apenas plugins, desabilitar Flash/Java, ou confiar em sandboxing de processo de conteúdo — nenhuma dessas medidas neutraliza um UAF na própria engine de navegação/document loader. Reiniciar o navegador após a atualização é obrigatório, conforme reforçado pelos advisories da Red Hat, pois a correção só entra em vigor com o processo reiniciado.

Como detectar

Não há assinatura de rede confiável e específica para esta CVE isoladamente — o exploit observado em 2013 (caso Freedom Hosting) usava payload customizado ('magneto') que enviava MAC address e hostname via HTTP para um endpoint de coleta, mas esse indicador é específico daquela campanha histórica e não generaliza para novos usos da falha. Em nível de aplicação, crashes do Firefox/Thunderbird com stack trace envolvendo nsDocShell::Reload, nsDocShell::Stop, nsContentSink::DidBuildModelImpl ou SEGV em endereço de memória não mapeado (0x000000000000) durante ou logo após reload de página são o sinal mais direto de tentativa de exploração, visível em relatórios de crash (Socorro/crash-stats) da época. Para ambientes atuais, dado que a falha tem mais de uma década e os navegadores afetados são obsoletos, a detecção prática relevante é simplesmente verificar se ainda existe alguma instância legada de Firefox/Thunderbird ESR 17.x ou builds pré-22 em uso.

Pesquisado e redigido com IA a partir do advisory do fornecedor e de análises públicas, com as fontes acima. Confira sempre a versão corrigida no advisory oficial antes de agir.
Mozilla Firefox before 22.0, Firefox ESR 17.x before 17.0.7, Thunderbird before 17.0.7, and Thunderbird ESR 17.x before 17.0.7 do not properly handle onreadystatechange events in conjunction with page reloading, which allows remote attackers to cause a denial of service (application crash) or possibly execute arbitrary code via a crafted web site that triggers an attempt to execute data at an unmapped memory location.
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
Produtos afetados
n/a · n/a
⚠ Recursos públicos, para você avaliar a exposição de sistemas que controla ou está autorizado a testar. Teste apenas com autorização.