瑞绿 (@b2ahex) [出自:jiwo.org]

基础知识

披露或补丁日期:1月 13, 2022

产品:微软视窗

咨询:https://msrc.microsoft.com/update-guide/vulnerability/CVE-2022-21882

受影响的版本:在 2022 年 1 月更新之前。Windows 10,Windows 11,Windows Server 2019,Windows Server 2022(目前仅在windows10和Windows Server 2019下找到完整的漏洞利用)

第一个修补版本:CVE-2022-21882,2022 年 1 月更新。

问题/错误报告:不适用

补丁 CL:不适用

错误引入 CL:不适用

报告者:瑞绿 (@b2ahex)

守则

概念验证:不适用

漏洞利用示例:不适用

在执行分析时,您是否有权访问漏洞利用示例?是的

漏洞

错误类:win32k 对象类型混淆

漏洞详细信息:

攻击者可以在user_mode调用相关的GUI API,以进行内核调用,如xxxMenuWindowProc,xxxSBWndProc,xxxSwitchWndProc,xxxTooltipWndProc等。这些内核函数将触发回调 xxxClientAllocWindowClassExtraBytes。攻击者可以通过内核回溯表中的钩子xxxClientAllocWindowClassExtraBytes拦截此回调,并使用NtUserConsoleControl方法设置tagwnD对象的控制台Window标志,从而修改窗口类型。

最终回调后,系统不会检查窗口类型是否已更改,并且由于类型混淆而引用了错误的数据。修改标志之前和之后的区别在于,在设置标志之前,系统认为 tagWND.WndExtra 保存了一个user_mode指针;设置标志后,系统认为 tagWND.WndExtra 是内核桌面堆的偏移量,攻击者可以控制此偏移量,从而导致 R&W 越界。

补丁分析:

补丁添加了检查代码。在 xxxClientAllocWindowClassExtraBytes 方法结束之前,系统将检查 ConsoleWindow 标志 (0x800)。如果设置了该标志,则 xxxClientAllocWindowClassExtraBytes 将返回 false。

关于如何找到这个漏洞的想法(模糊测试,代码审计,变体分析等)

对用户模式回调相关函数进行代码审计是可行的,并且在这个攻击面上有很多优秀的研究。

(历史/现在/未来)错误上下文:

https://msrc.microsoft.com/update-guide/vulnerability/CVE-2021-1732

漏洞利用

此处定义了"利用原语"、"利用策略"、"利用技术""利用流"这两个术语。

利用策略(或多个策略):

通过漏洞实现越界读写,并修改内核对象的另一个窗口,获取内核任意地址读写原语

漏洞利用流:

1.触发漏洞得到越界写入,修改窗口对象的cbWndExtra 0x0FFFEFFF,所以使用窗口对象WndExtra可以访问大内存。

2.修改另一个窗口的WS_CHILD标志,为另一个窗口设置一个特殊构造的菜单(假菜单)

3.通过GetMenuBarInfo API和假菜单获取任意读取原语。

4.使用 SetWindowLongPtrA API 修改另一个窗口对象的 ExtraBytes 以获得任意写入基元。

5.通过 EPROCESS ActiveProcessLinks 查找具有 PID 4 的系统电子进程

6.读取系统令牌并替换当前进程令牌

相同漏洞利用流的已知情况:

它与之前的 CVE-2021-1732 漏洞利用相同,是利用权限提升漏洞的常用方法。

CVE-2021-1732(https://googleprojectzero.github.io/0days-in-the-wild//0day-RCAs/2021/CVE-2021-1732.html)

漏洞利用链的一部分?

不适用

后续步骤

变体分析

变体分析的领域/方法(及其原因):

以下是检查 CVE-2021-1732 和 CVE-2022-21882 的快速方法:

在 xxxClientAllocWindowClassExtraBytes 回调完成后,在函数返回之前确定窗口对象是否包含0x800标志。

当设置了标志后,可以根据xxxClientAllocWindowClassExtraBytes的调用路径进行识别。

当堆栈路径为 xxxCreateWindowEx -> xxxClientallocxxxxExtraBytes (CVE-2021-1732)。

在其他情况下是(CVE-2022-21882)。

找到的变体:不适用

结构改进

杀死 bug 类的想法:

完善内核0天赏金,让更多的安全研究人员参与赏金计划,帮助系统更完美。

缓解漏洞利用流的想法:

缓解常见的漏洞利用技术。

其他潜在改进:

改进内核0天赏金。

0 天检测方法

类似 0 天的潜在检测方法有哪些?这意味着是否有任何关于如何将此漏洞或类似漏洞检测为0天的想法?

检测内存中的字符串以动态获取地址/偏移量。

检测用户模式进程加载内核模块(如 ntoskrnl.exe)的行为。

检查内核回溯表是否被挂接。

其他参考资料

https://msrc.microsoft.com/update-guide/vulnerability/CVE-2022-21882

https://googleprojectzero.github.io/0days-in-the-wild//0day-RCAs/2021/CVE-2021-1732.html

https://ti.dbappsecurity.com.cn/blog/index.php/2021/02/10/windows-kernel-zero-day-exploit-is-used-by-bitter-apt-in-targeted-attack/

https://www.mcafee.com/blogs/enterprise/mcafee-enterprise-atr/technical-analysis-of-cve-2021-1732/