← voltar
CVE-2018-8174highsob ataqueransomwareCWE-787

CVE-2018-8174

98Vexday Risk Score

Priorize a correção. Ela está sob exploração confirmada pelo CISA, tem prova de conceito pública e 2 grupo(s) de ameaça a utilizam.

ssvc Actcvss 7.5epss 88%
da publicação à arma0 dias
Publicada no NVD9 de mai.
1ª PoC1 de jan.
CISA KEV+1378d
probabilidade de exploração
88%top 1% das CVEs
exploração observada
simCISA + VulnCheck
2 grupo(s)27 exploit(s) público(s)
Quem explora2

Grupos conhecidos por explorar esta vulnerabilidade (atribuição MITRE ATT&CK).

Ação exigida pela CISAprazo federal: 2022-08-15

Apply updates per vendor instructions.

Resumo

Falha de use-after-free no motor VBScript do Windows, explorável para execução remota de código quando a vítima abre um documento Office ou visualiza uma página/arquivo HTA que aciona o VBScript engine — mesmo em sistemas onde o Internet Explorer não é o navegador padrão, porque o Office e o Windows chamam o componente OLE/mshtml/vbscript.dll independentemente disso. Foi explorada como 0-day antes da correção (detectada por Kaspersky e Qihoo 360) e está no catálogo KEV da CISA, o que confirma exploração ativa; o CVSS 7.5 com AC:H reflete que a exploração exige engenharia — a vítima precisa abrir um arquivo malicioso — mas o impacto final é RCE completo com os privilégios do usuário.

Detalhamento técnico

A vulnerabilidade (CWE-787/UAF, listada pela CISA como out-of-bounds write) está na forma como o VBScriptClass::Release trata objetos que implementam o evento não-documentado Class_Terminate. Quando um array contendo um objeto é apagado com Erase, o VBScript decrementa a contagem de referências e, se ela chega a zero, chama Class_Terminate — mas esse método pode, dentro de si, criar uma nova referência ao próprio objeto que está sendo destruído (ex.: atribuindo-o a outra variável). VBScriptClass::Release não reavalia a contagem de referências após a execução de Class_Terminate, então o objeto é destruído mesmo com uma referência 'viva' pendente em outra variável — essa variável passa a apontar para memória heap já liberada (dangling pointer).

Como é explorada

A partir do dangling pointer, um atacante controla o conteúdo realocado naquele bloco de heap e consegue forjar uma estrutura VARIANT arbitrária, o que dá controle sobre tipo e ponteiro de dados — base clássica para leitura/escrita arbitrária e, em seguida, execução de shellcode. O PoC público (exploit-db 44741) demonstra a cadeia completa em uma página HTML/VBScript carregada pelo Internet Explorer 11 em Windows 7: usa a UAF para vazar endereços de módulos, resolve GetProcAddress manualmente via PE, localiza ntdll/kernel32 e chama VirtualProtect para tornar shellcode executável, contornando Control Flow Guard via manipulação de contexto de NtContinue.

O vetor real de exploração relatado por Kaspersky e Qihoo 360 (referenciado no blog da 0patch) foi um documento Office com objeto OLE embutido que aponta para um recurso remoto carregado pelo motor do IE, técnica que dispensa o IE como navegador padrão. Pré-requisito real é interação do usuário (abrir o arquivo/documento) — não há exploração sem clique — mas não exige autenticação nem configuração incomum: o VBScript engine estava habilitado por padrão em todas as versões de Windows listadas na época.

Versões

Afetadas
Windows 7, Windows Server 2008, Windows Server 2008 R2, Windows Server 2012, Windows Server 2012 R2, Windows RT 8.1, Windows 8.1, Windows 10, Windows Server 2016 e Windows 10 Servers — versões sem a atualização cumulativa de maio de 2018 conforme listado pela Microsoft.
Corrigidas em
Atualização cumulativa de maio de 2018 (Patch Tuesday) para cada versão de Windows afetada, conforme o advisory da Microsoft (MSRC). Números de KB específicos por versão não constam nas fontes consultadas.

Como se proteger

