漏洞概要 关注数(24) 关注此漏洞
缺陷编号:wooyun-2010-0197
漏洞标题:腾讯单点登录系统跨域劫持漏洞 Ⅱ
相关厂商:腾讯
漏洞作者: rayh4c
提交时间:2010-08-15 00:56
修复时间:2010-09-14 03:00
公开时间:2010-09-14 03:00
漏洞类型:设计缺陷/逻辑错误
危害等级:高
自评Rank:20
漏洞状态:厂商已经确认
漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]
Tags标签: 无
漏洞详情
披露状态:
2010-08-15: 细节已通知厂商并且等待厂商处理中
2010-08-15: 厂商已经确认,细节仅向厂商公开
2010-08-25: 细节向核心白帽子及相关领域专家公开
2010-09-04: 细节向普通白帽子公开
2010-09-14: 细节向实习白帽子公开
2010-09-14: 细节向公众公开
简要描述:
腾讯单点登录系统在安全架构上存在安全缺陷,黑客可以轻易通过一些漏洞跨域劫持单点登录系统,从而获取客户端QQ所有相关服务的权限。细节补充:和上次,上上次的漏洞一样,可以通过网页挂马的方式远程获取QQ客户端的clientkey.
详细说明:
单点登录系统网页的javascript的跨域设置是通过点击按钮的事件触发的,如下流程:
http://imgcache.qq.com/ptlogin/ac/v7/js/xui.js
--------------------------------------------------------
if (!flag) {
g_domain = "qq.com"
}
没有FLAG参数,G_DOMAIN设置成QQ.COM.
.......
function unloadpage(){
document.domain = g_domain;
unloadpage函数进行跨域设置
.......
function hummer_login(E, D, A, F){
if (A == "") {
A = "jump"
}
var C = "http://ptlogin2." + D + "/" + A + "?clientuin=" + E.uin + "&clientkey=" + E.key + "&keyindex=9";
if (F != null && F != "") {
var B = decodeURIComponent(F);
if (B.indexOf("#") > -1) {
B = B.replace(/#/g, "%23")
}
C += ("&" + B)
}
switch (parseInt(g_qtarget)) {
case 0:
unloadpage();
parent.location.href = C;
break;
页面转跳前运行 unloadpage()函数
........
-------------------------------------------------------
黑客可以直接IFRAME单点登录系统的网页,先通过设置location全局变量让网页转跳失败,然后再通过腾讯网站任意的一个XSS漏洞,跨域获取用户的clientkey。
同局域网内可以直接用clientkey使用单点登录系统,非局域网用户可以强制用户单点登录获取用户的session。
漏洞证明:
真正的攻击场景需要腾讯网站的一个XSS配合,攻击方式可以做到用户在随便在任意一个网站点击链接,就可以获取clientkey!
下面给一个POC,完美EXP太H太暴力了,就不给了:
修复方案:
防止单点登录系统服务被非信任域引用。
版权声明:转载请注明来源 rayh4c@乌云
漏洞回应
厂商回应:
危害等级:高
漏洞Rank:20
确认时间:2010-08-15 09:04
厂商回复:
收到,我们尽快确认
最新状态:
2010-08-24:已修复