Exploiting CVE-2018-0802 Office Equation Vulnerabilty

几周前,Embedi 发现了Office Equation 3.0进程(EQNEDT32.EXE)中的漏洞。由于几个原因,这个事件引起了一些眉毛。

首先,这个过程是一个没有ASLR的32位应用程序,即使是在Windows 10机器上。

其次,由微软发布的补丁已经被讨论成二进制补丁,而不是重新编译,表明他们可能实际上没有源代码。

如果情况是这样的话,那么等式过程就可能成为其他脆弱性的肥沃基础,因为微软会发现在过去的17年中很可能存在漏洞的代码。

考虑到这一风险,我们决定自己寻找漏洞,并提醒微软。

Youtube POC视频

漏洞

虽然微软最近已经强制要求ASLR进行这个过程,这将会使得利用任何弱点变得更加棘手,但是在本文中,我们将会透露我们仍然能够绕过这种缓解的方式。

但首先,我们来看一下最初的漏洞(CVE-2017-11882)。

请看下面的数字1和2,比较补丁前后看到的代码:

图1:补丁之前

图2:补丁后

造成这个问题的问题是对get_byte()的混杂调用。

图3:该get_byte()函数

该get_byte()函数增加了全局变量dword_45BD3C并复制其内容尖到AL。

在易受攻击的函数中,循环直到遇到null,当没有null时,可能导致堆栈溢出。简而言之,这个漏洞几乎就是这样。

当试图寻找类似问题的其他代码位置时,我们使用了get_byte()函数来查找使用它的其他函数,并在0x00443F6C中找到以下函数:

图4:调用get_byte()

发现前一个函数被调用0x0443E34中的函数两次:

图5:易受攻击的函数调用者

这个函数的基本目标是解析SIZE记录

然而,就代码而言,我们可以看到它将发送给它的数据量(v12 \ v13)复制到驻留在两个局部变量(分别为v6 \ v8)中的地址上。

相关变量由文件中的公式OLE对象控制:

图6:十六进制流中的变量

使用以下公式计算v12和v13(以橙色高亮显示):

十六进制((realsize * 8 – 7)/ 2)[2:]。ljust(2,’0’)

v6和v8是指向栈上地址的指针。

因此,当v12或v13提供足够大的值时,这很容易导致基于堆栈溢出并覆盖EIP。

图7: EIP控制

开发

为了制定一个开发计划,我们使用BinScope来了解使用哪些缓解措施。

图8:旧的EQNEDT32.exe Binscope

图9:新的EQNEDT32.exe Binscope

比较补丁之前和之后二进制的BinScope结果,似乎该二进制不再失败DBCheck(动态基地)。这表示ASLR已被添加,因此会阻止我们返回硬编码地址,这是由Embedi执行的。

每次执行ASLR都会导致eqnedt32加载到不同的基地址。这种缓解措施对攻击者来说通常是一个很大的挑战,但是作为一个32位的进程,事实证明熵是相当低的。

多低?8位准确。

加载器只会将模块的基址随机化为256个选项之一。

eqnedt32的另一个不错的功能是,它不会提示用户,而是优雅地崩溃。

这种行为允许我们创建一个带有256个方程对象的RTF,强制我们的方式到达一个运行的ROP链,这个链将会用我们提供的字符串来调用winExec(这是开发者为了方便起见而导入的)。

图10:嵌入的OLE对象ASLR蛮力

RTF中的每个等式对象都包含一个基于不同偏移量的ROP链,涵盖了该进程可能加载的所有可能性。

此外,在崩溃的时刻,EAX似乎指向我们的受控输入之前的0x32字节。

图11:我们在碰撞时的受控输入。

受控输入也是RTF文件中等式对象的一部分。

所以,我们所有的ROP链应该做的就是增加EAX并跳转到winExec。但是,我们有一个小小的限制。

在对我们易受攻击的函数的调用和调用者返回到我们损坏的地址之间,还有另一个调用sub_4428f0的函数。

图12:易受攻击的函数调用者

sub_4428f0要求arg0是一个可写地址。我们通过把它指向模块本身内的任何可写地址来处理这个问题,我们的第一个小工具就是用add esp,4 ret来跳过这个地址。

图13:我们的最终ROP链

概要

我们向Microsoft报告了这个错误,并且在CVE-2018-0802的最后一个补丁中修复了这个错误。报告之后,确定它是重复的,意味着它是由其他人同时发现的。

但是,我们相信开发技术(也向微软报告)也值得讨论。因此,上述说明并展示了所有Office版本中存在的17年的新漏洞的全面利用。

我们还要感谢我们的同事Jonathan Jacobi,Nadav Grossman,Omri Herscovici和Yannay Livneh在这项研究中给予的帮助。

Check Point的IPS刀片提供针对这些威胁的保护:

签名

Microsoft Office公式内存损坏远程执行代码(CVE-2018-0802)
Microsoft Office公式ASLR绕过


转载请注明出处:https://www.freearoot.com/index.php/exploiting-cve-2018-0802-office-equation-vulnerabilty.html

文章来源:https://research.checkpoint.com/another-office-equation-rce-vulnerability/