← volver
CVE-2016-7201highbajo ataqueCWE-843

CVE-2016-7201

93Vexday 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 80%
de la publicación al arma8 días
Publicada en NVD10 nov
1ª PoC+8d
CISA KEV+1964d
probabilidad de explotación
80%top 1% de las CVE
explotación observada
CISA + VulnCheck
6 exploit(s) público(s)
Acción exigida por CISAplazo federal: 2022-04-18

Apply updates per vendor instructions.

Resumen

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.

Detalle 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.

Cómo se explota

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.

Versiones

Afectadas
Microsoft Edge no Windows 10 (RTM/1507), Windows 10 Version 1511 e Windows 10 Version 1607, todos em 32-bit e x64, além de Windows Server 2016 x64 — conforme listado no MS16-129, antes da atualização de novembro de 2016.
Corregidas en
Corrigida pela atualização cumulativa do MS16-129 (KB3199057), com pacotes específicos por versão: KB3198585 (Windows 10 RTM), KB3198586 (Windows 10 1511) e KB3200970 (Windows 10 1607 e Windows Server 2016).

Cómo protegerse

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.

Cómo 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.

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.
The Chakra JavaScript scripting engine in Microsoft Edge allows remote attackers to execute arbitrary code or cause a denial of service (memory corruption) via a crafted web site, aka "Scripting Engine Memory Corruption Vulnerability," a different vulnerability than CVE-2016-7200, CVE-2016-7202, CVE-2016-7203, CVE-2016-7208, CVE-2016-7240, CVE-2016-7242, and CVE-2016-7243.
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
Productos afectados
n/a · n/a
⚠ Recursos públicos, para evaluar la exposición de sistemas que controlas o estás autorizado a probar. Prueba solo con autorización.