转载

微软Office Excel远程代码执行漏洞(CVE-2016-0035)分析

最近我发现了Excel程序(所有版本)在处理特别构造的excel文件时,存在一个Use-After-Free漏洞。该漏洞成功利用可以允许远程代码执行。然而微软拒绝修补该漏洞,称通过“弹窗”的方式可以阻止该漏洞。下面看看这个弹窗是怎样的:

微软Office Excel远程代码执行漏洞(CVE-2016-0035)分析

试问,当我们从一封邮件中打开一个信任的文件时,这个弹窗出现时你是否会点击“yes”?我想答案可能会是“yes”,毕竟这是一个可信的文件并且也是具有可信来源的(至少你这么认为)。尽管弹窗存在,但是当你关闭弹窗或者直接无视它,在点击“yes”之后的几秒钟,漏洞就会触发。那么这个有多大影响?

只要用户在1秒内不选择“no”,我们就可以在EXCEL程序中进行页堆和用户模式的堆栈追踪,你将会看到如下信息:

(868.15c4): Access violation - code c0000005 (first chance) First chance exceptions are reported before any exception handling. This exception may be expected and handled. eax=221beff0 ebx=001c2602 ecx=08a1dff0 edx=00000001 esi=00000000 edi=00000001 eip=2fed37f1 esp=001c2264 ebp=001c2294 iopl=0         nv up ei pl zr na pe nc cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00210246 EXCEL!Ordinal40+0x7737f1: 2fed37f1 663b5004        cmp     dx,word ptr [eax+4]      ds:0023:221beff4=???? 0:000> !heap -p -a @eax     address 221beff0 found in     _DPH_HEAP_ROOT @ 11d1000     in free-ed allocation (  DPH_HEAP_BLOCK:         VirtAddr         VirtSize)                                    22d31a5c:         221be000             2000     716690b2 verifier!AVrfDebugPageHeapFree+0x000000c2     773a6dbc ntdll!RtlDebugFreeHeap+0x0000002f     7736a4c7 ntdll!RtlpFreeHeap+0x0000005d     77336896 ntdll!RtlFreeHeap+0x00000142     75b6c4d4 kernel32!HeapFree+0x00000014     62296f1b mso!Ordinal9770+0x00007bef     2f98cde3 EXCEL!Ordinal40+0x0022cde3     2f9e2e82 EXCEL!Ordinal40+0x00282e82     2f9e2b35 EXCEL!Ordinal40+0x00282b35     2fa26427 EXCEL!Ordinal40+0x002c6427     2fa260b6 EXCEL!Ordinal40+0x002c60b6     2fa24e39 EXCEL!Ordinal40+0x002c4e39     2fa21994 EXCEL!Ordinal40+0x002c1994     2fa24a26 EXCEL!Ordinal40+0x002c4a26     2fa1f82c EXCEL!Ordinal40+0x002bf82c     2fa1e336 EXCEL!Ordinal40+0x002be336     2fa1d992 EXCEL!Ordinal40+0x002bd992     2fa1ced6 EXCEL!Ordinal40+0x002bced6     2fff23cd EXCEL!Ordinal40+0x008923cd     3002c86e EXCEL!Ordinal40+0x008cc86e     300316f1 EXCEL!Ordinal40+0x008d16f1     30032050 EXCEL!Ordinal40+0x008d2050     30042046 EXCEL!Ordinal40+0x008e2046     62076292 mso!Ordinal9994+0x000024c7     620766cb mso!Ordinal4158+0x000001d8     6205992d mso!Ordinal9839+0x00000ff0     6205a0df mso!Ordinal143+0x00000415     61b50593 mso!Ordinal6326+0x00003b30     6207621f mso!Ordinal9994+0x00002454     6175882e mso!Ordinal53+0x0000083b     617585bc mso!Ordinal53+0x000005c9     6175744a mso!Ordinal7509+0x00000060

