
Abuso del objeto DCOM de Some Service y del privilegio SeImpersonatePrivilege.
DCOM usa RPC_C_IMP_LEVEL_IDENTIFY como nivel de suplantación predeterminado, para la llamada IUnknown saliente predeterminada, ver https://learn.microsoft.com/en-us/windows/win32/com/com-security-defaults. Por supuesto, el servidor COM puede anularlo llamando explícitamente a CoInitializeSecurity.
Sabemos que la mayoría de los servicios de Windows registran su servidor DCOM para proporcionar características; Shared Process Service está hospedado por svchost, y lee el nivel de suplantación predeterminado del registro.
Si pasamos un objeto IUnknown malicioso como parámetro en alguna llamada DCOM, el proceso de servicio llamará a IRemUnknown::RemQueryInterface/RemRelease/RemAddref sobre el ProxyObject; ahora podemos obtener un token SecurityImpersonation mediante CoImpersonateClient, porque en este momento somos el DCOM Server.
A continuación se muestra el ajuste explícito de ImpersonationLevel como RPC_C_IMP_LEVEL_IMPERSONATE en la instalación predeterminada:
#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
Los servicios son PrinterNotify y McpManagementService, y se ejecutan como SYSTEM.
Nota: este código solo es compatible con x64 y NetFX 4.x, pero puedes hacer un pequeño cambio para compatibilidad con FX2.0/x86 (hook de la vtbl de IUnknown, ver McpManagementPotato).
csc /unsafe PrinterNotifyPotato.cs
csc /unsafe McpManagementPotato.cs
McpManagementPotato/PrinterNotifyPotato <command>


Gracias a UnmarshalPwn!
(y amo a mi gato, Vanilla, ¿alguien puede convertirlo en nekogirl?)