安全研究:啪啪OAuth 2.0无绑定token窜号问题 |

  • A+
所属分类:Seay信息安全博客

显示不全请点击全屏阅读

啪啪的移动端安全其实是不错的,只是碰巧在OAuth 2.0协议的实现上躺枪了。囧,OAuth 2.0还有多少个坑大家还得中啊?Eran Hammer,你画圈圈诅咒千万别应验……

此案例在公开后,各开放平台、以及依赖各OAuth平台登录的客户端开发者(典型如手机应用)可以注意一下。理论上,遇到此问题的概率不甚大,至少我半个多月断断续续地大海捞针,才找到一两家存在此问题。

该漏洞原型可见2012年6月份由微软研究组报给IETF的邮件安全案例:http://www.ietf.org/mail-archive/web/oauth/current/msg09270.html

在OAuth协议上,该漏洞分属OAuth 2.0无绑定token问题:由于OAuth 2.0的“无绑定token”特性(http://zone.wooyun.org/content/674 ),导致第三方应用在使用平台方的OAuth 2.0授权(authorize)作为自身应用的认证(authenticate)手段时,缺乏一种有效的认证传递校验和来源检查,从而导致只需要拥有B应用的access token,即可登录到A应用所绑定的服务中。
在漏洞本质上,该漏洞分属于认证交换的信任检查问题:当攻击者给出一个认证凭据时,如果服务器没对此认证凭据进行来源等校验,那么攻击者就能成功完成认证交换,从而造成问题。(可以类比“xss盲打后台获得cookies登录”来理解)
啪啪手机客户端极度依赖OAuth平台登录,因此它就容易产生这种问题。啪啪的登录流程可简化如下:
(1)用户点击用新浪微博或者QQ登录,将弹出OAuth平台方的授权页面
(2)用户点击授权后,啪啪客户端获得OAuth平台方给出的access token
(3)啪啪客户端将此access token上报给api.papa.me接口,以获取啪啪的认证字符串
(4)啪啪得到此认证字符串后,即有权限操作绑定的啪啪数据。
那么这个问题就在于,如果有方法可以恶意替换OAuth平台方给出的access token,那是否就以进入他人的啪啪账号?实验证明,是可行的。
安全研究:啪啪OAuth 2.0无绑定token窜号问题 |
由于啪啪的代码混淆得比较多,个人时间上不允许进行全脱离模拟,所以在这里也只是在传输过程取了个巧,证明问题就可以了。
(1)配置fiddler2,使得android模拟器等一定可以解密微博api的数据;
(2)在网页端上,以A账号在X应用获取access token H。
安全研究:啪啪OAuth 2.0无绑定token窜号问题 |
(3)在手机上安装啪啪客户端;fiddler设置为返回拦截。
(4)启动啪啪,点击用新浪微博登录,在弹出OAuth平台方的授权页面上输入B账号,并点击授权
安全研究:啪啪OAuth 2.0无绑定token窜号问题 |
(5)在fiddler中,可以找到B账号在啪啪应用获取的access token I。
修改拦截内容,变成A账号在X应用获取到的access token H。
安全研究:啪啪OAuth 2.0无绑定token窜号问题 |
(6)登录到A账号成功。
安全研究:啪啪OAuth 2.0无绑定token窜号问题 |
危害性:
这个漏洞主要危害那些存在认证传递和交换的服务,目前比较常见的场景是用OAuth登录到自家的服务中可能会有这个疏漏。
就啪啪而言,综合认定为“中高”。原因如下:
(1)要获取用户的access token很容易,只需要注册第三方应用并诱导用户授权即可;
(2)定向攻击的最终成功率极高。
(3)啪啪的用户基数大。
(4)是否有用于access token的来源查询、证明或签名校验,要视乎开放平台的提供情况。如果有,只需要在服务器端修复即可解决此问题。
修复建议:
(1)手机客户端有关认证交换的主体部分,一定要有一个服务器把关,这是最基础的。
(2)手机服务器端在接收手机客户端的access token来对换取自家服务的认证凭据时,必须对access token进行来源查询、证明或签名校验。
具体而言,已查证的国内各开放平台已知的接口文档如下:
(A)新浪微博开放平台“授权查询”:
http://open.weibo.com/wiki/Oauth2/get_token_info
(B)QQ登录:通用参数中似乎已经进行了此问题的防御(时间问题未验证):
http://wiki.opensns.qq.com/wiki/%E3%80%90QQ%E7%99%BB%E5%BD%95%E3%80%91OpenAPI2.0%E8%B0%83%E7%94%A8%E8%AF%B4%E6%98%8E#2._.E8.B0.83.E7.94.A8OpenAPI.E6.8E.A5.E5.8F.A3
(C)百度开放平台“判定当前用户是否已经为应用授权”(此接口本人未验证是否可防御此问题,请咨询百度开放平台):
http://developer.baidu.com/wiki/index.php?title=docs/oauth/rest/file_data_apis_list#.E5.88.A4.E5.AE.9A.E5.BD.93.E5.89.8D.E7.94.A8.E6.88.B7.E6.98.AF.E5.90.A6.E5.B7.B2.E7.BB.8F.E4.B8.BA.E5.BA.94.E7.94.A8.E6.8E.88.E6.9D.83
(D)人人网“判断用户是否已对App授权”(此接口本人未验证可否可防御此问题,请咨询人人开放平台):
http://wiki.dev.renren.com/wiki/Users.isAppUser
其它开放平台,建议进行相关问题的咨询。
 

作者:horseluke

 

Tags:

安全分析,

如果您喜欢我的博客,欢迎点击图片定订阅到邮箱填写您的邮件地址,订阅我们的精彩内容: 也可以点击链接【订阅到鲜果】

如果我的想法或工具帮助到了你,也可微信扫下方二维码打赏本人一杯咖啡
安全研究:啪啪OAuth 2.0无绑定token窜号问题 |