1. 首页
  2. 翻译文章

[翻译]Win10 CloudExperienceHostBroker COM对象导致提权

原文作者:[email protected]com
原文链接:https://bugs.chromium.org/p/project-zero/issues/detail?id=2051
译者:Y4er 水平有限,如有错误请及时反馈

Win10中计划任务中存在CloundExperienceHostBroker托管普通用户可以访问的不安全COM对象,从而导致特权提升。

挖掘

在Win10的默认安装中存在一个计划任务 \Microsoft\Windows\CloudExperienceHost\CreateObjectTask,该计划任务会用SYSTEM权限创建一个进程托管com类 CloudExperienceHost Create System Object Server / f7fa3149-91e7-43b7-8040-b707688ced1a。这是一个通用的COM代理,用于为用户提供在SYSTEM运行的类,以配置诸如OOBE和Retail Demo之类的东西。

image.png

只要计划的任务和COM服务器都经过适当的ACL,这本身就不会成为问题。不幸的是,他并没有做ACL。计划任务可以由普通用户启动,并且COM服务器(f7fa3149-91e7-43b7-8040-b707688ced1a)在其AppID(f7fa3149-91e7-43b7-8040-b707688ced1a)中未指定限制性启动权限。 使用默认值授予INTERACTIVE组访问权限。

通常来讲,尽管INTERACTIVE可以创建新实例,但默认的访问权限仅会授予Administrators和SELF SID(即SYSTEM)访问权限。 但是,不知道是bug还是由于设计而定,当CloundExperienceHostBroker进程调用CoInitializeSecurity时,它都会使用不同的AppID(efe2d6d8-a81b-41e7-ae77-e5244ab80522),该ID也会授予 INTERACTIVE 访问权限。 最终结果是普通的非特权用户可以通过计划任务启动COM服务器,激活新实例并访问生成的COM服务器。

同样,只要COM服务器没有做任何危险的事情,这也不是问题。 COM服务器出售通用的ICreateObject接口,该接口允许用户传递要创建的CLSID。 代理将仅创建在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\CloudExperienceHost\Broker\ElevatedClsids中注册的类,在Windows 10 1909中为以下类。

0316bbc2-92d9-4e2e-8345-3609c6b5c167 CloudExperienceHost Diagnostics Elevated Manager
06dc6740-fd0d-426a-9bf6-20ddbd7d53ce 
0b26fe8c-9e57-48ff-ad9f-3084ef402443 ProvOperationsCleanContext
1c308b42-b4b4-42ad-864c-48440c12b7a5
1ee026d0-f551-4c71-aea2-f9897b159eaf User OOBE Controller Auto Elevated
2134da04-4faa-42ed-ada2-43707b4e1de1 
2b2cad40-19c1-4794-b32d-397e41d5e8a7 User OOBE Controller
2c012f55-1318-44f4-a235-20c4df918fb3 Cloud Domain Join OS Upgrade Helper
3a965ed4-0e14-4a1b-a71e-972f1c1044f6 CloudExperienceHost Util Elevated Manager
40afa0b6-3b2f-4654-8c3f-161de85cf80e Connected User Store
4c1b3c1d-5c78-4a73-be8b-de1ec4b3637e 
54337179-c8b2-4ed4-95e4-95601c850d8c 
558c258c-90fe-401c-8772-7edca8016d2c 
6447e897-294b-409a-bf15-5f349a20f2c0 OOBE Registered Owner
80a90d72-a834-4f3d-ad3b-c7abbe4a0f66 OOBE User Authentication
973e4ce8-85a2-4207-8147-4778b50644db Azure AD Join with Authentic User Gesture
9a31d292-655f-48f7-b5ad-553358bcd0c9 
9caf4a2e-c957-48c7-b4d2-4d11188e0b94 OOBE Elevated Util
9dea6e0b-8856-45d8-a424-57244aef1e3c 
a3987437-f1b5-4296-a7dd-6cc3a8b738b9 
b742e827-ede6-400f-8312-cd522198be86 
d2b3db04-b843-11e7-abc4-cec278b6b50a 
d2d28389-85ee-4f9c-b45f-58bd9e664976 
df3460ae-d92d-40f3-b5cd-f83259936f23 
df436197-c14c-4f1d-99cc-4c7bbb399a2f 
e1f5aa5b-065c-4e29-b454-c1bbfe0819d2 Microsoft Account Credential Manager
efeb5035-1da0-4b73-afa2-68ed7a1d98e0 RetailInfoSetterInternal
f32fcfec-9054-470a-acee-867f2277b772 
fd5a78d9-c2f5-45ff-9097-c615acd0aa51 

