最近我发现了Excel程序(所有版本)在处理特别构造的excel文件时,存在一个Use-After-Free漏洞。该漏洞成功利用可以允许远程代码执行。然而微软拒绝修补该漏洞,称通过“弹窗”的方式可以阻止该漏洞。下面看看这个弹窗是怎样的:
试问,当我们从一封邮件中打开一个信任的文件时,这个弹窗出现时你是否会点击“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像他们承诺的那样帮助供应商解决这类问题。
* 原文链接: sourceincite ,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)