安全研究

安全漏洞
Microsoft Windows GDI AttemptWrite函数远程堆溢出漏洞(MS07-046)

发布日期:2007-08-14
更新日期:2007-08-16

受影响系统:
Microsoft Windows XP SP2
Microsoft Windows Server 2003 x64 Edition
Microsoft Windows Server 2003 SP1
Microsoft Windows 2000SP4
描述:
BUGTRAQ  ID: 25302
CVE(CAN) ID: CVE-2007-3034

Microsoft Windows是微软发布的非常流行的操作系统。


Windows的图形设备接口(GDI)的GDI32函数AttemptWrite处理Windows元文件时可能会出现整数溢出,远程攻击者可能利用此漏洞提升自己的权限。

如下反汇编所示,很多GDI32 API函数都会调用AttemptWrite,如CreateMetaFileW。

   77F4B519  mov  esi, [ebp+0Ch]  ; reported size of record in bytes
     ...                           ;   (user-controlled)
    77F4B548  mov  eax, [ebx+0Ch]  ; amount of buffer used in bytes
                                   ;   (user-controlled)
    77F4B548  lea  ecx, [eax+esi]  ; *** integer overflow ***
    77F4B54E  cmp  ecx, [ebx+08h]  ; buffer capacity
    77F4B551  ja   _no_memcpy
     ...
    77F4B56D  mov  edi, [ebx]      ; pointer to start of buffer
    77F4B56F  mov  ecx, esi
    77F4B574  add  edi, eax        ; now EDI points to unused buffer space
     ...
    77F4B5BA  mov  eax, ecx
    77F4B5BC  shr  ecx, 2
    77F4B5BF  rep movsd            ; *** complete heap overwrite ***

如果创建了包含有超大记录长度的元文件就会触发堆溢出,因为memcpy试图将大约4GB的任意数据拷贝到堆块。这个拷贝大小会导致访问破坏,但在可以处理这种异常的程序中会导致执行任意指令。

<*来源:Yuji Ukai
  
  链接:http://www.kb.cert.org/vuls/id/640136
        http://secunia.com/advisories/26423/
        http://research.eeye.com/html/advisories/published/AD20070814b.html
        http://www.microsoft.com/technet/security/Bulletin/MS07-046.mspx?pf=true
        http://www.us-cert.gov/cas/techalerts/TA07-226A.html
*>

测试方法:

警 告

以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!

http://www.milw0rm.com/exploits/4337

建议:
厂商补丁:

Microsoft
---------
Microsoft已经为此发布了一个安全公告(MS07-046)以及相应补丁:
MS07-046:Vulnerability in GDI Could Allow Remote Code Execution (938829)
链接:http://www.microsoft.com/technet/security/Bulletin/MS07-046.mspx?pf=true

浏览次数:2836
严重程度:0(网友投票)
本安全漏洞由绿盟科技翻译整理,版权所有,未经许可,不得转载
绿盟科技给您安全的保障