当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2013-017390

漏洞标题:腾讯某站下一处跨大域dom xss

相关厂商:腾讯

漏洞作者: 只抽红梅

提交时间:2013-01-16 18:09

修复时间:2013-03-02 18:09

公开时间:2013-03-02 18:09

漏洞类型:xss跨站脚本攻击

危害等级:低

自评Rank:5

漏洞状态:厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2013-01-16: 细节已通知厂商并且等待厂商处理中
2013-01-17: 厂商已经确认,细节仅向厂商公开
2013-01-27: 细节向核心白帽子及相关领域专家公开
2013-02-06: 细节向普通白帽子公开
2013-02-16: 细节向实习白帽子公开
2013-03-02: 细节向公众公开

简要描述:

昨天在zone里面看到“猪猪侠”发的一个帖子以及讨论
http://zone.wooyun.org/content/2361
正好又有sogili大牛的科普《猥琐流之webkit神跨域》
http://zone.wooyun.org/content/2365
其实我所知道更早的应该是前端牛JerryQu的博文《Webkit下最无敌的跨大域方案》
http://www.imququ.com/post/document_domain_bug_in_webkit.html
所以就去google下看能不能找到一处这样的问题。通过 "site:qq.com inurl:domain"参数可以找到一些,见详细说明。

详细说明:

由于上面的文章说的很清楚,我这里就简单描述下:
由于同源策略的限制,document.domain常用来进行跨域做一些事情,所以在腾讯的大部分业务中都有:

document.domain = "qq.com"


这样的代码。
但是有的时候业务需要可能并没有通过js写死在页面中,而是通过js在url中取值来进行设置,比如:
http://a.qq.com/?domain=qq.com
http://b.qq.com/#qq.com
这样在以前本没有任何问题,因为在qq.com域下是没有办法设置document.domain为baidu.com域或者com域的。
但是webkit内核却支持设置到最后一级也就是

document.domain = "com"


好了,开始看我们找到的实例:
http://imgcache.qq.com/qqshow_v3/htdocs/live/popup/361/popup.html?domain=qq.com
这个页面中有如下代码:

var g_sDomain = QSFL.excore.getURLParam("domain");
…………
document.domain = g_sDomain;


我们猜测上面的QSFL.excore.getURLParam函数就是取URL中的domain参数。
在http://imgcache.qq.com/ac/qqshow/qsfl/2_71/core.js这个js中我们找到了QSFL.excore.getURLParam函数,就是和我们猜测的一样。

QSFL.excore.getURLParam = function (sName, sUrl, rCharSet) {
(!sUrl) && (sUrl = window.location.href);
sUrl = sUrl.toString();
sUrl = sUrl.split("#")[0];
var nIndex = sUrl.indexOf("?");
var _value = (nIndex >= 0) ? QSFL.excore.getParam(sUrl.substr(nIndex + 1), sName, "&", "=") : "";
return _value;
};


这样我们就可以通过下面的url来设置document.domain为com
http://imgcache.qq.com/qqshow_v3/htdocs/live/popup/361/popup.html?domain=com
只在webkit内核的浏览器下有效哦,chrome和safari都是webkit的浏览器。

漏洞证明:

http://imgcache.qq.com/qqshow_v3/htdocs/live/popup/361/popup.html?domain=com
直接通过chrome访问这个页面,然后看下document.domain的值就可以看到效果。

qq.jpg


是不是有疑问在实战中如何利用?
我们在我们的任意站点下通过iframe包含这个有漏洞的页面,通过在我们的站点页面下也设置document.domain为com域,这样就突破了同源策略的限制,我们就可以在我们的站点页面向iframe页面注入js代码。
说了这么多实例代码我想就不再需要我给出了吧?

修复方案:

1、document.domain写死为qq.com
2、可以通过location.host来取值

版权声明:转载请注明来源 只抽红梅@乌云


漏洞回应

厂商回应:

危害等级:低

漏洞Rank:5

确认时间:2013-01-17 09:53

厂商回复:

非常感谢您的报告。这个问题我们已经确认,正在与业务部门进行沟通制定解决方案。如有任何新的进展我们将会及时同步。

最新状态:

暂无