解析CLFS:从CVE-2022-24481到CVE-2022-35803类型混淆权限提升

💡 原文中文,约2600字,阅读约需6分钟。
📝

内容提要

分析了Windows操作系统内核中通用日志文件系统(CLFS)的安全漏洞CVE-2022-35803,漏洞允许攻击者通过类型混淆问题绕过修复并实现权限提升。修复了直接修改客户端上下文偏移量的问题,但仍存在类型混淆问题。攻击者可以通过修改客户端上下文字段来修改下一个容器上下文中的指针,从而实现权限提升。

🔎

延伸解读

补丁绕过思路:类型混淆的切入点

微软针对CVE-2022-24481的补丁在ValidateRgOffsets中增加了对rgClients和rgContainers偏移量的检查,要求客户端上下文与下一个上下文间隔至少0xb8字节,容器上下文间隔至少0x60字节。但文章指出,该检查未验证客户端上下文字段cidNode.cType的有效性。攻击者可将cType设为0xC1FDF008,使ValidateRgOffsets错误地按0x60字节计算间隔,从而让客户端上下文0x60~0x88字节处的字段与下一个容器上下文0~0x28字节处的字段重叠,形成新

利用链关键:从字段重叠到任意地址递减

在FlushMetadata函数中,clfs.sys会修改客户端上下文的eState字段(偏移0x78)。由于上述重叠,该修改会影响到下一个容器上下文的pContainer指针。攻击者通过精心构造日志文件,使pContainer指向用户空间地址。随后CloseContainers调用CClfsContainer::Close时,会触发ObfDereferenceObject,导致任意地址递减。文章提到,野外样本利用此技巧将PreviousMode减为零,使调用线程从用户模式切换到内核模式,进而通过NtWriteVi

权限提升的最终步骤与防御启示

获得内核读写能力后,攻击者可通过覆盖当前进程_EPROCESS对象中的token字段为系统进程的token地址(通过NtQuerySystemInformation获取)来实现权限提升。文章分析表明,CVE-2022-35803的根源在于FlushMetadata未检查客户端上下文字段的有效性,导致类型混淆。这提醒防御者,仅验证偏移量范围可能不足,还需对上下文类型等元数据进行严格校验,以防止类似绕过。

❓

Q&A

CVE-2022-35803漏洞的主要影响是什么?

CVE-2022-35803漏洞允许攻击者通过类型混淆问题绕过修复并实现权限提升。

CVE-2022-24481漏洞的根本原因是什么?

CVE-2022-24481漏洞的根本原因是缺乏对客户端偏移的有效验证,导致客户端上下文与容器上下文重叠。

如何修复CVE-2022-24481漏洞?

CVE-2022-24481的补丁通过添加对rgClients和rgContainers偏移量的检查来修复漏洞。

攻击者如何利用CVE-2022-35803漏洞?

攻击者可以通过修改客户端上下文字段来修改下一个容器上下文中的指针,从而实现权限提升。

FlushMetadata函数在CVE-2022-35803中有什么作用?

FlushMetadata函数未对客户端上下文字段的有效性进行检查,导致新的类型混淆漏洞。

CVE-2022-35803漏洞的修复是否彻底?

虽然修复了直接修改客户端上下文偏移量的问题,但仍存在类型混淆问题,未能完全解决漏洞。

🏷️

标签

➡️

继续阅读