CVE-2018-8298: falha de alta gravidade em Microsoft ChakraCore
Publicada em · Atualizada em
Aviso por e-mail quando ela entrar no KEV, ganhar PoC pública ou subir de nota.
Priorize a correção. Ela está sob exploração confirmada pelo CISA e tem prova de conceito pública.
Apply updates per vendor instructions.
Resumo
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.
Detalhamento 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.
Como é explorada
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.
Versões
Como se proteger
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.
Como 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.
No mesmo produto, das mais perigosas para as menos.