Struts2远程命令执行漏洞,隐藏17年的Office远程代码执行漏洞,到底怎么回事的呢

感谢你的邀请

Struts2远程命令执行漏洞,隐藏17年的Office远程代码执行漏洞,到底怎么回事的呢

我的回答如下Struts2远程命令执行漏洞,希望采纳

Struts2远程命令执行漏洞,隐藏17年的Office远程代码执行漏洞,到底怎么回事的呢

Struts2远程命令执行漏洞,隐藏17年的Office远程代码执行漏洞,到底怎么回事的呢

2017年11月14日,微软发布了11月份的安全补丁更新。金山毒霸安全实验室专家,发现其中一个修复是潜伏17年之久的Office远程代码执行漏洞(CVE-2017-11882)。黑客可借助该漏洞,以当前登录的用户的身份执行任意命令。

Struts2远程命令执行漏洞,隐藏17年的Office远程代码执行漏洞,到底怎么回事的呢

Struts2远程命令执行漏洞,隐藏17年的Office远程代码执行漏洞,到底怎么回事的呢

漏洞影响版本:

Struts2远程命令执行漏洞,隐藏17年的Office远程代码执行漏洞,到底怎么回事的呢

Office 365

Struts2远程命令执行漏洞,隐藏17年的Office远程代码执行漏洞,到底怎么回事的呢

Microsoft Office 2000

Struts2远程命令执行漏洞,隐藏17年的Office远程代码执行漏洞,到底怎么回事的呢

Microsoft Office 2003

Struts2远程命令执行漏洞,隐藏17年的Office远程代码执行漏洞,到底怎么回事的呢

Microsoft Office 2007 Service Pack 3

Struts2远程命令执行漏洞,隐藏17年的Office远程代码执行漏洞,到底怎么回事的呢

Microsoft Office 2010 Service Pack 2

Struts2远程命令执行漏洞,隐藏17年的Office远程代码执行漏洞,到底怎么回事的呢

Microsoft Office 2013 Service Pack 1

Struts2远程命令执行漏洞,隐藏17年的Office远程代码执行漏洞,到底怎么回事的呢

Microsoft Office 2016

Struts2远程命令执行漏洞,隐藏17年的Office远程代码执行漏洞,到底怎么回事的呢

漏洞事件分析:

Struts2远程命令执行漏洞,隐藏17年的Office远程代码执行漏洞,到底怎么回事的呢

漏洞出现在模块EQNEDT32.EXE中,该模块为公式编辑器,在Office的安装过程中被默认安装。该模块以OLE技术(Object Linking and Embedding,对象链接与嵌入)将公式嵌入在Office文档内。

Struts2远程命令执行漏洞,隐藏17年的Office远程代码执行漏洞,到底怎么回事的呢

Struts2远程命令执行漏洞,隐藏17年的Office远程代码执行漏洞,到底怎么回事的呢

图 1 – Microsoft 公式编辑器

当插入和编辑数学公式时,EQNEDT32.EXE并不会被作为Office进程(如Word等)的子进程创建,而是以单独的进程形式存在。这就意味着对于WINWORD.EXE,

EXCEL.EXE等Office进程的保护机制,无法阻止EQNEDT32.EXE这个进程被利用。

由于该模块对于输入的公式未作正确的处理,攻击者可以通过刻意构造的数据内容覆盖掉栈上的函数地址,从而劫持程序流程,在登录用户的上下文环境中执行任意命令。

图 2 – CVE-2017-11882 POC中所执行的命令

国外安全厂商0patch对修补前后的相应补丁进行了对比,发现更新补丁后的程序版本是使用汇编方式进行修补的,并据此推测由于年代久远,微软或已丢失相关程序的源代码。再者,当时(2000年)的编译器所编译的程序并不包含ASLR等漏洞缓解措施,因此该模块必将吸引更多黑客对其进行漏洞挖掘。为安全起见,强烈建议用户取消对该模块的注册,解决方案请参考文章结尾部分。

图 3 公式编辑器使用较低版本编译器编写(VisualC++ 3~4版)

图 4 – EQNEDT32.exe未见任何漏洞环节措施

漏洞分析: (1)基本信息

截止分析报告撰写时,只发现了RTF类型的CVE-2017-11882漏洞利用文档。触发漏洞的OLE对象加载方式与今年上半年的CVE-2017-0199漏洞类似,使用了\objupdate控制字来保证OLE对象的自动更新和加载。

图 5 – RTF标准文档中对\objupdate控制字的说明

该OLE对象的类型为“Equation.3”,即公式编辑器3.0类型对象,该公式对象使用了CFB格式进行存储。

图 6 – 漏洞文档中的OLE数据头

对该OLE对象进行提取和分析,可以发现公式的相关内容存放在\x01CompObj流之后。

图 7 – 公式对象

(2)详细分析

公式的内容使用了一种名为MTEF v.3的二进制格式进行存储。该格式的头部为28(0x1C)个字节,定义如下:

在漏洞利用文档中,该结构如下所示。

图 8 – 公式头结构

对上图的解析如下表所示。

偏移量变量名说明值0-1cbHdr公式头大小0x001C2-5version版本号0×000200006-7cf剪贴板格式0xC3BE8-11cbObjectMTEF数据长度0×45,即69字节12-15reserved1未公开0×0000000016-19reserved2未公开0×0068242820-23reserved3未公开0x0069A87C24-27reserved4未公开0×00000000

紧随该公式头结构的数据为公式数据。公式数据使用字节流进行存储。

图 9 – 公式数据

MTEF v.3公式数据中,前5个字节为数据头,解析如下表所示。

偏移量说明值0MTEF版本号0×031该数据的生成平台0×00表示在Macintosh平台生成,0×01表示在Windows平台生成。此处为0×01。2该数据的生成产品0×00表示由MathType生成,0×01表示由公式编辑器生成。此处为0×01。3产品主版本号0×034产品副版本号0x0A

在数据头之后的字节流即为公式数据。

数据0x0A所对应的数据类型为SIZE,只占用一个字节。

数据0×08所对应的数据类型为FONT,文档中数据的解析如下表所示。

数值解释0×08FONT记录标志0×02typeface类型0×81字体风格0x636D642E……字体名(以空字符结尾),即图9中的cmd.exe…字符串

图 10 – 漏洞代码

通过对下面的两张图进行对比,可以明白栈溢出的触发过程。

图 11 – 被覆盖前的栈数据

图 12 – 被覆盖后的栈数据

被修改后的函数调用如下图所示,在前文中已经提到,该公式编辑器并没有开启ASLR。这个硬编码的地址0x00430C12对应于对函数WinExec的调用。因而该字体名对应的命令得以执行。

/vuls/154462.html

解决方案:

1.老铁,建议大家尽快使用金山毒霸等方式修复该漏洞,目前金山毒霸也支持查杀。

2、由于该公式编辑器已经17年未做更新,可能存在大量安全漏洞,建议在注册表中取消该模块的注册。

l 按下Win+R组合键,打开cmd.exe

l 输入以下两条命令:

对此,你有什么想法?欢迎大家关注、转发、点赞、评论、收藏等方式交流。

2022-06-10

2022-06-10