百度空间个人配置文件跨站脚本漏洞
发布日期: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(网友投票)