← volver
CVE-2019-17026highbajo ataqueCWE-843

CVE-2019-17026

85Vexday Risk Score

Prioriza la corrección. Ella está bajo explotación confirmada por CISA y tiene prueba de concepto pública.

ssvc Actcvss 8.8epss 44%
de la publicación al arma178 días
Publicada en NVD2 mar
1ª PoC+178d
CISA KEV+611d
probabilidad de explotación
44%top 1% de las CVE
explotación observada
CISA + VulnCheck
6 exploit(s) público(s)
Acción exigida por CISAplazo federal: 2022-05-03

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

Afectadas
Firefox < 72.0.1; Firefox ESR < 68.4.1; Thunderbird < 68.4.1
Corregidas en
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)

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.

Investigado y redactado con IA a partir del advisory del fabricante y análisis públicos, con las fuentes citadas. Verifica siempre la versión corregida en el advisory oficial antes de actuar.
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 evaluar la exposición de sistemas que controlas o estás autorizado a probar. Prueba solo con autorización.