
Missbrauch des Some Service-DCOM-Objekts und von SeImpersonatePrivilege.
DCOM verwendet RPC_C_IMP_LEVEL_IDENTIFY als standardmäßige Identitätswechsel-Ebene für den standardmäßigen ausgehenden IUnknown-Aufruf; siehe https://learn.microsoft.com/en-us/windows/win32/com/com-security-defaults. Natürlich kann ein COM-Server dies überschreiben, indem er CoInitializeSecurity explizit aufruft.
Wie wir wissen, registrieren die meisten Windows-Dienste ihre DCOM-Server, um Funktionen bereitzustellen. Der Shared Process Service wird von svchost gehostet und liest die standardmäßige Identitätswechsel-Ebene aus der Registry.
Wenn wir bei einem DCOM-Aufruf ein bösartiges IUnknown-Objekt als Parameter übergeben, ruft der Dienstprozess IRemUnknown::RemQueryInterface/RemRelease/RemAddref auf dem ProxyObject auf. Nun können wir durch CoImpersonateClient ein SecurityImpersonation-Token erhalten, da wir zu diesem Zeitpunkt der DCOM Server sind.
Die folgenden expliziten Einstellungen von ImpersonationLevel als RPC_C_IMP_LEVEL_IMPERSONATE gelten in der Standardinstallation:
#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
Die Dienste sind PrinterNotify und McpManagementService und laufen als SYSTEM.
Beachten Sie: Dieser Code unterstützt nur x64 und NetFX 4.x. Mit einer kleinen Änderung können Sie jedoch die Kompatibilität für FX2.0/x86 herstellen (IUnknown-vtbl-Hook, siehe McpManagementPotato).
csc /unsafe PrinterNotifyPotato.cs
csc /unsafe McpManagementPotato.cs
McpManagementPotato/PrinterNotifyPotato <command>


Danke an UnmarshalPwn!
(und liebe Grüße an meine Katze Vanilla – kann jemand sie zum Nekogirl machen?)