DCOM Potato

admin 2022年12月9日17:47:26评论97 views字数 1134阅读3分46秒阅读模式

去年猫猫托梦带来的洞,两个EXP原理一样,只有服务不同,所以存在一些微小的差别。

漏洞原理是McpManagement/PrinterNotify这两个服务通过svchost托管,并公开了自己的DCOM对象。svchost有个特性,在注册表(https://www.geoffchappell.com/studies/windows/win32/services/svchost/process/index.htm)可以配置自定义的ImpersonateLevel,这个值会传递给CoInitializeSecurity,从而更改所有远程IUnknown默认对外连接的模拟等级。

默认安装的情况下有且只有这两个服务配置了ImpersonateLevel,且均为RPC_C_IMP_LEVEL_IMPERSONATE

#after 12r2
HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionSvchostprint@ImpersonationLevel

#2022 only
HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionSvchostMcpManagementServiceGroup@ImpersonationLevel

所以只要自己实现一个COM对象,在IUnknown::QueryInterface/Release/Addref中直接调用CoImpersonateClient,就能捕获到一个SecurityImpersonation等级的token,之后创建进程什么的就随意了。

核心技巧都是六七年前的东西,取Token可以认为是James Forshaw 15年那个祖传的CaptureImpersonationToken.cpp翻版;PrinterNotify服务20年decoder-it也提到过,只不过他们对DCOM理解不够深,还局限在UnmarshalPwn的思路上,没做这种利用;Token和模拟滥用就更古老了。

当然了,微软一直认为“SeImpersonatePrivilege to LOCAL SYSTEM is a feature by design, not a security boundary”,安心用一段时间还是可以的。

另致防御/应急/PR:“修补”方法是禁用没用的PrinterNotify/McpManagement服务,对服务器没有任何影响,哪怕它是个打印服务器。

Github:https://github.com/zcgonvh/DCOMPotato/tree/master


原文始发于微信公众号(头像哥老草):DCOM Potato

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年12月9日17:47:26
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   DCOM Potatohttp://cn-sec.com/archives/1454101.html

发表评论

匿名网友 填写信息