Microsoft IE向量标记语言VGX.DLL远程堆溢出漏洞(MS07-050)

2007-08-17T00:00:00
ID SSV:2123
Type seebug
Reporter Root
Modified 2007-08-17T00:00:00

Description

BUGTRAQ ID: 25310 CVE(CAN) ID: CVE-2007-1749

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

IE的VML在处理压缩的数据时存在缓冲区溢出漏洞,远程攻击者可能利用此漏洞控制用户系统。

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长度的未压缩数据加载缓冲区,另一次导致溢出,因此必须分别独立的接收压缩数据。但这种接收数据的方式可能是合法的,因此即使合法的站点也可能触发非恶意的堆溢出。

Microsoft Internet Explorer 7.0 Microsoft Internet Explorer 6.0 SP1 Microsoft Internet Explorer 6.0 Microsoft Internet Explorer 5.01 临时解决方法:

  • 注销VGX.DLL

  • 依次单击“开始”、“运行”,键入"%SystemRoot%\System32\regsvr32.exe" -u "%CommonProgramFiles%\Microsoft Shared\VGX\vgx.dll",然后单击“确定”。

  • 此时将出现一个对话框,确认注销过程已成功完成。 单击“确定”关闭对话框。

  • 将Internet和本地Intranet安全区设置为“高”以在运行ActiveX控件和活动脚本之前要求提示。

厂商补丁:

Microsoft

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