CVE-2018-8298
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 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.
Detalle técnico
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.
Cómo se explota
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.
Versiones
Cómo protegerse
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.
Cómo detectar
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.