我没有遍及整个列表,但有些突出的地方包括 Connected User Store,它使您可以将本地帐户链接到在线帐户。54337179-c8b2-4ed4-95e4-95601c850d8c 公开了本地帐户管理器类。

让我们集中讨论Local Account Manager类,它具有许多接口,但是最有趣的是ILocalAccountManager。 它具有以下功能:

  1. CreateAccount – 创建一个任意本地用户帐户。
  2. CreateRetailDemoAccount – 创建零售演示模式的帐户。
  3. UpdateRecoveryData – 更新帐户的恢复问题。

出于说明目的,CreateRetailDemoAccount将使用空密码在Administrators组中创建一个新的用户帐户。 但是,应该将其用作设置零售演示模式的一部分,如果通过“设置”应用完成此操作,则需要管理员权限。 这是一个非常琐碎的EoP:

  1. 启动计划任务。
  2. 创建COM服务器。
  3. 创建本地帐户管理器类。
  4. 调用CreateRetailDemoAccount创建管理员帐户。
  5. 以该用户身份登录以获得管理员权限。

如果你可以交互式运行POC,你只需要注销重新登陆即可。如果没有用户交互,则这会有点困难,因为默认情况下您无法在没有密码的情况下进行身份验证,但是包括Connected User Store在内的其他一些类将暂时出于自身目的禁用空密码检查,因此可能存在可利用的竞争窗口,这些竞争窗口系统不执行检查,因此用户可以调用CreateProcessWithLogon创建进程,或通过LogonUser获取具有空密码的模拟令牌。

此任务的行为与我在2015年报告的先前错误(CVE-2015-2528)相似,该错误位于Microsoft\Windows\Shell\CreateObjectTask计划任务中。我不知道是否从那个问题中学到了什么教训。特别是,代理托管的COM类不一定设计为托管在普通用户可以访问的SYSTEM COM服务器中。 我认为将SYSTEM COM服务器隐藏在预定任务后面会产生后门的感觉。

毫无疑问应该修复INTERACTIVE组可以访问或激活系统COM服务器这点。实际上,我认为用户根本不应该甚至可以启动计划的任务。 我认为尝试并“修复”托管的COM类并不是一种彻底的解决方案。

PoC证明

我提供了C#项目作为PoC。 它将创建一个管理员零售演示用户,该用户将成为管理员。 它不会再尝试使用该用户,但是您可以清楚地看到它已被添加。 如果您真的要测试它,则只需注销并以新用户身份重新登录。

1)编译C#项目。
2)以普通用户身份运行PoC。
3)检查Administrators组的成员。

预期结果:
无法访问SYSTEM COM服务器。

观察结果:
已访问SYSTEM COM Server,并且创建了用户”Darrin DeYoung”,该用户是Administrators组的成员。

PoC下载:https://bugs.chromium.org/p/project-zero/issues/attachment?aid=449687&signed_aid=Zh89DlsWY5cj_V-HXxphCQ==

译者测试

编译项目生成exe,测试系统版本 Win10 1909 18363.592

image.png

image.png

image.png

管理员用户名宋冬 密码为空

exe文件和源码 https://cloud.189.cn/t/zuyUNbrQZzqm(访问码:ilj5)

原创文章,作者:Y4er,未经授权禁止转载!如若转载,请联系作者:Y4er

联系我们

在线咨询:点击这里给我发消息

QR code