灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:2813回复:0

网易开放平台第三方应用oauth强制用户授权漏洞

楼主#
更多 发布于:2013-01-18 15:01
利用此漏洞,在网易开放平台注册的第三方应用可以跳过询问用户是否授权的页面,而直接拿到用户的授权访问用户敏感信息

正常的oauth授权流程应符合如下几个步骤(假设网易用户已经登录):
1,在http://t.163.com/app点击应用
2,访问应用网址,比如:http://158.132.255.52:25006/t163_php_sdk/index_normal.php
3, 应用访问http://api.t.163.com/oauth/request_token取得request token以及requesttoken secret
4, 应用从定向用户到网页,比如http://api.t.163.com/oauth/authenticate?oauth_token=XXXXXXX;oauth_callback=XXXXXXX,询问用户是否授权。此页面详细描述是向什么应用授予什么权限,以帮助用户做出选择
5, 用户点击授权按钮,浏览器向授权服务器http://api.t.163.com/oauth/authenticate 发送相应的同意授权信息(POST命令)
6,应用用已经拿到授权的request token通过http://api.t.163.com/oauth/access_token 换取accesstoken以及access token secret

此漏洞在于恶意的应用可以在第3步后直接忽略第4步,而执行第5步,因此在未得到用户同意(用户不知情)的情况下,拿到用户的授权
漏洞证明:为了验证漏洞的存在,我们创建了一个实验app:
应用名称:oauth_vulnerability_test
应用类型:工具类
Consumer Key:ulHM02MWX0CFx75u
应用创建时间:2012-11-29

我们的试验代码需要用户在点击应用前用已经登录网易,但是只要对代码稍微改进,即使用户在点击应用的时候未登录,我们也可以引导用户登录

访问 http://158.132.255.52:25006/t163_php_sdk/index_normal.php可以体验正常的授权过程

访问 http://158.132.255.52:25006/t163_php_sdk/index_attack.php可以直接观察到这个应用可以未经用户许可,拿到用户授权

图片:20130118105429202.jpg

图片:20130118105429514.jpg


图片:20130118105429531.jpg





修复方案:

建议在第4步用户访问http://api.t.163.com/oauth/authenticate?oauth_token=XXXXXXX;oauth_callback=XXXXXXX,加入随机码,在用户提交同意授权的表单中,需要同时提交这个随机码,以保证这个提交表单确实是用户同意的

喜欢0 评分0
游客

返回顶部