A correção oficial veio no Patch Tuesday de maio de 2018 (atualização cumulativa da respectiva versão de Windows); aplicar essa atualização é a mitigação correta e suficiente segundo o MSRC. Não há workaround de configuração documentado nas fontes consultadas além do patch oficial — a suposta alternativa de 'desregistrar vbscript.dll' não está confirmada nas fontes aqui usadas e não deve ser tratada como equivalente ao patch sem validação própria do ambiente.

Vale notar que a atualização de maio de 2018 quebrou rede/conectividade em alguns sistemas Windows 7/Server 2008, levando administradores a evitar aplicá-la; a 0patch lançou um micropatch de terceiros (não oficial) para oleaut32.dll que reproduz a correção da Microsoft com uma única instrução (mov word [rbx], 0, zerando o campo vt do VARIANT) para quem não conseguia aplicar o KB oficial — isso é um controle compensatório de terceiro, não substitui o patch da Microsoft e deve ser avaliado com cautela por não vir do fornecedor.

Como detectar

Em nível de rede/endpoint, procure documentos Office (RTF/DOC/DOCX) com objetos OLE embutidos que referenciam recursos HTA ou scriptlets remotos — esse foi o vetor observado nas campanhas detectadas por Kaspersky e Qihoo 360 antes da correção. Em logs do Internet Explorer/wscript, crashes do processo wscript.exe ou iexplore.exe dentro de oleaut32.dll (função VariantClear) no momento do processamento de um script VBScript são indício de tentativa de exploração ou de execução do PoC. Não há assinatura de rede genérica confiável, já que o payload varia por campanha; a detecção mais eficaz continua sendo comportamental (carregamento inesperado do motor VBScript por processos Office) e a verificação de patch nos hosts.

Pesquisado e redigido com IA a partir do advisory do fornecedor e de análises públicas, com as fontes acima. Confira sempre a versão corrigida no advisory oficial antes de agir.
A remote code execution vulnerability exists in the way that the VBScript engine handles objects in memory, aka "Windows VBScript Engine Remote Code Execution Vulnerability." This affects Windows 7, Windows Server 2012 R2, Windows RT 8.1, Windows Server 2008, Windows Server 2012, Windows 8.1, Windows Server 2016, Windows Server 2008 R2, Windows 10, Windows 10 Servers.
CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:H
PoCs públicas encontradas27
exploitdbwww.exploit-db.com/exploits/44741não verificadogithubgithub.com/0x09AL/CVE-2018-8174-msf167githubgithub.com/Yt1g3r/CVE-2018-8174_EXP139githubgithub.com/piotrflorczyk/cve-2018-8174_analysis30githubgithub.com/ruthlezs/ie11_vbscript_exploit9githubgithub.com/SyFi/CVE-2018-81746githubgithub.com/www201001/https-github.com-iBearcat-CVE-2018-8174_EXP1githubgithub.com/www201001/https-github.com-iBearcat-CVE-2018-8174_EXP.git-1githubgithub.com/delina1/CVE-2018-81740githubgithub.com/delina1/CVE-2018-8174_EXP0githubgithub.com/DarkFlameMaster-bit/CVE-2018-8174_EXP0githubgithub.com/lisinan988/CVE-2018-8174-exp0githubgithub.com/sinisterghost/https-github.com-iBearcat-CVE-2018-8174_EXP0githubgithub.com/orf53975/Rig-Exploit-for-CVE-2018-81740githubgithub.com/likekabin/CVE-2018-8174-msf0githubgithub.com/ericisnotrealname/CVE-2018-8174_EXP0vulncheckvulncheck.com/xdb/90e91d5d93e3não verificadovulncheckvulncheck.com/xdb/803f22a963canão verificadovulncheckvulncheck.com/xdb/77827f4282bfnão verificadovulncheckvulncheck.com/xdb/971c8df80200não verificadovulncheckvulncheck.com/xdb/b0607b49648fnão verificadocve_referencewww.exploit-db.com/exploits/44741/não verificadovulncheckvulncheck.com/xdb/e1a613e9e771não verificadovulncheckvulncheck.com/xdb/2799542f34cfnão verificadovulncheckvulncheck.com/xdb/acfd7fa93653não verificadovulncheckvulncheck.com/xdb/a9ca59449e4anão verificadovulncheckvulncheck.com/xdb/4a0ac8d91b55não verificado
⚠ Recursos públicos, para você avaliar a exposição de sistemas que controla ou está autorizado a testar. Teste apenas com autorização.