CVE-2022-24521:Windows CLFS 本地提权漏洞

CVE-2022-24521:Windows CLFS 本地提权漏洞

时间:2023-05-26 作者:安帝科技-CSX安全实验室


CLFS是Microsoft在Windows Vista和Windows Server 2003 R2中为实现高性能而引入的日志框架,它为应用程序提供API函数来创建、存储和读取日志数据。利用此漏洞可以在计算机上执行任意代码,绕过安全限制并获得系统管理员权限。

Part1 漏洞状态

Part2 漏洞描述

Part3 漏洞复现

1. 复现环境
系统版本:Windows 10 版本 1903
2. 复现步骤
运行漏洞利用程序后,当前用户变更为system

Part4 漏洞分析

CClfsBaseFilePersisted::LoadContainerQ函数的第215行判断_CLFS_CONTAINER_CONTEXT结构的cidQueue字段值是否为-1,为-1时则调用CClfsBaseFilePersisted::RemoveContainer函数。

CClfsBaseFilePersisted::RemoveContainer函数的第56行调用CClfsBaseFilePersisted::FlushImage函数处理文件数据,当结果大于等于0时,取_CLFS_CONTAINER_CONTEXT的pCaontainer字段值,并调用相关函数。

CClfsBaseFilePersisted::FlushImage函数第8行调用了CClfsBaseFilePersisted::WriteMetadataBlock函数。

CClfsBaseFilePersisted::WriteMetadataBlock函数调用ClfsEncodeBlock和ClfsDecodeBlockjams函数。

ClfsEncodeBlock调用ClfsEncodeBlockPrivate函数处理数据。

ClfsEncodeBlockPrivate函数将扇区最后2字节数据写入到签名缓冲区,然后使用生成的签名替换原有的2字节数据。

ClfsDecodeBlockjams调用ClfsDecodeBlockPrivate函数处理数据。

ClfsDecodeBlockPrivate函数将签名缓冲区数据写回扇区最后2字节,但缓冲区内的数据并未进行处理。

漏洞利用过程:
1、构造日志文件,使_CLFS_CONTAINER_CONTEXT结构的cidQueue字段值为-1,pCaontainer字段值为代码地址,签名缓冲区偏移指向pCaontainer所在地址。
2、调用CreateLogFile API打开已有的日志文件,此时会调用ClfsDecodeBlockPrivate函数,将签名缓冲区数据写回到扇区最后2字节。
3、当_CLFS_CONTAINER_CONTEXT结构的cidQueue字段值为-1时,会调用CClfsBaseFilePersisted::RemoveContainer函数。
4、RemoveContainer函数调用CClfsBaseFilePersisted::FlushImage函数将扇区最后2字节写入到pCaontainer字段。
5、当RemoveContainer函数调用完FlushImage函数后,pCaontainer值被替换为指定的代码地址,随后会将该地址作为虚表指针并调用相关函数。因为pCaontainer是可控的,因此可以执行任意构造的代码,从而实现权限提升。

Part5 修复建议

https://msrc.microsoft.com/update-guide/vulnerability/CVE-2022-24521
根据系统安装链接内相应补丁。
————————————————
获取更多情报
联系我们,获取更多漏洞情报详情及处置建议,让企业远离漏洞威胁。
电话:18511745601
邮箱:shiliangang@andisec.com