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

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

缺陷编号:wooyun-2012-012689

漏洞标题:QQ互联开放平台QQ登陆oauth授权接口可以劫持access_token

相关厂商:腾讯

漏洞作者: 心伤的胖子

提交时间:2012-09-25 10:01

修复时间:2012-11-09 10:02

公开时间:2012-11-09 10:02

漏洞类型:设计缺陷/逻辑错误

危害等级:高

自评Rank:15

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

Oauth2.0相比较Oauth1.0步骤简化,通过HTTPS和限制回调地址来提高安全性。但是各互联网公司的业务在对Oauth2.0的实现上并没有完全按照Oauth2.0的标准来做。所以就会有一些问题存在。比如对回调地址限制不严格就会造成问题。

详细说明:

详细的步骤如下:
1、结合 WooYun: 去哪儿一处存储型XSS漏洞 这个漏洞(应该审核通过了吧)
2、QQ账号可以登录qunar网站,通过QQ互联开放平台QQ登陆服务
3、Oauth2.0授权模式中的Implicit grant模式只需要client_id和redirect_uri就可以完成账号的授权流程,从而把获取到的access_token返回到redirect_uri地址中
4、构造如下的URL:
http://openapi.qzone.qq.com/oauth/show?which=AuthorizePage&which=ConfirmPage&response_type=token&client_id=100244931&redirect_uri=http%3A%2F%2Flvtu.qunar.com%2Fmobile_ugc%2Fweb%2Falbum.htm%3FalbumId%3D4228&scope=get_user_info,add_topic,add_one_blog,add_album,upload_pic,upload_pic,add_share,add_t,add_pic_t,del_t,get_repost_list,get_info,get_other_info,get_fanslist,get_idollist,add_idol,del_idol,get_tenpay_addr&src=1

client_id为qunar网的QQ互联开放平台应用ID
redirect_uri为接收access_token的回调地址(这个接口中回调地址既信任qunar.com任意二级域名也信任qq.com的任意二级域名,搞不懂为什么要信任qq.com域。所以在qunar.com和qq.com任意域下存在存储型xss漏洞就可以劫持用户的access_token,比如上面url中的http://lvtu.qunar.com/mobile_ugc/web/album.htm?albumId=4228存在xss漏洞)
response_type=token是采用Implicit grant授权模式
scope为申请的权限
5、可以把该地址发给他人诱使别人连接,最方便的利用是结合点击劫持来让用户完成授权流程。从而劫持到用户的access_token,如果结合qq.com域下的xss直接操作表单就可以劫持access_token(不只是说的)。
6、获取到的token可以利用api接口来操作该账号,QQ互联开放平台的api接口可以操作该账号的空间和微博等。

漏洞证明:

下图就劫持到了用户的access_token

修复方案:

1、最好是严格限制redirect_uri,我知道很难。
2、可以在授权页面加入放点击劫持代码,降低风险

版权声明:转载请注明来源 心伤的胖子@乌云


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:10

确认时间:2012-09-25 16:24

厂商回复:

感谢你的反馈,已在处理中。

最新状态:

暂无


漏洞评价:

评论

  1. 2012-09-25 11:07 | xsser 认证白帽子 ( 普通白帽子 | Rank:254 漏洞数:18 | 当我又回首一切,这个世界会好吗?)

    有点儿意思

  2. 2012-09-25 13:00 | 心伤的胖子 ( 普通白帽子 | Rank:308 漏洞数:29 | 因为心伤,所以胖子。)

    @xsser 不给个精华么?^_^

  3. 2012-09-25 13:01 | xsser 认证白帽子 ( 普通白帽子 | Rank:254 漏洞数:18 | 当我又回首一切,这个世界会好吗?)

    @心伤的胖子 所有腾讯的好问题都要给精华的...

  4. 2012-09-25 16:55 | 心伤的胖子 ( 普通白帽子 | Rank:308 漏洞数:29 | 因为心伤,所以胖子。)

    @xsser 说好的精华呢…………

  5. 2012-09-25 17:26 | horseluke ( 普通白帽子 | Rank:116 漏洞数:18 | Realize the dream in earnest.)

    回调地址限制不严格......难不成我们俩讲的是同一件事情?:http://zone.wooyun.org/content/1088

  6. 2012-09-25 17:31 | xsser 认证白帽子 ( 普通白帽子 | Rank:254 漏洞数:18 | 当我又回首一切,这个世界会好吗?)

    @horseluke 他实践了

  7. 2012-09-25 17:54 | 心伤的胖子 ( 普通白帽子 | Rank:308 漏洞数:29 | 因为心伤,所以胖子。)

    @horseluke wooyun上面最早应该是在这里, WooYun: 人人网Oauth 2.0授权可导致用户access_token泄露 zone上面应该也讨论过有几次吧?!@xsser 实践不是正好对应你的签名么?

  8. 2012-09-25 17:59 | horseluke ( 普通白帽子 | Rank:116 漏洞数:18 | Realize the dream in earnest.)

    @心伤的胖子 当时有关联这个bug,现在竟然忘了...-_-||

  9. 2012-10-08 14:06 | horseluke ( 普通白帽子 | Rank:116 漏洞数:18 | Realize the dream in earnest.)

    @xsser@心伤的胖子 提前支付看了。让用户在开放平台设置根域名信任也是目前我向用户推荐的做法,因为不这么做的话,完全无法确保不和其它应用发生冲突(特别是各有各回调保证的时候)。至于信任oauth服务方的根域,似乎是为了各种widget组件调用的方便......总结:无解啊!