反馈中心是 Windows 10 中的一项功能,允许用户向 Microsoft 报告问题或建议。它依赖于以系统权限运行的“diagtrack”服务,或更广为人知的“连接用户体验和遥测”
当反馈中心收集信息以将其发送给 MS 时,它会执行大量文件操作,其中大部分由 SYSTEM 用户执行。事实证明,此应用程序和在收集过程中运行的相关服务/可执行文件存在大量逻辑错误,可以通过 RPC 控制通过“目录连接”或符号链接加以利用。
这些“漏洞”可能允许恶意用户执行以下操作:
-
任意文件读取(信息泄露)
-
使用攻击者无法控制的内容覆盖任意文件(篡改)
-
任意文件覆盖/写入,内容由攻击者控制(提升权限)
-
任意文件/文件夹删除(提升权限)
在我的调查中,我能够在各种情况下执行所有这些操作。
今天我将向您展示如何执行任意文件覆盖/写入,这很容易导致 EoP。我在 Windows 10 Preview 到 Build v10.0.19592.1001 中发现了这个问题。在 Windows 10“标准”版本中,这个漏洞更容易被利用。
该问题已在CVE-2020-0942 中以“非预期”的方式修复,并随后在最新的 WIP Build(10.0.19608.1006)中得到修复。
先决条件
-
拥有 Windows 10 计算机(虚拟或物理)的标准 Windows 10 / 域用户
-
诊断和反馈必须设置为“完整”模式
-
如果首次登录时选择了“基本”,则登录用户可以在设置->隐私->诊断和反馈中将“必需”切换为“可选”
描述
当通过反馈中心应用程序发送附件并且您选择“保存本地副本…”时,diagtrack 服务将执行多个文件操作,主要使用 SYSTEM 用户权限。
以下是最重要的操作的概述。
首先,diagtrack服务通过模拟当前用户在“c:UsersuserAppdatalocaltemp”目录下创建一个名为diagtracktempdir<XX..X>的临时随机文件夹:
在创建目录期间,模拟用户还会设置新的权限。这些权限不会从父文件夹继承,而且非常严格。事实上,正如我们在下面的截图中看到的那样,当前目录中的权限不包括当前用户:
而对于里面的子目录和文件,当前用户是有一定的权限的。
所以问题是:
是否仍然可以滥用特制的“连接点”?
理论上是的:主文件夹diagtracktempdir<XX..X>由当前用户创建。即使权限以更严格的方式依次更改,例如仅授予用户 READ 权限,他仍然可以修改,因为用户是目录的所有者。
实际上,存在一个竞争条件。具体来说,在 SYSTEM 未模拟身份的情况下创建子目录之前,必须更改diagtracktempdir<XX..X>上的权限。这样,新的权限就会传播,攻击者将拥有对所有内容的完全访问权限。
赢得这样的竞争条件很难。两个事件之间的时间以毫秒为单位,你必须注入“恶意”代码来更改权限……
尽管如此,我还是找到了几个解决方案来解决竞争条件,并在 VS2019 C++ 中开发了一个 POC/工具
注意:为了加快测试速度,请始终在反馈中心选择“建议功能”。
仅有 1 个硬盘
我在物理机和虚拟机上测试了此过程。根据硬件、性能和当前工作负载,我能够在第一次运行时执行漏洞利用。在某些情况下,最多需要 10/15 次尝试。
首先,运行“反馈中心”应用程序并退出。如果之前从未启动过,这将创建初始目录和设置。
这是我的 Poc/工具的“逻辑流程”:
-
线程 1:对目录运行文件监视程序:“c:users<user>AppDataLocalPackagesMicrosoft.WindowsFeedbackHub_8wekyb3d8bbweLocalStateDiagOutputDir”,
这将拦截目录的创建并保存目录 {GUID},以供以后使用
-
线程 2:对目录“c:users<user>appdatalocaltemp”运行文件监视程序,这将拦截文件夹diagtracktempdir<XX..X>的创建
创建目录后,立即更改权限,例如:everyone:full。
注意:SetSecurityInfo API 函数不适用,因为它很慢(它在“后台”做了很多无用的工作),NtSetSecurityObject更快,因为更“原子化”
我们知道最终的路径名是这样的:
“diagtracktempdir<XX..X> get info T0FolderPath <{GUID}>”
-
循环创建从已识别路径到目标目录的“连接点”。循环直到错误为“未找到路径/文件”。
如果一切正常,我们应该已经将文件复制到目标目录中。否则,循环将以拒绝访问错误退出,这意味着我们来不及了。
以下屏幕截图是我如何在c:windowssystem32中写入之前附加的WindowsCoreDeviceInfo.dll的 PoC :
以下截图显示漏洞执行的SetSecurity发生在目录创建之前“get info T0FolderPath
并且目录成功挂载:
最后,文件复制到目标目录中,距离 EoP仅一步之遥 😉
存在两个或更多硬盘/分区(包括安装外部 USB 磁盘的可能性)
我在物理机和虚拟机上测试了此过程。在我的测试环境(具有 2 个分区的物理机和虚拟机)中,我能够在第一次运行时执行漏洞利用。此解决方案更加可靠。
标准用户可以在物理机上安装外部 USB 磁盘
首先,运行“反馈中心”应用程序并退出。如果之前从未启动过,这将创建初始目录和设置。
在此场景中,我们将创建从目录“c:user<user>documentsfeedbackhub”到位于另一个驱动器上的目录的连接点。这将在每次打开文件时强制执行“重新解析”操作,这会导致延迟,尤其是当连接点指向不同的驱动器/分区时。
当连接到位时,用户的“…appdatalocaltemp”目录不再使用,并且diagtracktempdir<XX..X>目录直接写入 feedbackhub 下。
唯一的先决条件是feedbackhub文件夹必须为空,这意味着不需要使用以前的带有本地保存附件的 Feedback Hub,因为一旦创建了文件夹和文件,用户就无法删除它们。
要赢得竞争条件,需要以下步骤:
1、创建连接点:
2、在 C++ 漏洞利用中使用连接目录而不是“…appdatalocaltemp”:
3、提交新的反馈并加载恶意 DLL 作为附件
瞧!我们的 dll 已被复制到 System32 文件夹中:
结论
这只是通过滥用 Windows 10 中的通用“错误报告”功能执行特权文件操作的众多可能性之一。
如果你正在寻找 CVE,也许这个值得一试。你所需要的只是Procmon、时间和耐心😉POC 可在此处下载:https://drive.google.com/open?id=1t0w14yO7kJ__nZnATnKj3NnsrAK3ebt_
Exploiting Feedback Hub in Windows 10
https://decoder.cloud/2020/04/28/exploiting-feedback-hub-in-windows-10/
感谢您抽出
.
.
来阅读本文
点它,分享点赞在看都在这里
原文始发于微信公众号(Ots安全):利用 Windows 10 反馈中心 安全漏洞