啪啪任意进入他人账号(OAuth 2.0无绑定token问题)

啪啪的移动端安全其实是不错的,只是碰巧在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,那是否就以进入他人的啪啪账号?实验证明,是可行的。
 
 
 


 
 
 
 
由于啪啪的代码混淆得比较多,个人时间上不允许进行全脱离模拟,所以在这里也只是在传输过程取了个巧,证明问题就可以了。
 
 
 
(1)配置fiddler2,使得android模拟器等一定可以解密微博api的数据;
 
 
 
(2)在网页端上,以A账号在X应用获取access token H。
 
 
 


 
 
 
 
 
 
(3)在手机上安装啪啪客户端;fiddler设置为返回拦截。
 
 
 
(4)启动啪啪,点击用新浪微博登录,在弹出OAuth平台方的授权页面上输入B账号,并点击授权
 
 
 


 
 
 
 
 
 
(5)在fiddler中,可以找到B账号在啪啪应用获取的access token I。
 
 
 
修改拦截内容,变成A账号在X应用获取到的access token H。
 
 
 


 
 
(6)登录到A账号成功。
 
 
 


 
 
危害性:
 
 
 
这个漏洞主要危害那些存在认证传递和交换的服务,目前比较常见的场景是用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
 
 
 
 
 
其它开放平台,建议进行相关问题的咨询。
 
 

(责任编辑:网络) 本文章原创来自:http://www.hack6.com 黑客流安全网 (转载请保留黑客网站版权。侵权必究)

你可能感兴趣的:(啪啪任意进入他人账号(OAuth 2.0无绑定token问题))