← back
CVE-2017-0213highunder attackransomware

CVE-2017-0213

95Vexday Risk Score

Prioritize patching. It under exploitation confirmed by CISA, has a public proof of concept and 2 threat group(s) use it.

ssvc Actcvss 7.3epss 84%
from disclosure to weapon5 days
Published on NVDMay 12
1st PoC+5d
CISA KEV+1781d
exploitation probability
84%top 1% of all CVEs
observed exploitation
yesCISA + VulnCheck
2 group(s)13 public exploit(s)
Who exploits it2

Groups known to exploit this vulnerability (MITRE ATT&CK attribution).

Action required by CISAfederal deadline: 2022-04-18

Apply updates per vendor instructions.

Summary

Falha de type confusion (CWE-843) no marshaler COM do Windows, especificamente na rotina que reconstrói interfaces remotas via RemQueryInterface2 (RQI2). Um atacante com acesso local e privilégios baixos pode enganar um processo mais privilegiado — como um serviço broker ou o BITS — para que ele use um ponteiro de interface do tipo errado, abrindo caminho para elevação de privilégio local. Descoberta pelo Google Project Zero, está no catálogo KEV da CISA desde 2022 e tem PoC público desde o dia da divulgação, mas exige engenharia de exploração não trivial — não é um bug 'run and win'.

Technical detail

O bug está em CStdMarshal::Finish_RemQIAndUnmarshal2. Quando um objeto COM fora de processo (OOP) é consultado via QueryInterface e o proxy padrão decide usar RemQueryInterface2 em vez de RemQueryInterface, o resultado vem como uma estrutura MInterfacePointer (um OBJREF completo) em vez do STDOBJREF simples usado por RQI clássico. CStdMarshal::UnmarshalInterface desempacota esse OBJREF e cria um proxy local, mas usa o IID contido no próprio stream do OBJREF — não o IID que o chamador originalmente pediu. Não há verificação cruzada entre o IID solicitado e o IID efetivamente materializado.

Resultado: o chamador recebe um objeto de um tipo diferente do que esperava, mas continua chamando métodos da interface original nele. Isso é type confusion clássico — chamadas em offsets de vtable que não correspondem à implementação real do objeto.

O uso de RQI2 é ativado por qualquer objeto que se registre com o Aggregate Standard Marshaler (usado para handlers in-process com marshaling customizado por interface). Como esse marshaler é um componente central e confiável do COM, ele não é bloqueado por configurações como EOAC_NO_CUSTOM_MARSHAL, que normalmente restringiriam marshaling customizado não confiável.

O atacante controla o conteúdo do OBJREF retornado — inclusive o IID declarado nele — bastando expor um objeto marshaled com esse marshaler para um chamador mais privilegiado que faça QueryInterface sobre ele.

How it’s exploited

Pré-requisito real: acesso local autenticado (mesmo com privilégios baixos) e execução de uma aplicação especialmente criada — não há vetor remoto documentado pelo fornecedor, e a CVSS reflete isso (AV:L, PR:L, UI:R). O padrão de exploração exige que um processo mais privilegiado — serviço do sistema ou broker de sandbox — chame QueryInterface em um objeto COM controlado pelo atacante que esteja marcado para usar o Aggregate Standard Marshaler, forçando o uso de RQI2.

O PoC público (Google Project Zero, replicado no Exploit-DB) demonstra a cadeia completa usando o serviço BITS: o atacante registra um callback via SetNotifyInterface; o BITS impersona o usuário chamador antes de fazer QueryInterface nesse callback; o atacante devolve um OBJREF cujo IID aponta para uma interface Automation (PSOAInterface/PSDispatch) em vez da interface BITS esperada. Isso aciona o mecanismo de auto-proxy do OLEAUT32, que carrega uma type library (TLB) para construir o proxy — e como o BITS está impersonando o atacante nesse momento, um redirecionamento de drive controlado pelo atacante pode fazer o serviço carregar um arquivo TLB arbitrário em vez do legítimo. O formato TLB é conhecidamente inseguro e permite controle de fluxo de execução no contexto do serviço privilegiado.

