欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

CVE-2017-11826:Office Open XML wwlib模块解析混淆漏洞分析

来源:本站整理 作者:佚名 时间:2019-08-08 TAG: 我要投稿

一、前言
CVE-2017-11826 据说是 360 在 2017 年 9 月底发现的一个关于 XML 格式解析的一个漏洞,之后微软在 10 月份发布了关于 CVE-2017-11826 的补丁。该漏洞的成因是由于在解析闭合元素时,没有对元素的完整性做出判断,导致将当前元素的嵌套关系加上 1。这样的话 wwlib 模块在处理闭合标签时,会错误的使用父级元素 w:name 属性 +44 的地址进行虚函数调用,攻击者通过修改 w:name 属性,就可以进行任意地址调用。

受影响的 Office 版本。

二、调试环境
操作系统:Windows 7 + VMware
调试工具:x64dbg
漏洞样本:POC
补丁地址:https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2017-11826
三、调试分析
从 GitHub 上下载关于 CVE-2017-11826 漏洞的文件夹,解压后发现包括解压过的 docx 文件、README 文件、俄文文档,俄文文档没有仔细看,好像是关于漏洞利用的。

包含漏洞的 XML 文件为 document.xml,文件在 `word` 路径下。打开 document.xml 文件,分析后发现  标签使用了  标签进行闭合,而  标签的 w:name 属性有点奇怪,可能是用于控制某一个地址的值。

将解压过的 docx文档重新压缩,之后使用注册表附加调试器准备调试。

附加完成之后打开含有漏洞的文档,运行后触发异常,其中 call [ecx+4] 指令是利用虚函数表调用虚函数,而 ecx 为虚函数表指针,通过 wwlib.41249DA0 函数返回。

查看堆栈调用,发现用于处理 XML 格式的 msxml 模块,msxml 模块通过间接调用 wwlib 模块去协助解析 XML 格式。暂且将 wwlib.3161309E 函数定为漏洞函数。

对漏洞函数下记录断点后查看日志内容,发现漏洞函数被调用了 6 次,结合 document.xml 文件中的标签元素分析漏洞函数很有可能是用于解析元素标签的,至于解析的是什么,目前还不清楚。


选取最后一次调用漏洞函数的 esp 下条件断点,分析漏洞函数处理流程。

函数断下后从传入的参数可以发现,esi 可能是储存标签信息的数据结构。

单步进入该函数,在如图所示的位置会取出元素的嵌套关系,此时  标签已经插到了  标签的后面(以 “:” 符号为分隔符)。而  标签在未闭合的情况插入了  标签,说明嵌套关系已经被错误的解析。

调试到 0×31613084 地址时发现会调用 wwlib.31249DA0 函数,经过分析后发现该函数的返回值和异常处的虚函数表调用有关,所以进入这个函数看看。

通过分析发现该函数对 ecx 和 edx 做了一些简单的计算,算法为[[ecx]+8]*edx + [[ecx]+C] + [ecx],计算结果为 0x0751D140;而 ecx 是由 esi 传入,edx 又等于[[esi]],所以算法变为[[esi]+8]*([[esi]]-2) + [[esi]+C] + [esi],由传入的 esi 控制,经过后面的分析可以得出[[esi]]其实就是当前元素的嵌套等级。

调用完 wwlib.31249DA0 后会将[[0x0751D140+44]+44]地址的值作为虚函数表指针进行虚函数调用,进而触发异常。如图所示可以看出[0x0751D140+44]地址被覆盖成了  元素的 w:name 属性,所以攻击者通过修改  标签的 w:name 属性就可以做到调用任意地址。

[1] [2] [3] [4]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载