啪啪OAuth 2.0无绑定token窜号问

暗月博客 2019年11月21日17:50:19评论389 views字数 2202阅读7分20秒阅读模式
摘要

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

啪啪的移动端安全其实是不错的,只是碰巧在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

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
暗月博客
  • 本文由 发表于 2019年11月21日17:50:19
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   啪啪OAuth 2.0无绑定token窜号问http://cn-sec.com/archives/70882.html

发表评论

匿名网友 填写信息