
Abuso de objetos DCOM de alguns serviços e do privilégio SeImpersonatePrivilege.
O DCOM usa RPC_C_IMP_LEVEL_IDENTIFY como nível de representação padrão para a chamada de saída padrão do IUnknown, veja https://learn.microsoft.com/en-us/windows/win32/com/com-security-defaults. Naturalmente, o COM Server pode substituir isso chamando CoInitializeSecurity explicitamente.
Sabemos que a maioria dos serviços do Windows registra seus DCOM Servers para fornecer recursos. O Shared Process Service é hospedado pelo svchost e lê o nível de representação padrão do registro.
Se passarmos um objeto IUnknown malicioso como parâmetro em alguma chamada DCOM, o processo de serviço chamará IRemUnknown::RemQueryInterface/RemRelease/RemAddref no ProxyObject; então podemos obter um token SecurityImpersonation por meio de CoImpersonateClient, pois somos um DCOM Server neste momento.
A seguir está a configuração explícita de ImpersonationLevel como RPC_C_IMP_LEVEL_IMPERSONATE na instalação padrão:
#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
Os serviços são PrinterNotify e McpManagementService, executando como SYSTEM.
Observe que este código suporta apenas x64 e NetFX 4.x, mas você pode fazer uma pequena alteração para compatibilidade com FX2.0/x86(hook da vtbl de IUnknown, veja McpManagementPotato).
csc /unsafe PrinterNotifyPotato.cs
csc /unsafe McpManagementPotato.cs
McpManagementPotato/PrinterNotifyPotato <command>


Obrigado a UnmarshalPwn!
(e eu amo meu gato, Vanilla; alguém pode transformá-lo em uma nekogirl?)