
Эксплойт для уязвимости разрешений ключа реестра RpcEptMapper (Windows 7 / 2088R2 / 8 / 2012)
На Windows 7, Windows Server 2008R2, Windows 8 и Windows Server 2012 ключ реестра служб RpcEptMapper и DnsCache (только для 7/2008R2) настроен со слабыми разрешениями. Любой локальный пользователь может создать подраздел Performance, а затем использовать счетчики производительности Windows, чтобы загрузить произвольную DLL в контексте службы WMI от имени NT AUTHORITY\SYSTEM (отсюда и название инструмента).
Этот инструмент предназначен для помощи консультантам по безопасности во время тестов на проникновение. Данное программное обеспечение предоставляется как есть, и я, вероятно, не буду оказывать никакой поддержки. Тем не менее, я тщательно протестировал его на трех разных виртуальных машинах, поэтому серьезных проблем быть не должно.
Для получения дополнительной информации: https://itm4n.github.io/windows-registry-rpceptmapper-eop/
Согласно 0patch, эта уязвимость была частично исправлена в апрельском обновлении Windows 2021 года (ESU). Это означает, что машины с обновленной версией Windows 8 / Server 2012 больше не должны быть подвержены эксплуатации. Однако Windows 7 / Server 2008 R2 по-прежнему уязвимы. Вам просто нужно использовать ключ реестра Dnscache вместо RpcEptMapper. Я обновил PoC, чтобы вы могли указать его вручную с помощью опции -k.
⚠️ ПРОЧТИТЕ ЭТО ПЕРЕД ИСПОЛЬЗОВАНИЕМ ИНСТРУМЕНТА ⚠️
В процессе разработки этого инструмента я наблюдал два различных поведения:
NT AUTHORITY\SYSTEM — в этом случае эксплойт работает отлично.NT AUTHORITY\LOCAL SERVICE. В этом случае служба загружает DLL при олицетворении клиента. Оказывается, повышение привилегий на Windows 7 всё ещё возможно (из-за другой уязвимости), но стоимость реализации не оправдывает усилий.Я не могу объяснить эту разницу, потому что мой код триггера всегда был одинаковым. В любом случае, в обоих случаях дайте эксплойту выполнить свою работу, чтобы он мог всё очистить после завершения. Если эксплойт не сработает, всё ещё есть вероятность, что он сработает через несколько минут или часов.
✔️ Вот что вы должны увидеть, когда эксплойт срабатывает:
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>
❌ Вот что вы должны увидеть, когда эксплойт не срабатывает:
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>
Это решение состоит из двух проектов, которые необходимо компилировать в определенном порядке. Всё предварительно настроено, поэтому вам просто нужно выполнить следующие простые инструкции:
Release / x64Build > Build SolutionВы можете проверить справочное сообщение с помощью опции -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 :)
Следующие версии Windows уязвимы:
| Версия Windows | Уязвимые ключи реестра |
|---|---|
| Windows 7 | RpcEptMapper, DnsCache |
| Windows Server 2008R2 | RpcEptMapper, DnsCache |
| Windows 8 | RpcEptMapper |
| Windows Server 2012 | RpcEptMapper |
Насколько мне известно, эта уязвимость не будет исправлена Microsoft по некоторым причинам. Лучшее решение — по-прежнему обновление до Windows 10 / Server 2019, но если это невозможно в краткосрочной перспективе, вы можете самостоятельно исправить эту проблему, удалив разрешение CreateSubKey для NT AUTHORITY\Authenticated Users и BUILTIN\Users на следующих ключах реестра:
HKLM\SYSTEM\CurrentControlSet\Services\RpcEptMapperHKLM\SYSTEM\CurrentControlSet\Services\DnsCacheЯ создал патч для этой уязвимости в виде скрипта PowerShell: RegistryPatch.ps1. Этот скрипт удаляет право CreateSubKey на двух вышеупомянутых ключах реестра для следующих учетных записей: NT AUTHORITY\INTERACTIVE, BUILTIN\Users и/или 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
Ниже приведены шаги эксплуатации, реализованные в этом инструменте:
Temp текущего пользователя.Performance в разделе HKLM\SYSTEM\CurrentControlSet\Services\RpcEptMapper и заполняется соответствующими значениями, включая полный путь к DLL, созданной на шаге 2.Win32_Perf для запуска сбора счетчиков производительности Windows.NT AUTHORITY\SYSTEM, либо как NT AUTHORITY\LOCAL SERVICE.NT AUTHORITY\SYSTEM, ее маркер дублируется и применяется к процессу, который был изначально создан пользователем на шаге 1.