欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

CVE-2017-11882漏洞分析

程序员文章站 2022-04-28 12:00:10
...

分析环境

  • 环境 W7 x64 Office2013
  • 工具 windbg IDA Pro

漏洞描述

CVE-2017-11882是微软公布的一个远程执行漏洞,通杀目前市面上的所有office版本及Windows操作系统(包括刚刚停止支持的Office 2007)。该漏洞的成因是EQNEDT32.EXE进程在读入包含MathType的ole数据时,在拷贝公式字体名称时没有对名称长度进行校验,从而造成栈缓冲区溢出,是一个非常经典的栈溢出漏洞。上次出现这么典型的office栈溢出漏洞是著名的CVE-2012-0158

漏洞成因

该漏洞出现在模块EQNEDT32.EXE中, 该模块为windows的公式编辑器。由于该模块对于输入的公式未做正确的处理,攻击者可以通过刻意构造的数据内容覆盖掉栈上的函数地址,从而劫持程序流程,执行任意命令

**模块路径:**C:\Program Files\Common Files\microsoft shared\EQUATION

CVE-2017-11882漏洞分析

文件信息

CVE-2017-11882漏洞分析

如图可以发现,程序发布于2000年,编译器使用VC++4.2

受漏洞影响的版本

  • 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

漏洞分析

获取poc

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

复现漏洞

  • 搭建漏洞环境(安装Office 2003 sp3),执行漏洞poc
  • 由于漏洞出现在EQNEDT32.EXE 进程 首先需要确认是否存在公式编辑器
  • 菜单->插入->对象 找到公式3.0
  • 如果没有则说明Office安装不完全

CVE-2017-11882漏洞分析

  • 打开exploit.rtf,弹出计算器

CVE-2017-11882漏洞分析

漏洞分析

定位漏洞模块

CVE-2017-11882漏洞分析

通过ProcessMonitor查看计算器的父进程,发现是EQNEDT32.EXE,且EQNEDT32.EXE并不会作为WINWORD的子进程创建,而是以单独的形式存在。这就意味着Office的进程保护机制,无法阻止EQNEDT32.EXE这个进程被利用。

定位漏洞函数

因为弹出计算器的时候创建了新进程,所以我们可以认为是由WinExec或者CreateProcess创建的。用windbg附加EQNEDT32.EXE,然后下API断点

CVE-2017-11882漏洞分析

打开poc,程序断下,分析WinExec的返回地址和参数

CVE-2017-11882漏洞分析

接着查看一下参数的内容

CVE-2017-11882漏洞分析

看到了通过cmd命令来开启计算器

CVE-2017-11882漏洞分析

接着查看一下当前的调用堆栈,看是谁调用了WinExec这个函数

CVE-2017-11882漏洞分析

接着用ub命令查看这个返回地址之前的汇编代码,然后在IDA中查看这些函数

CVE-2017-11882漏洞分析

在IDA中找到sub_4115A7这个函数,进去F5查看

CVE-2017-11882漏洞分析

只有这么一小段代码,继续跟进查看sub_41160F

CVE-2017-11882漏洞分析

这里的字符串拷贝函数没有使用安全版本的,会导致栈溢出,那么这个函数就是触发漏洞的函数了

定位漏洞触发点

CVE-2017-11882漏洞分析

重新运行windbg,在0x4115D3这个触发漏洞的函数下断点

CVE-2017-11882漏洞分析

此时程序断下

CVE-2017-11882漏洞分析

查看堆栈的参数,参数的内容就是poc中构造的恶意参数

CVE-2017-11882漏洞分析

接着进入函数,一直单步到这一条rep指令

CVE-2017-11882漏洞分析

此时我们查看ebp+4的内容和edi以及esi的内容,这里可以看到返回地址即将被0x430c12这个地址覆盖

CVE-2017-11882漏洞分析

步过这条指令,再次查看ebp+4的内容,发现此时返回地址已经被覆盖,这样我们就确定了漏洞触发点

解决方案

  1. 微软已经对此漏洞做出了修复

    • 下载https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2017-11882 更新补丁进行修补
    • 开启Windows Update功能,定期对系统进行自动更新
  2. 由于该公式编辑器已经17年未做更新,可能存在大量安全漏洞,建议在注册表中取消该模块的注册

    • 按下Win+R组合键,打开cmd.exe
    • 输入以下两条命令:
reg add  “HKLM\SOFTWARE\Microsoft\Office\Common\COM     Compatibility\{0002CE02-0000-0000-C000-000000000046} ” /v         “Compatibility  Flags”             /t  REG_DWORD /d                 0x400                
 
reg add  “HKLM\SOFTWARE\Wow6432Node\Microsoft\Office\Common\COM     Compatibility\{0002CE02-0000-0000-C000-000000000046} ” /v         “Compatibility  Flags”             /t  REG_DWORD /d                 0x400