
Abuso di Some Service DCOM Object e SeImpersonatePrivilege.
DCOM usa RPC_C_IMP_LEVEL_IDENTIFY come livello di impersonificazione predefinito, per la chiamata IUnknown in uscita predefinita, vedere https://learn.microsoft.com/en-us/windows/win32/com/com-security-defaults. Naturalmente, il server COM può sovrascriverlo chiamando esplicitamente CoInitializeSecurity.
Sappiamo che la maggior parte dei servizi Windows registra il proprio server DCOM per fornire funzionalità; Shared Process Service è ospitato da svchost e legge il livello di impersonificazione predefinito dal registro.
Se passiamo un oggetto IUnknown dannoso come parametro in una chiamata DCOM, il processo di servizio chiamerà IRemUnknown::RemQueryInterface/RemRelease/RemAddref sul ProxyObject; a questo punto possiamo ottenere un token SecurityImpersonation tramite CoImpersonateClient perché in quel momento siamo un DCOM Server.
Di seguito sono riportate le impostazioni esplicite di ImpersonationLevel come RPC_C_IMP_LEVEL_IMPERSONATE nell'installazione predefinita:
#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
I servizi sono PrinterNotify e McpManagementService, in esecuzione come SYSTEM.
Nota: questo codice supporta solo x64 e NetFX 4.x, ma puoi apportare piccole modifiche per la compatibilità con FX2.0/x86 (hook della vtbl di IUnknown, vedi McpManagementPotato).
csc /unsafe PrinterNotifyPotato.cs
csc /unsafe McpManagementPotato.cs
McpManagementPotato/PrinterNotifyPotato <command>


Grazie a UnmarshalPwn!
(e voglio bene al mio gatto, Vanilla, qualcuno può trasformarlo in una nekogirl?)