← voltar
CVE-2019-17026highsob ataqueCWE-843

CVE-2019-17026

85Vexday Risk Score

Priorize a correção. Ela está sob exploração confirmada pelo CISA e tem prova de conceito pública.

ssvc Actcvss 8.8epss 44%
da publicação à arma178 dias
Publicada no NVD2 de mar.
1ª PoC+178d
CISA KEV+611d
probabilidade de exploração
44%top 1% das CVEs
exploração observada
simCISA + VulnCheck
6 exploit(s) público(s)
Ação exigida pela CISAprazo federal: 2022-05-03

Apply updates per vendor instructions.

Resumo

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.

Detalhamento 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.

Como é explorada

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.

Versões

Afetadas
Firefox < 72.0.1; Firefox ESR < 68.4.1; Thunderbird < 68.4.1
Corrigidas em
Firefox 72.0.1; Firefox ESR 68.4.1; Thunderbird 68.4.1 (pacotes de distribuição posteriores que incorporam esses fixes, ex.: Gentoo firefox/firefox-bin >= 68.6.0; Ubuntu thunderbird 1:68.7.0+build1-0ubuntu0.16.04.2)

Como se proteger

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.

Como 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.

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.
Incorrect alias information in IonMonkey JIT compiler for setting array elements could lead to a type confusion. We are aware of targeted attacks in the wild abusing this flaw. This vulnerability affects Firefox ESR < 68.4.1, Thunderbird < 68.4.1, and Firefox < 72.0.1.
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
⚠ Recursos públicos, para você avaliar a exposição de sistemas que controla ou está autorizado a testar. Teste apenas com autorização.