← back
CVE-2018-8298highunder attackCWE-843

CVE-2018-8298

93Vexday Risk Score

Prioritize patching. It under exploitation confirmed by CISA and has a public proof of concept.

ssvc Actcvss 7.5epss 75%
from disclosure to weapon37 days
Published on NVDJul 11
1st PoC+37d
CISA KEV+1331d
exploitation probability
75%top 1% of all CVEs
observed exploitation
yesCISA + VulnCheck
2 public exploit(s)
Action required by CISAfederal deadline: 2022-03-17

Apply updates per vendor instructions.

Summary

Falha de type confusion (CWE-843) no motor de script ChakraCore, usado pelo Microsoft Edge legado (EdgeHTML) e por outros produtos que embarcam o engine. A implementação baseada em ICU dos objetos Intl.NumberFormat/Intl.DateTimeFormat não verifica se o objeto já foi inicializado, permitindo reinicializá-lo com um tipo interno diferente do esperado — o que pode ser escalado para corrupção de memória e execução remota de código. Está no catálogo KEV da CISA com exploração confirmada, mas a exigência de interação do usuário e a alta complexidade de ataque (AC:H) limitam o alcance prático fora de um cenário de navegação web direcionada.

Technical detail

O ChakraCore mantém duas implementações paralelas dos inicializadores de Intl.NumberFormat e Intl.DateTimeFormat em Intl.js: uma para a API de globalização legada do Windows (WinGlob) e outra baseada em ICU, adotada em builds mais recentes do Edge (o pesquisador testou em Windows Insider Preview, Edge 42.17672.1000.0 / EdgeHTML 17.17672). A versão WinGlob verifica se o objeto alvo já foi inicializado antes de prosseguir; a versão ICU não faz essa checagem.

Isso permite que um script chame Intl.NumberFormat.apply(objeto) e, em seguida, Intl.DateTimeFormat.apply(objeto) sobre o mesmo objeto JavaScript. O engine trata internamente esse objeto como tendo um layout/tipo diferente do que ele realmente tem — a essência de um type confusion. Quando um método subsequente (como formatToParts) opera sobre esse objeto assumindo o tipo incorreto, o engine acessa campos internos fora do que foi alocado, abrindo caminho para corrupção de memória controlável pelo atacante.

O atacante controla o conteúdo do objeto JavaScript e a sequência de chamadas Intl aplicadas a ele, mas não tem controle direto sobre endereços de memória — a exploração para RCE completo exige heap grooming adicional e, tipicamente, encadeamento com falhas de leitura/escrita para construir controle de fluxo, algo que o PoC público não demonstra.

How it’s exploited

O vetor é conteúdo web ou documento malicioso processado por um motor baseado em ChakraCore — na prática, o usuário precisa abrir uma página ou arquivo malicioso no Microsoft Edge legado (EdgeHTML) ou em outra aplicação que embarque o ChakraCore. O vetor CVSS confirma isso: UI:R (interação do usuário obrigatória) e AC:H (complexidade de ataque alta), ou seja, não é uma falha explorável remotamente sem que a vítima clique em algo ou carregue uma página.

A prova de conceito publicada (Google Security Research, EDB-ID 45217) é mínima: três linhas de JavaScript que aplicam Intl.NumberFormat e depois Intl.DateTimeFormat sobre o mesmo objeto e chamam formatToParts. Esse PoC demonstra o crash/type confusion, classificado como 'dos' no Exploit-DB — não é um exploit de RCE completo e funcional publicamente disponível.

A CISA lista a CVE no catálogo KEV com evidência de exploração ativa, adicionada em março de 2022 (quase quatro anos após a publicação original), sem associação confirmada a campanhas de ransomware. Isso sugere que a arma de RCE completa circulou de forma mais restrita do que o PoC de crash, provavelmente como parte de cadeias de exploração de navegador mais elaboradas.

Versions

Affected
Microsoft ChakraCore / motor de script usado no Microsoft Edge legado (EdgeHTML) que utiliza a implementação baseada em ICU dos objetos Intl. O pesquisador confirmou o problema em build de Windows Insider Preview, Microsoft Edge 42.17672.1000.0 / EdgeHTML 17.17672. As fontes disponíveis não detalham a faixa completa de versões/builds afetadas fora desse teste.
Fixed in
Corrigido pela atualização de segurança da Microsoft de julho de 2018 (mesmo lote de CVE-2018-8242, 8283, 8287, 8288, 8291, 8296). Número de build/versão exato de correção do ChakraCore ou do EdgeHTML não está detalhado nas fontes disponíveis; verifique o boletim MSRC oficial para o identificador de atualização aplicável ao seu Windows/Edge.

How to protect

A correção oficial veio via boletim de segurança da Microsoft (MSRC) publicado em julho de 2018, junto com outras CVEs do ChakraCore do mesmo ciclo (CVE-2018-8242, 8283, 8287, 8288, 8291, 8296). As fontes disponíveis não especificam o número de build ou versão exata de correção do ChakraCore/EdgeHTML — aplique as atualizações do Windows/Edge do Patch Tuesday de julho de 2018 e posteriores, conforme indicado pelo MSRC.

Se você mantém uma instância standalone do ChakraCore (por exemplo, via Node-ChakraCore ou outro embedding), atualize para um commit/release posterior à correção do arquivo lib/Runtime/Library/InJavascript/Intl.js, que adicionou ao inicializador ICU a mesma verificação de estado já presente no inicializador WinGlob. O commit vulnerável identificado no PoC é bc2e55a7d80338ee4c9c63b76893f6d816dfe70b; verifique se seu branch está acima da correção subsequente a essa revisão.

O Microsoft Edge atual, baseado em Chromium, não usa ChakraCore — a exposição é essencially histórica, restrita ao EdgeHTML legado (removido do Windows 10/11 modernos) e a aplicações de terceiros que ainda embarcam ChakraCore diretamente. Desabilitar JavaScript não é uma mitigação realista para navegação normal; a única mitigação eficaz é atualizar o engine ou remover/substituir o componente ChakraCore de aplicações embarcadas.

How to detect

Não há assinatura de rede confiável para essa falha — a exploração ocorre inteiramente no processamento local de JavaScript pelo engine, sem tráfego de rede distintivo. O sinal mais concreto é no nível de script: presença de código que aplica Intl.NumberFormat.apply(obj) seguido por Intl.DateTimeFormat.apply(obj) sobre o mesmo objeto, e em seguida chama métodos como formatToParts sobre ele — esse padrão específico (reuso do mesmo objeto entre os dois construtores Intl) é atípico em código legítimo e pode ser usado como heurística em logging de script (AMSI, script block logging, ferramentas de análise de conteúdo web) ou em análise estática de amostras JavaScript suspeitas.

Researched and written with AI from the vendor advisory and public analysis, with the sources above. Always confirm the fixed version in the official advisory before acting.
A remote code execution vulnerability exists in the way that the ChakraCore scripting engine handles objects in memory, aka "Scripting Engine Memory Corruption Vulnerability." This affects ChakraCore. This CVE ID is unique from CVE-2018-8242, CVE-2018-8283, CVE-2018-8287, CVE-2018-8288, CVE-2018-8291, CVE-2018-8296.
CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:H
Affected products
Microsoft · ChakraCore
⚠ Public resources, to assess the exposure of systems you control or are authorized to test. Test only with authorization.