早在 2020 年,Andy Nguyen就发布了Bleeding Tooth,这是 Linux 蓝牙子系统中的一组漏洞。除了发布报告外,还发布了一个功能性漏洞,该漏洞可以在物理上接近的机器上实现 RCE,而无需用户交互。我只是在 2022 年秋季才发现这些漏洞,但我认为可能值得研究一下被发现存在漏洞的组件的 Windows 实现。我没想到会发现太多东西,尤其是因为这些信息已经存在两年了,其他人肯定已经看过了,但我认为在最坏的情况下,我可以浪费几天时间检查一些组件。
我最终发现了两个漏洞并将它们报告给了微软,微软在 2023 年 3 月的更新中发布了修复程序。分配的 CVE 是CVE-2023-24871和CVE-2023-23388,前者被披露为 RCE,后者被披露为 LPE。实际情况要复杂一些,因为第一个漏洞存在于 Windows 蓝牙堆栈的多个地方,可以用作 RCE 向量和 LPE 向量,而公告中没有提到这一点。第二个漏洞实际上只是一个 LPE,而且远不如第一个漏洞有趣。这两个漏洞中的第一个是我最喜欢的漏洞之一,因为它允许同时进行 RCE 和 LPE,RCE 可以在没有用户交互的情况下实现,并且漏洞的表现形式提供了对内存损坏的大量控制。这在当今非常罕见。这就是为什么本系列的主要焦点将放在第一个漏洞上。第二个漏洞是普通的 Windows LPE,通常不值得发布,但我在编写第一个漏洞的漏洞利用程序时偶然发现了它,因此我觉得它也应该成为故事的一部分。
总结
这里有剧透!如果你在意,请跳过。
-
CVE-2023-24871 是 Windows 中低功耗蓝牙库中的一个整数溢出漏洞。该漏洞位于计算蓝牙广告数据包中广告部分数量的代码中 - 由于此目的使用了无符号 8 位整数,因此数据包中超过 255 个广告部分将触发整数溢出。这将导致错误计算处理这些部分所需的内存量,并触发基于堆的越界写入,从而使攻击者能够高度控制地破坏内存。
-
受影响的库静态链接到 Windows 蓝牙堆栈中的多个模块,包括内核驱动程序和特权服务使用的用户模式 DLL。易受攻击的函数用于解析来自远程设备和本地应用程序的广告数据,这意味着该漏洞可用作 RCE 和 LPE 的载体。
-
微软在 2023 年 3 月补丁星期二修复了该漏洞,方法是明确检测溢出并在这种情况下退出该函数。他们没有承认漏洞的 LPE 组件,只提供了 RCE 建议。您可以在github上找到 pocs + 漏洞利用。
-
CVE-2023-23388 是蓝牙服务中的输入验证失败,该代码解析应用程序通过 RPC 发出的用户模式请求。参数被视为函数数组的索引,然后调用相应的函数。在验证过程中,该参数被视为有符号整数,这仅确保该值小于函数数组的大小。攻击者可以提供参数的负值并成功通过验证,让代码将意外值解释为函数指针并立即调用它。这可以像其他漏洞一样用作 LPE 攻击媒介。
-
此漏洞也已于 2023 年 3 月补丁星期二修复,方法是确保参数的值非负。您可以在github上找到 poc 。
内容
我可能可以将我写的所有内容都塞进一篇文章中,但我觉得通过单独的文章来组织会更好。这些是:
-
CVE-2023-24871 - 简介和漏洞描述,简单介绍了低功耗蓝牙和广告,然后描述了 CVE-2023-24871。
-
CVE-2023-24871 - RCE,解释了如何利用该漏洞作为 RCE 载体。我提供了 PoC,但没有提供实用的漏洞利用。
-
CVE-2023-24871 - LPE,解释了如何利用该漏洞作为 LPE 载体。提供了功能性利用。
-
CVE-2023-23388讨论了另一个漏洞。再次提供了 PoC,但没有提供功能性漏洞利用。
Two bluetooth vulnerabilities in Windows
https://ynwarcs.github.io/z-btadv-cves
原文始发于微信公众号(Ots安全):Windows 中的两个蓝牙漏洞
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论