CVE-2017-8540
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
CVE-2017-8540 é uma falha de use-after-free (CWE-119) no interpretador JavaScript embutido no Microsoft Malware Protection Engine (MsMpEng) — o motor que dá vida ao Windows Defender, Forefront e ao scanner de anexos do Exchange Server. Um arquivo malicioso, ao ser varrido automaticamente pelo antivírus, pode corromper memória do processo de scan, que normalmente roda com privilégios elevados (SYSTEM). Está no catálogo KEV da CISA como exploração confirmada, mas a PoC pública documentada por pesquisadores do Google Project Zero demonstra apenas crash (negação de serviço), não execução de código — a classificação de 'RCE' vem do próprio boletim da Microsoft, não de um exploit público funcional.
Detalhamento técnico
O MsMpEng inclui um mini-motor de JavaScript usado para desofuscar e analisar scripts embutidos em arquivos (uma técnica comum de evasão de malware). Esse motor implementa coleta de lixo (garbage collection) do tipo mark-and-sweep para gerenciar objetos JS, mas a pilha nativa (C++) não é marcada — código nativo que mantém ponteiros para JsObject precisa garantir manualmente que um GC não ocorra enquanto o ponteiro está em uso.
O motor expõe callbacks de script (toString, valueOf) que são invocados por código nativo via JsTree::run, passando uma flag que bloqueia o GC durante a execução do callback. O problema é que essa flag é local ao frame do JsTree, não global: se dentro do callback for possível disparar outro JsTree::run com a flag de bloqueio desligada — o que ocorre naturalmente via eval() — um GC global acontece mesmo estando 'dentro' de um contexto supostamente protegido.
A implementação de String.prototype.slice ilustra a condição de corrida: o código nativo obtém um ponteiro para a JsString resultante de toString() no objeto 'this', sem essa string estar raiz do GC (rooted), e então chama toIntegerThrows() no argumento, que por sua vez invoca valueOf() do atacante. Se esse valueOf() executa um eval() que força um GC, a string 'this_str' — não referenciada por nenhuma raiz alcançável — é liberada. O código nativo continua e chama um método virtual sobre o objeto já desalocado, gerando o use-after-free.
O atacante controla o conteúdo do arquivo escaneado (o script JS embutido nele) e, por consequência, o timing e o conteúdo dos objetos liberados prematuramente — a superfície clássica para transformar um UAF em corrupção de heap controlada.
Como é explorada
O vetor de entrega é qualquer arquivo que chegue ao motor de varredura: anexo de e-mail, download, arquivo em compartilhamento de rede ou anexo processado pelo Exchange. Não é necessária interação explícita do usuário além de o arquivo ser exposto à proteção em tempo real — o próprio ato de o Defender/Forefront/Exchange escanear o arquivo dispara a execução do script JS malicioso embutido nele. O vetor CVSS (AV:L/UI:R) reflete que a falha é processada localmente pelo motor de scan e que o NVD considera necessária alguma forma de entrega/interação para que o arquivo chegue ao scanner — mas, na prática, isso cobre e-mail e navegação web comuns, tornando o alcance efetivamente remoto e amplo.
A PoC publicada pelo Google Project Zero (Natalie Silvanovich) e catalogada no Exploit-DB (EDB-ID 42088) demonstra o use-after-free através de um script minimalista que define toString/valueOf customizados e força um eval() disparando GC no momento exato em que String.prototype.slice mantém um ponteiro não protegido. O resultado documentado é um crash do MsMpEng.exe (negação de serviço); a Microsoft classificou o boletim como potencial execução remota de código, mas não há exploit público demonstrando escalonamento de UAF para RCE completo.
A presença no catálogo KEV da CISA confirma exploração observada no mundo real, ainda que a CISA não detalhe se as campanhas exploraram esta variante especificamente para RCE ou para DoS. Como MsMpEng roda com altos privilégios e processa arquivos não confiáveis de forma automática e silenciosa, mesmo o cenário de DoS já é operacionalmente relevante (crash do serviço de proteção em tempo real de toda a frota).
Versões
Como se proteger
A correção é uma atualização do próprio Malware Protection Engine, distribuída automaticamente via Windows Update / Microsoft Update, independente de patch de sistema operacional — na maioria dos ambientes a atualização se propaga em poucos dias sem ação manual, desde que o Windows Update e a atualização automática de definições/engine estejam habilitados. As fontes consultadas não trazem o número de build exato da versão corrigida do engine; para confirmar a versão em execução, use a tela 'Sobre' do Windows Defender ou o cmdlet Get-MpComputerStatus e compare com o histórico de atualizações do engine documentado pela Microsoft.
Não há paliativo de configuração real: desativar a varredura de scripts ou o motor JS do MsMpEng não é uma opção suportada e reduziria drasticamente a capacidade de detecção do produto, criando um risco maior que o da própria CVE. Isolar o serviço de antivírus do restante do sistema (sandboxing, execução com privilégios reduzidos) é decisão de arquitetura da própria Microsoft, não algo configurável pelo administrador.
O mito a descartar: como o vetor CVSS mostra AV:L, algumas equipes assumem que a exploração exige acesso local prévio à máquina. Isso não corresponde ao mecanismo real — o arquivo malicioso chega por e-mail, download ou rede, e é o próprio scanner que processa o conteúdo automaticamente. Tratar esta CVE como 'baixo risco por exigir acesso local' é o erro de priorização mais comum aqui.
Como detectar
O sinal mais confiável é o crash do processo MsMpEng.exe ('Antimalware Service Executable') coincidindo com a varredura de um arquivo específico — visível como erro de aplicação no Event Viewer do Windows ou nos logs operacionais do Windows Defender, geralmente próximo ao momento de recebimento de um e-mail, download ou acesso a um compartilhamento contendo o arquivo suspeito. Não existe assinatura de rede confiável para esta falha: a exploração ocorre no motor de scan local, após o arquivo já ter sido entregue por qualquer canal, então IDS/IPS de perímetro não têm visibilidade sobre o disparo do bug em si — o controle deve focar em telemetria de estabilidade do próprio serviço de antivírus e correlação com o arquivo que estava sendo processado no momento do crash.