CVE-2016-7201
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 no motor JavaScript Chakra do Microsoft Edge, explorável por um site malicioso para executar código arbitrário no contexto do usuário ou travar o navegador. É crítica porque não exige nada além de o usuário visitar uma página com o Edge — sem plugins, sem configuração especial — mas seu impacto real em 2016 dependia de bypass de sandbox/ASLR combinado (tipicamente com CVE-2016-7200), o que eleva a complexidade de um exploit funcional de RCE.
Detalhamento técnico
A falha está em JavascriptArray::FillFromPrototypes, função usada por métodos de array (como shift) para copiar elementos ausentes a partir do protótipo do objeto. Ela chama JavascriptArray::ForEachOwnMissingArrayIndexOfObject passando o protótipo como parâmetro e assume que, se o protótipo for um array, ele já foi convertido para um "Var array" (array de valores JavaScript genéricos). Normalmente essa conversão acontece quando um array é atribuído como protótipo de outro objeto.
O problema é que se o protótipo do objeto for um Proxy, o handler getPrototypeOf pode retornar um array nativo de inteiros (native int array) sem passar pela conversão para Var array. O Chakra não valida esse caso e trata o array de inteiros como se fosse um Var array, o que faz com que um valor inteiro controlado pelo atacante seja interpretado diretamente como um ponteiro absoluto de memória. Isso é uma confusão de tipo clássica — o CWE associado pelo catálogo KEV é CWE-119 (restrição incorreta de operações dentro dos limites de um buffer de memória), decorrente da type confusion.
O atacante controla o conteúdo do array nativo (os valores inteiros interpretados como ponteiros) e o objeto cujo protótipo é manipulado via Proxy. Isso dá primitiva de leitura/escrita arbitrária de memória a partir de JavaScript puro, sem necessidade de outra vulnerabilidade de memória — a única condição é conseguir executar o script no contexto do Edge. A falha foi reportada pelo Google Project Zero (issue #945) e é distinta de outras sete CVEs de memória corrompida no Chakra corrigidas no mesmo boletim (CVE-2016-7200, 7202, 7203, 7208, 7240, 7242, 7243), cada uma com causa raiz própria no mesmo componente.
Como é explorada
O vetor é puramente client-side: a vítima precisa visitar uma página web maliciosa (ou comprometida, ou que aceite conteúdo/anúncios de terceiros) usando o Microsoft Edge. Não há necessidade de autenticação nem de configuração não padrão — basta o navegador vulnerável renderizar JavaScript arbitrário, daí a interação do usuário (UI:R) exigida no vetor CVSS.
Existe PoC pública mínima do Google Security Research (via exploit-db) que demonstra a type confusion de forma determinística usando um Proxy com getPrototypeOf retornando um array nativo, seguido de chamada a Array.prototype.shift em um objeto cujo protótipo foi manipulado. Essa PoC por si só demonstra a corrupção de memória/DoS, mas para RCE completo em ambiente real o pesquisador precisa encadear a primitiva de leitura/escrita com um leak de endereço confiável — o repositório theori-io combina CVE-2016-7201 com CVE-2016-7200 (vazamento de informação) para produzir execução de código (demonstrado com WinExec chamando notepad.exe), o que evidencia que a exploração prática raramente usa a falha isolada.
A CVE está no catálogo KEV da CISA, confirmando exploração ativa em algum momento, embora a adição ao catálogo tenha ocorrido em 2022 — muito depois da divulgação original de 2016 — sem detalhamento público de campanhas específicas que a usaram.
Versões
Como se proteger
A correção veio no boletim MS16-129 (8 de novembro de 2016), como atualização cumulativa do Microsoft Edge. Aplicar a atualização é a única mitigação real; não há flag de configuração ou desativação de feature do Chakra que neutralize a falha sem perder funcionalidade de JavaScript (Proxy é parte do padrão ES6 e amplamente usado).
Como paliativo até a atualização, o único controle compensatório efetivo era restringir o uso do Edge para navegação não confiável (usar outro navegador para sites não corporativos) ou bloquear execução de JavaScript em contextos de alto risco — ambos com custo funcional alto e não substituem o patch.
Como o Edge legado (EdgeHTML) e o Chakra estão fora de suporte — substituídos pelo Edge baseado em Chromium — o item prático hoje é garantir que nenhum sistema ainda dependa do Edge antigo/Windows sem atualização; produtos legados sem esse patch não devem mais estar em uso.
Como detectar
Não há assinatura de rede confiável, pois a exploração ocorre inteiramente em JavaScript executado no cliente via HTTPS/HTTP normal. Em nível de código/conteúdo, o indício é a presença de um objeto Proxy cujo handler getPrototypeOf retorna um array nativo de números, combinado com chamadas a métodos de array (como shift) em um objeto cujo __proto__ foi setado para esse Proxy — padrão visível em análise estática de JavaScript ofuscado ou em logs de crash do processo do Edge (MicrosoftEdgeCP.exe) apontando para chakra.dll. Sem telemetria endpoint detalhada (crash dumps, EDR com hooks no motor de script), não há forma prática de confirmar tentativas de exploração após o fato.