CVE-2019-17026
Prioriza la corrección. Ella está bajo explotación confirmada por CISA y tiene prueba de concepto pública.
Apply updates per vendor instructions.
Resumen
Falha de type confusion (CWE-843) no compilador JIT IonMonkey do SpiderMonkey, motor JavaScript usado por Firefox, Firefox ESR e Thunderbird. A Mozilla confirmou exploração ativa e direcionada antes da correção — não é uma CVE teórica: foi um 0-day real usado em ataques, o que justifica sua presença no catálogo KEV da CISA mesmo sendo de 2019/2020.
Detalle técnico
O bug está nos "alias sets" do IonMonkey — anotações que o compilador usa em cada instrução MIR para saber quais operações de memória podem ou não ser reordenadas/eliminadas com segurança durante otimização. Para operações que definem elementos de array, esse conjunto de alias estava incorreto: o Ion assumia ausência de dependência de memória onde na verdade havia uma, permitindo que o compilador reordenasse ou eliminasse operações de forma inválida.
O resultado prático é type confusion: o motor passa a tratar um slot de memória como contendo um tipo/forma de objeto diferente do que realmente está armazenado ali. Como o atacante controla o JavaScript executado (arrays, valores atribuídos, padrões de warm-up para forçar a compilação Ion), ele consegue induzir esse estado inconsistente e, a partir daí, ler/escrever memória fora do esperado — base clássica para escalar para execução de código dentro do processo de conteúdo.
A regressão foi rastreada pelos desenvolvedores até por volta de 23/05/2016, ou seja, o bug existia no código há anos antes de ser descoberto e armado. A correção (bug 1607443, "Fix some alias sets", por Jan de Mooij) ajustou os alias sets de operações de escrita em array; os desenvolvedores também revisaram um caso semelhante em MCreateThis, mas concluíram que aquele não era um problema de segurança.
O caso foi reportado à Mozilla pela equipe Qihoo 360 ATA, que enviou um PoC ("RAW-EXPLOIT-POC.html") já em uso em ataques reais, descrito por eles como abusando do "motor de script PAC" (Proxy Auto-Config) para obter execução remota de código — um detalhe do relatório do descobridor, não confirmado independentemente pela Mozilla no bug público.
Cómo se explota
O vetor primário é conteúdo web/e-mail malicioso: a vítima precisa carregar uma página (ou, no caso do Thunderbird, um conteúdo HTML/mensagem) que execute JavaScript malicioso capaz de forçar o array em questão a ser compilado pelo IonMonkey (aquecimento de loop suficiente para acionar JIT tier-up) e manipular o array de forma que o alias set incorreto seja explorado. Isso exige interação do usuário (abrir a página/mensagem) — refletido no vetor CVSS com UI:R — mas não exige autenticação nem configuração não padrão do navegador ou cliente de e-mail.
Segundo o relato do descobridor (Qihoo 360), o exploit visto em campo usava o motor de execução de scripts PAC (Proxy Auto-Config), um caminho de código que também passa pelo SpiderMonkey/IonMonkey mas é acionado pela resolução de proxy da rede, não pela navegação convencional — uma superfície de ataque menos óbvia que amplia o alcance sem depender de o usuário clicar em um link específico, dependendo de como o PAC é entregue ao cliente. Esse detalhe consta apenas no relatório inicial do bug, sem confirmação técnica adicional publicada pela Mozilla.
A exploração foi classificada pela Mozilla como "ataques direcionados" (targeted attacks in the wild), não massificados — perfil típico de uso por atores com acesso a 0-days caros, explorando alvos específicos antes da correção. Após a correção pública e a publicação de PoCs/testcases (inclusive nos anexos do bug), o risco de reuso oportunista em sistemas não corrigidos aumenta, e por isso a CVE está no catálogo KEV da CISA.
Versiones
Cómo protegerse
A correção definitiva é atualizar para Firefox 72.0.1 ou posterior, Firefox ESR 68.4.1 ou posterior, e Thunderbird 68.4.1 ou posterior — versões em que o patch dos alias sets do IonMonkey (bug 1607443) está aplicado. Não há workaround oficial: o próprio advisory da Gentoo confirma "não há workaround conhecido no momento", e desabilitar o JIT completamente (quando possível via configuração interna do motor) teria custo de desempenho alto e não é uma mitigação suportada nem documentada pela Mozilla para este caso específico.
Distribuições Linux empacotaram a correção em conjunto com outras CVEs do mesmo ciclo: Gentoo corrigiu em www-client/firefox e firefox-bin >= 68.6.0; Ubuntu corrigiu o Thunderbird na versão 1:68.7.0+build1-0ubuntu0.16.04.2 (USN-4335-1). Qualquer build de Firefox/Firefox ESR/Thunderbird anterior às versões da Mozilla listadas acima permanece vulnerável, independente da distro.
Como a falha já está corrigida desde 2020 e amplamente documentada, o risco residual hoje é limitado a instalações legadas não atualizadas (sistemas embarcados, appliances, imagens desatualizadas). Não existe mitigação por configuração de rede ou WAF, pois a exploração ocorre inteiramente no cliente, dentro do motor JS.
Cómo detectar
Não há assinatura de rede confiável: a exploração ocorre inteiramente no lado do cliente, dentro do processo de conteúdo do motor JavaScript, via JS que força compilação Ion de operações sobre arrays — código que, superficialmente, não difere de JavaScript legítimo até o momento da falha de tipo. Os testcases anexados ao bug 1607443 (incluindo o PoC original entregue pela Qihoo 360) mostram os padrões de aquecimento de loop e manipulação de array usados, mas não servem como assinatura genérica.
Em ambientes corporativos, os sinais mais realistas são indiretos: crashes ou reinícios anômalos do processo de conteúdo do Firefox/Thunderbird, alertas de EDR sobre comportamento pós-exploração (execução de código a partir do processo do navegador/cliente de e-mail), ou logs de proxy/PAC incomuns caso o vetor via script PAC relatado pelo descobridor seja confirmado no ambiente. Para exploração já ocorrida antes do patch, a única defesa real é confirmar a versão instalada — não é possível detectar retroativamente com confiança apenas por logs.