行业新闻

CVE-2021-43226 漏洞分析

CVE-2021-43226 漏洞分析

 

2021年12月15日,微软patch thuesday发布新补丁后,我们观察到Windows Common Log File System Driver 模块修复了一个Elevation of Privilege 类型的漏洞https://msrc.microsoft.com/update-guide/vulnerability/CVE-2021-43226, 通过分析补丁目前已经写出了POC

 

补丁对比

通过对比补丁发现该模块有数个函数进行了修补,其中引起我们注意的函数为CClfsLogFcbVirtual::QueryLogFileInfo

通过逆向可以清楚的看到修补之后对参数指针a7保存的值进行了限制,如果其大于等于0x78,那么就会将其值修正为0x78,在下图中我们可以看到其中Src为[rsp+60h],保存在堆栈里面

当_CLS_LOG_INFORMATION_CLASS为ClfsLogBasicInformationPhysical时,则会调用CClfsLogFcbPhysical::QueryLogFileInfo函数,该函数内部存在这样一条指令,假设a7中保存的值可以被控制,那么就能触发栈溢出,导致BSOD

 

POC开发

参考微软Common Log File System相关的白皮书,我们可以找到该模块的相关API,其中api GetLogFileInformation引起了我们的注意,其第二个参数pinfoBuffer结构体为CLFS_INFORMATION ,其大小刚好为0x78

https://docs.microsoft.com/en-us/previous-versions/windows/desktop/clfs/common-log-file-system-portal

该函数的调用非常简单,我们可以通过参数2,和参数3控制内容,以及大小

    //CLFS_INFORMATION pinfoBuffer = {};

    //ULONG infoSize = sizeof(pinfoBuffer);

    char pinfoBuffer[0x110] = {};

    ULONG infoSize = 0x110;

    DWORD dwRet = GetLogFileInformation(hLog, (PCLS_INFORMATION)&pinfoBuffer, &infoSize);

但是要想触发漏洞,我们还需要给一个Log File的句柄,可以通过CreateLogFile获取Log File的句柄

为了调用CClfsLogFcbVirtual::QueryLogFileInfo而不是CClfsLogFcbPhysical::QueryLogFileInfo,我们需要给Log File一个StreamName

整体代码如下

 

BSOD

 

关于我们

目前360沙箱云已可以实时检测此漏洞的利用行为。360沙箱云是 360 自主研发的在线高级威胁分析平台,对提交的文件、URL,经过静态检测、动态分析等多层次分析的流程,触发揭示漏洞利用、检测逃逸等行为,对检测样本进行恶意定性,弥补使用规则查杀的局限性,通过行为分析发现未知、高级威胁,形成高级威胁鉴定、0day 漏洞捕获、情报输出的解决方案;帮助安全管理员聚焦需关注的安全告警,过安全运营人员的分析后输出有价值的威胁情报,为企业形成专属的威胁情报生产能力,形成威胁管理闭环。解决当前政企用户安全管理困境及专业安全人员匮乏问题,沙箱云为用户提供持续跟踪微软已纰漏,但未公开漏洞利用代码的 1day,以及在野 0day 的能力。

沙箱云检测到漏洞利用场景:

沙箱云检测到漏洞触发信息:

360混天零实验室成立于2015年,负责高级威胁自动化检测项目和云沙箱技术研究,专注于通过自动化监测手段高效发现高级威胁攻击;依托于 360 安全大数据,多次发现和监测到在野漏洞利用、高级威胁攻击、大规模网络挂马等危害网络安全的攻击事件,多次率先捕获在野利用 0day 漏洞的网络攻击并获得厂商致谢,在野 0day 漏洞的发现能力处于国内外领先地位,为上亿用户上网安全提供安全能力保障。

关闭