最新 RTF RCE 漏洞 CVE-2023-21716 分析


背景
微软在 2 月 14 日发布的补丁修复了一个 CVSS v3.1 高达 9.8 分的 Microsoft Word 远程代码执行漏洞,该漏洞是 Microsoft Word 的 RTF 解析器在处理 rtf 文件字体表(\fonttbl)中包含的过多字体(\fN)时产生的堆损坏漏洞,而堆损坏是由处理字体时的汇编指令 movsx 导致的整数溢出引起的。近日漏洞发现者 Joshua J. Drake 公布了漏洞的 POC,360 沙箱云团队第一时间使用该 POC 进行了漏洞复现与分析,并就此漏洞的触发路径和指令在沙箱云检测引擎中增加检测方案,保护用户免遭此漏洞的威胁。
分析环境
Windows 10 x64 1607
Office 2016,Windbg,IDA Pro 7.5
wwlib(16.0.4266.1003)
POC
POC.rtf 使用 Joshua J. Drake 提供的 python 脚本生成。
POC.rtf 的内容较为简单,仅包括 \rtfN、\fonttbl、\fN 和 \rtlch 控制字,此次漏洞发生在 rtf 解释器 wwlib 模块处理 \fonttbl 和 \fN 控制字时,POC.rtf 内容如下。
crash 现场
对 winword.exe 开启页堆,可以得到以下的栈回溯。
通过栈回溯得到以下调用链,由于没有 wwlib.dll 模块的符号只简单的揣测了一下几个关键函数的作用。

根本原因分析
查看 crash func(sub_102F0020) 及崩溃地址处的上下文,经过一番调试摸清了 sub_102F0020 函数的参数意义和崩溃原因。
sub_102F0020 函数用于处理 fond id 也就是 /fN 中的 N,其会将 fond id 和 codepage value 存储在一个由 Cum 和 Base 计算偏移的地址上。Base 的初始值是 0xa,且每当处理了 0xa 个 fond id 就会累加 0xa。

存储 fond id 和 codepage value 的代码片段同时也是 crash 时的上下文。
在上述代码片段中下 4 个断点查看存储过程,注意各寄存器对应关系。
崩溃前断点记录到的存储过程信息。
观察记录及断点处的汇编代码,发现崩溃是由 bp2 处的 movsx 指令引起的整数溢出导致。

由上图中的记录 2 可以发现,bp2 处获得的 Base 由 0x8002 变为了 edx 中的 0xffff8002,变化的原因是 movsx 指令是带符号扩展的,而 0x8002 的最高位又恰好为 1。这也就导致 bp3 处的 edx 和 bp4 处的 Target addr 整数溢出,并最终在 bp4 处发生堆损坏。

Target addr 整数溢出。

补丁分析
将 Office 更新到最新后再次打开 POC.rtf 发现依然会造成崩溃,不过此崩溃是 winword.exe 提前检测到即将造成堆损坏而主动引发的,另外发现微软提供了此版本 wwlib.dll 的符号文件,此栈回溯与之前的基本一致。
补丁文件中新增的范围检测。

沙箱云检测
沙箱中未添加检测规则时检测到的由 POC.rtf 文件引起的 Microsoft Word 进程崩溃,崩溃记录与我们的 crash 现场一致。

经过对漏洞的分析后为沙箱添加检测规则,沙箱云已能精确检出该漏洞。

全新版本的360沙箱云高级威胁分析平台已发布!欢迎使用:ata.360.net
参考文章
https://qoop.org/publications/cve-2023-21716-rtf-fonttbl.md
关于我们
360沙箱云是 360 安全情报中心旗下的在线高级威胁分析平台,对提交的文件、URL,经过静态检测、动态分析等多层次分析的流程,触发揭示漏洞利用、检测逃逸等行为,对检测样本进行恶意定性,弥补使用规则查杀的局限性,通过行为分析发现未知、高级威胁,形成高级威胁鉴定、0day 漏洞捕获、情报输出的解决方案;帮助安全管理员聚焦需关注的安全告警,经过安全运营人员的分析后输出有价值的威胁情报,为企业形成专属的威胁情报生产能力,形成威胁管理闭环。解决当前政企用户安全管理困境及专业安全人员匮乏问题,沙箱云为用户提供持续跟踪微软已纰漏,但未公开漏洞利用代码的 1day,以及在野 0day 的能力。

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