很清楚,这里存在UAF,为了让你觉得这是个严重的漏洞,下面的示例则是可能的代码执行路径:不需要用户模式堆栈追踪。如果攻击者可以强制指定内存分配后的地址(事实可以),那么这些攻击者就可以间接执行他们的代码。

(1614.1a24): Access violation - code c0000005 (first chance) First chance exceptions are reported before any exception handling. This exception may be expected and handled. eax=5ca5f546 ebx=00000000 ecx=5c991ed8 edx=00266794 esi=5c991ed8 edi=00000000 eip=8bec8b55 esp=002667a8 ebp=002667e0 iopl=0         nv up ei pl nz na pe nc cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00210206 8bec8b55 ??              ??? 0:000> k ChildEBP RetAddr  WARNING: Frame IP not in any known module. Following frames may be wrong. 002667a4 5cdec71b 0x8bec8b55 002667e0 5ca40b78 mso!Ordinal8883+0xa15 00266810 5ca40b20 mso!Ordinal9662+0xdb2 00266838 5ca40a84 mso!Ordinal9662+0xd5a 00266844 5ca5f015 mso!Ordinal9662+0xcbe 00266858 5d67e54f mso!Ordinal10511+0x3de 002668cc 5d67e614 mso!Ordinal2804+0x45a 002668f0 5d3a5c3c mso!Ordinal2804+0x51f 00266b3c 2fafdf1c mso!Ordinal7674+0x265 00267230 2fafd9e1 EXCEL!Ordinal40+0x23df1c 00267280 3018c1da EXCEL!Ordinal40+0x23d9e1 0026d184 301916f1 EXCEL!Ordinal40+0x8cc1da 0026f798 30192050 EXCEL!Ordinal40+0x8d16f1 0026fa74 301a2046 EXCEL!Ordinal40+0x8d2050 0026fa94 5d166292 EXCEL!Ordinal40+0x8e2046 0026fab4 5d1666cb mso!Ordinal9994+0x24c7 0026facc 5d14992d mso!Ordinal4158+0x1d8 0026faf4 5d14a0df mso!Ordinal9839+0xff0 0026fb0c 5cc40593 mso!Ordinal143+0x415 0026fb30 5d16621f mso!Ordinal6326+0x3b30 0:000> u 5ca40b78 mso!Ordinal9662+0xdb2: 5ca40b78 8bce            mov     ecx,esi 5ca40b7a e84f000000      call    mso!Ordinal9662+0xe08 (5ca40bce) 5ca40b7f 8b4e2c          mov     ecx,dword ptr [esi+2Ch] 5ca40b82 3bcf            cmp     ecx,edi 5ca40b84 7409            je      mso!Ordinal9662+0xdc9 (5ca40b8f) 5ca40b86 8b01            mov     eax,dword ptr [ecx] 5ca40b88 6a01            push    1 5ca40b8a ff10            call    dword ptr [eax]

下面是IDA提供的sub_39270b26():

微软Office Excel远程代码执行漏洞(CVE-2016-0035)分析

当然我不会为攻击者们提供攻击代码,这里只是为读者们提供相关学习方法。这个漏洞已经被微软修复了,微软编号MS16-004,即CVE-2016-0035。此外,由于最近的ALSR技术可以绕过微软Office产品,因此这个漏洞的影响进一步扩大。

那么这个漏洞影响哪些版本呢?包括Office2007-2010在内的所有版本,并且还有可能影响更新的版本(未测试)。在测试的时使用的是打上最新补丁的Office2010专业版。

微软Office Excel远程代码执行漏洞(CVE-2016-0035)分析

总结

类似这种漏洞还有很多,同时感谢微软的MSRC团队重新评估该漏洞的影响,并且在接下来的数月之内修复这个漏洞,同时我们感谢ZDI像他们承诺的那样帮助供应商解决这类问题。

* 原文链接: sourceincite ,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)

原文  http://www.freebuf.com/articles/terminal/93475.html
正文到此结束
Loading...