Loading
0

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

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

试问,当我们从一封邮件中打开一个信任的文件时,这个弹窗出现时你是否会点击“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():

当然我不会为攻击者们提供攻击代码,这里只是为读者们提供相关学习方法。这个漏洞已经被微软修复了,微软编号MS16-004,即CVE-2016-0035。此外,由于最近的ALSR技术可以绕过微软Office产品,因此这个漏洞的影响进一步扩大。
那么这个漏洞影响哪些版本呢?包括Office2007-2010在内的所有版本,并且还有可能影响更新的版本(未测试)。在测试的时使用的是打上最新补丁的Office2010专业版。

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

【声明】:8090安全小组门户(http://www.8090-sec.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们:邮箱hack@ddos.kim,我们会在最短的时间内进行处理。