A exploração em memória (corrupção direta via type confusion) é dificultada por CFG em sistemas modernos; o caminho documentado é lógico, abusando de comportamento de projeto do OLE Automation, não de corrupção de memória bruta. Isso eleva a barreira de entrada — não é um exploit trivial de reproduzir sem entender o subsistema COM — mas a presença no KEV da CISA confirma exploração documentada, e por isso a correção é tratada como prioritária.

Versions

Affected
Windows Server 2008 SP2 e R2 SP1; Windows 7 SP1; Windows 8.1; Windows Server 2012 (Gold) e R2; Windows RT 8.1; Windows 10 Gold, 1511, 1607 e 1703; Windows Server 2016 — conforme descrição oficial da Microsoft/MSRC.
Fixed in
Corrigida pela Microsoft nas atualizações de segurança de maio de 2017 (mesmo ciclo da divulgação pública). O KB específico varia por versão/edição do Windows; não foi possível confirmar os números exatos nas fontes consultadas — consulte o Security Update Guide da Microsoft para o CVE-2017-0213 filtrando pela versão exata do sistema.

How to protect

A correção veio da Microsoft no boletim de segurança de maio de 2017 (mesmo ciclo de divulgação da CVE). Não há nas fontes consultadas o número exato de KB por versão de Windows — para aplicar o patch correto, use o Security Update Guide da própria Microsoft filtrando por CVE-2017-0213 e pela versão/edição exata do sistema (Windows 7 SP1, 8.1, 10 Gold/1511/1607/1703, Server 2008 SP2/R2 SP1, Server 2012/R2, Server 2016), já que os pacotes cumulativos variam por branch.

Sistemas fora de suporte (Windows 7, Server 2008/2012 sem ESU vigente) que não puderem ser atualizados não têm workaround documentado nas fontes analisadas que neutralize a falha em si — a única mitigação estrutural real é reduzir a superfície de escalonamento: restringir quem pode executar código arbitrário localmente, aplicar controle de aplicação (allowlisting) para impedir a execução do binário de exploração, e monitorar/limitar serviços que impersonam usuários ao processar callbacks COM (como BITS). Segmentação de rede e firewall não mitigam esta falha, pois o vetor é estritamente local.

Não existe mitigação via GPO ou flag de registro documentada para esta CVE nas fontes consultadas — não trate 'desabilitar BITS' como correção definitiva, já que o mecanismo de type confusion no marshaler COM é genérico e pode, em tese, ser acionado por outros consumidores de interfaces COM com marshaling customizado, não apenas pelo BITS usado no PoC.

How to detect

Não há assinatura de rede aplicável, pois a exploração é local e ocorre inteiramente via chamadas COM/RPC internas ao host. Sinais possíveis em endpoint: criação incomum de mapeamentos de dispositivo/drive (DefineDosDevice) por processo de usuário pouco antes de atividade do serviço BITS (qmgr.dll/svchost.exe) tentando carregar arquivos de type library (.tlb) em caminhos não padrão; chamadas SetNotifyInterface para BITS seguidas de acesso a caminhos de sistema redirecionados. Como não há PoC de exploração remota nem indicadores de rede publicados, e o comportamento imita uso legítimo de APIs COM, a detecção confiável depende de telemetria de endpoint granular (ETW, Sysmon com regras específicas para criação de objetos de dispositivo e carregamento de DLL/TLB fora de caminhos esperados) — não existe um IOC único e confiável documentado publicamente para esta CVE.

Researched and written with AI from the vendor advisory and public analysis, with the sources above. Always confirm the fixed version in the official advisory before acting.
Windows COM Aggregate Marshaler in Microsoft Windows Server 2008 SP2 and R2 SP1, Windows 7 SP1, Windows 8.1, Windows Server 2012 Gold and R2, Windows RT 8.1, Windows 10 Gold, 1511, 1607, and 1703, and Windows Server 2016 allows an elevation privilege vulnerability when an attacker runs a specially crafted application, aka "Windows COM Elevation of Privilege Vulnerability". This CVE ID is unique from CVE-2017-0214.
CVSS:3.1/AV:L/AC:L/PR:L/UI:R/S:U/C:H/I:H/A:H
⚠ Public resources, to assess the exposure of systems you control or are authorized to test. Test only with authorization.