安全研究

安全漏洞
Microsoft IE向量标记语言VGX.DLL压缩文件处理远程堆溢出漏洞(MS07-050)

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

受影响系统:
Microsoft Internet Explorer 7.0
Microsoft Internet Explorer 6.0 SP1
Microsoft Internet Explorer 6.0
Microsoft Internet Explorer 5.01
描述:
BUGTRAQ  ID: 25310
CVE(CAN) ID: CVE-2007-1749

Internet Explorer是微软发布的非常流行的WEB浏览器。

IE的VML在处理畸形格式的GZIP压缩文件时存在缓冲区溢出漏洞,远程攻击者可能利用此漏洞控制用户系统。

VGX.DLL是IE中负责渲染VML的组件,该组件中的CDownloadSink类实现处理从VML中内嵌URL所下载的数据。例如,以下VML会下载由VGX.DLL!CDownloadSink::OnDataAvailable处理的额外内容:

<v:rect>
<v:imagedata src="http://malice/compressed.emz">
</v:rect>

VGX.DLL!CDownloadSink::OnDataAvailable函数在计算读取长度限制时存在整数溢出漏洞,最终会导致URLMON.DLL!CMimeFt::SmartRead函数在后续的处理中溢出堆缓冲区。传送到CDownloadSink::OnDataAvailable的第二个参数([EBP+10h])是接收到的压缩文件数据的长度,但函数在计算将要传送给URLMON.DLL!CReadOnlyStreamDirect::Read的读取限制时会从压缩文件数据长度减去缓冲区中非压缩数据的长度。如果未压缩的数据大于压缩文件数据总长的话,就会出现整数下溢,导致将很大的值(大约4GB)用作读取限制。如果后续读取的数据长度超过了缓冲区中未使用空间的升序,就会导致堆溢出。

利用这个漏洞要求至少调用两次CDownloadSink::OnDataAvailable,一次用一些非0字节长度的未压缩数据加载缓冲区,另一次导致溢出,因此必须分别独立的接收压缩数据。但这种接收数据的方式可能是合法的,因此即使合法的站点也可能触发非恶意的堆溢出。

<*来源:Ben Nagy
        Derek Soeder (dsoeder@eeye.com
  
  链接:http://www.kb.cert.org/vuls/id/468800
        http://secunia.com/advisories/23677/
        http://www.microsoft.com/technet/security/Bulletin/MS07-050.mspx?pf=true
        http://www.us-cert.gov/cas/techalerts/TA07-226A.html
        http://research.eeye.com/html/advisories/published/AD20070814a.html
*>

建议:
临时解决方法:

* 注销VGX.DLL
    
1. 依次单击“开始”、“运行”,键入"%SystemRoot%\System32\regsvr32.exe" -u "%CommonProgramFiles%\Microsoft Shared\VGX\vgx.dll",然后单击“确定”。
2. 此时将出现一个对话框,确认注销过程已成功完成。 单击“确定”关闭对话框。
    
* 将Internet和本地Intranet安全区设置为“高”以在运行ActiveX控件和活动脚本之前要求提示。

厂商补丁:

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

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