CVE-2013-1690
Corrija agora. Ela está sob exploração confirmada pelo CISA e tem exploit funcional público.
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
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.