Microsoft Office内存损坏漏洞(CVE–2017–11882)分析预警
2017-11-21 15:28

enter image description here

报告作者:MerJerson, houjingyi 更新日期:2017年11月21日

0x00背景

2017年11月,微软在例行系统补丁发布中,修复了一个Office远程代码执行的严重漏洞,编号CVE-2017-11882。该漏洞类型为缓冲区溢出,位为EQNEDT32.EXE组件。受害用户打开恶意的office文档时,无需交互,就可能执行恶意代码。

据悉,这个组件是由Design Science Inc.开发的,后来由微软收购。该组件于2001年编译嵌入office,之后没有任何进一步的修改。所以该漏洞已存在17年之久。影响现阶段流行的所有office版本。

360CERT经过分析确认,确定该漏洞存在远程命令执行风险,建议用户尽快更新相应补丁。

0x01漏洞概述

EQNEDT32.EXE是用于在文档中插入和编辑方程式。插入到文档中的任何公式都是OLE对象。该组件是在OLE技术规范下设计的。首发于Microsoft Office 2000和Microsoft 2003。从Microsoft Office 2007套件开始,显示和编辑方程的方法发生了变化,虽然EQNEDT32.EXE变得过时,不过,为了保持版本兼容性,它并没有从Office套件中删除。

EQNEDT32.EXE为OLE实现了一组标准的COM接口。

  • IOleObject

  • IDataObject

  • IOleInPlaceObject

  • IOleInPlaceActiveObject

  • IpersistStorage

而问题的就在于IpersistStorage:Load这个位置。因为历史久远,该组件开发的时候并没有例如ASLR这样的漏洞缓解措施。利用起来更加的方便。

0x02 漏洞分析

检测到VirusTotal上有该漏洞的POC,多家检测机构标注为CVE-2017-11882。(最开始只有微软能检测)

enter image description here

如上所说,通过恶意样本分析,问题出在EQNEDT.EXE中sub_41160F函数中。如图所示,strcpy函数没有检查复制时的长度造成了溢出。

enter image description here

通过调试可以猜测在正常情况下eax寄存器也就是第一个参数应该是字体名。

enter image description here

通过rtfobj抽取样本中的OLE对象,发现字体名为cmd.exe……。

enter image description here

enter image description here

enter image description here

在填充的AAA……之后是0x430C12,也就是EQNEDT.EXE中调用WinExec的地方。

enter image description here

返回地址被覆盖为0x430C12,从而执行命令。

enter image description here

enter image description here

最后执行效果:

enter image description here

0x03影响版本

Office 365

Microsoft Office 2000

Microsoft Office 2003

Microsoft Office 2007 Service Pack 3

Microsoft Office 2010 Service Pack 2

Microsoft Office 2013 Service Pack 1

Microsoft Office 2016

0x04修复建议

  1. 360CERT建议用户及时更新补丁,以提高系统安全性。

  2. 缓解措施:该问题可通过修改注册表,禁用该模块的方式进行缓解。其中XX.X为版本号。

reg add "HKLM\SOFTWARE\Microsoft\Office\XX.X\Common\COM Compatibility\{0002CE02-0000- 0000-C000-000000000046}" /v "Compatibility Flags" /t REG_DWORD /d 0x400

reg add "HKLM\SOFTWARE\Wow6432Node\Microsoft\Office\XX.X\Common\COM Compatibility\{0002CE02-0000-0000-C000-000000000046}" /v "Compatibility Flags" /t REG_DWORD /d 0x400

0x05时间线

2017年11月14日 微软发布安全更新

2017年11月20日 Github放出利用代码

2017年11月21日 360CERT及时跟紧发布预警通报

0x06参考文档

https://github.com/embedi/CVE-2017-11882

https://embedi.com/blog/skeleton-closet-ms-office-vulnerability-you-didnt-know-about

https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-11882