0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

0
Last updated at Posted at 2020-09-11

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

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

复现

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

编译项目生成exe(关注公众号回复20200909获取已经编译好的EXP),测试系统版本 Win10 1909 18363.592
这里公众号后台设置自动回复 https://cloud.189.cn/t/zuyUNbrQZzqm(访问码:ilj5)

image.png

image.png

image.png

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

挖掘

在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中为以下类。

ClsID desc
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组的成员。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?