
Abus de l'objet DCOM de Some Service et du privilège SeImpersonatePrivilege.
DCOM utilise RPC_C_IMP_LEVEL_IDENTIFY comme niveau d'emprunt d'identité par défaut, pour l'appel IUnknown sortant par défaut, voir https://learn.microsoft.com/en-us/windows/win32/com/com-security-defaults. Bien sûr, le serveur COM peut le remplacer en appelant explicitement CoInitializeSecurity.
Nous savons que la plupart des services Windows enregistrent leur serveur DCOM pour fournir des fonctionnalités : le service de processus partagé est hébergé par svchost et lit le niveau d'emprunt d'identité par défaut dans le registre.
Si nous passons un objet IUnknown malveillant comme paramètre lors d'un appel DCOM, le processus du service appellera IRemUnknown::RemQueryInterface/RemRelease/RemAddref sur le ProxyObject ; nous pouvons alors obtenir un jeton SecurityImpersonation via CoImpersonateClient, car nous sommes DCOM Server à ce moment-là.
Voici le paramètre explicite ImpersonationLevel défini comme RPC_C_IMP_LEVEL_IMPERSONATE dans l'installation par défaut :
#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
Les services sont PrinterNotify et McpManagementService, s'exécutant en tant que SYSTEM.
Notez que ce code ne prend en charge que x64 et NetFX 4.x, mais vous pouvez apporter une petite modification pour la compatibilité FX2.0/x86 (hook de la vtbl d'IUnknown, voir McpManagementPotato).
csc /unsafe PrinterNotifyPotato.cs
csc /unsafe McpManagementPotato.cs
McpManagementPotato/PrinterNotifyPotato <command>


Merci pour UnmarshalPwn!
(et aimez mon chat, Vanilla, quelqu'un peut-il en faire une nekogirl?)