
Злоупотребление DCOM-объектом Some Service и привилегией SeImpersonatePrivilege.
DCOM использует RPC_C_IMP_LEVEL_IDENTIFY в качестве уровня олицетворения по умолчанию для стандартного исходящего вызова IUnknown, см. https://learn.microsoft.com/en-us/windows/win32/com/com-security-defaults. Разумеется, COM-сервер может переопределить это, явно вызвав CoInitializeSecurity.
Как известно, большинство служб Windows регистрируют свои DCOM-серверы для предоставления функций; службы общего процесса размещаются в svchost и считывают уровень олицетворения по умолчанию из реестра.
Если передать вредоносный объект IUnknown в качестве параметра при каком-либо вызове DCOM, процесс службы вызовет IRemUnknown::RemQueryInterface/RemRelease/RemAddref для объекта ProxyObject; теперь мы можем получить токен SecurityImpersonation с помощью CoImpersonateClient, поскольку в этот момент мы являемся DCOM-сервером.
Ниже приведена явная настройка ImpersonationLevel = RPC_C_IMP_LEVEL_IMPERSONATE в установке по умолчанию:
#after 12r2
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost\print@ImpersonationLevel
#2022 only
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost\McpManagementServiceGroup@ImpersonationLevel
Эти службы — PrinterNotify и McpManagementService, работающие от имени SYSTEM.
Обратите внимание: этот код поддерживает только x64 и NetFX 4.x, однако вы можете внести небольшие изменения для совместимости с FX2.0/x86 (хук vtbl интерфейса IUnknown, см. McpManagementPotato).
csc /unsafe PrinterNotifyPotato.cs
csc /unsafe McpManagementPotato.cs
McpManagementPotato/PrinterNotifyPotato <command>


Спасибо UnmarshalPwn!
(и люблю свою кошку Vanilla — может, кто-нибудь сделает её неко-девочкой?)