安全研究

安全漏洞
百度空间个人配置文件跨站脚本漏洞

发布日期:2009-05-12
更新日期:2010-05-21

受影响系统:
Baidu 百度空间
描述:
百度空间是大型的社区网站,用户可在此发表网络文章和照片、获取网友反馈。

百度空间的一段JavaScript DOM操作函数在操作DOM时可以允许通过构造一段特殊的HTML代码导致该函数对其进行DOM操作,重新渲染页面,最终导致跨站脚本漏洞。

http://hi.baidu.com/p__z/profile 代码中:

(function(){
    var m_aboutme   = document.getElementById("m_aboutme"),
        isIE        = /*@cc_on!@*/false,
        ...
            try{
                if(m_aboutme.getElementsByTagName("embed").length > 0) {    //如果在个人简介中存在embed标签
                    //替换个人简介中的wmode为transparent
                    m_aboutme.innerHTML = m_aboutme.innerHTML.replace(/wmode=('|")(window|opaque)?\1/ig,'wmode="transparent"');
                }
            }catch(e){}        
        };
        
        if(isIE){
            window.attachEvent("onload", onload);
        }else{
            window.addEventListener("load", onload, false);
        }                                                        
    })();


注意m_aboutme.innerHTML = m_aboutme.innerHTML.replace(/wmode=('|")(window|opaque)?\1/ig,'wmode="transparent"');如果被替换的是wmode=('|")...,而进行替换的是wmode="transparent"。这里替换的前后存在一个单引号和双引号的差异,正是因为这种前后标准的不统一导致了跨站脚本。

假设一个HTML标签为<a id="wmode='window' foo='bar'">,属性和值为{id : wmode='window' anything}被JS进行DOM操作后变为<a id="wmode="transparent" foo='bar'">,属性和值为{id:wmode=,transparent: ,foo:bar}。这样就成功地把原来在值中的一串字符串转换到了HTML标签中的属性和对应的值,引起不必要的安全隐患。

<*来源:pz (http://hi.baidu.com/p__z)
  
  链接:http://80vul.com/sobb/sobb-03.txt
*>

测试方法:

警 告

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

<embed ...></embed><img border="0" alt="wmode='window' onerror=alert(/sobb03/) // " class="blogimg" small="0" src=#>

建议:
厂商补丁:

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

http://hi.baidu.com

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