金山快盘手机客户端任意进入他人快盘账号

本节目由@imlonghao 独家赞助复测。

(片头)
云端存储,快捷方便。(同期声顾客:“通过网盘我就可以在安卓看小说了”)
抓包修改,任意进入。(同期声安全研究者:“改几个字节,你的隐私文件就一览无余”)
是什么,让快盘手机版出现漏洞?(同期声快盘竞争对手(某网盘)研发者:“一身冷汗,我们侥幸没让用第三方账号登录而已”)
云时代的认证传递,应该由谁保障?(同期声记者:“当我们还在打口水仗推脱谁该负责的时候,用户已在云中遭受不测”)

即将播出《云安全的认证困惑》。

(以上文体仿CCTV新闻频道《新闻调查》,在此致谢。)

=====================分===隔===符 =================

详细说明:

金山快盘手机客户端,在使用微博OAuth 2.0授权信息换取自己认证信息的过程中,一次性犯下两类常见的逻辑设计缺陷,导致可以任意进入他人快盘账号;但前提是,快盘帐号需要绑定微博。

具体犯下的错误有:
(问题一)OAuth 2.0无绑定token问题:由于OAuth 2.0的“无绑定token”特性(http://article.yeeyan.org/view/50978/307535 ),导致第三方应用在使用平台方的OAuth 2.0授权(authorize)作为自身应用的认证(authenticate)手段时,缺乏一种有效的认证传递校验和来源检查,从而导致只需要拥有B应用的access token,即可登录到A应用所绑定的服务中。

(问题二)使用错误的OAuth授权信息来用于认证交换:使用了uid来认证用户信息,而不是access token
此案例可见:淘网址sina oauth认证登录漏洞
本来想复测其它公司的网盘,但发现他们碰巧都没有提供微博登录,所以侥幸逃脱此问题。但相信一旦开启,估计也很容易中招。故而此种手机客户端威胁云端安全的案例,需要手机开发者(比如说使用了新浪微博sso sdk的开发者)和相关后端留意(见图)。

金山快盘手机客户端任意进入他人快盘账号

而这个漏洞还反映出一个问题:Oauth 2.0作为一个框架协议,其中有许多安全细节实际上需要开发者自行去实现,如果平台方将安全细节全部包揽在身上显然是不合适的;但如果将安全细节下放到应用开发者自行保证,那么就很容易出现实现不周而反噬双方,特别在认证传递和交换上会是一个重灾区。如何划分,成为了一个值得研究的后续方向。但无论我们如何争论,用户和黑客已经等不及了……

=====================分===隔===符==================

漏洞证明:

问题一证明:
OAuth 2.0无绑定token问题,通过拦截新浪微博返回的access token信息,修改成他人的access token和新浪uid,即可进入他人快盘。请注意,这个access token可以使用其它应用获取到的access token。

修改难度中低,因为需要知道受害者在其它应用的access token。此时,一般需要诱骗受害者授权攻击者指定的应用,才可以完成攻击。

(微博授权过程中,我使用了新浪uid 1780xxx登录;然后在下一步登录成功后截获,并将新浪uid 1780xxx在快盘获取的access token“2.00tRjxx”和uid“1780xxx”,替换成新浪uid 1454xxx在其它应用获取的access token“2.00isUxx”和uid“1454xxx”,成功)

金山快盘手机客户端任意进入他人快盘账号

问题二证明:

使用错误的OAuth授权信息获取,通过拦截要往快盘后端服务器api的数据,将新浪uid替换,即可进入他人网盘。

修改难度低,只需要知道新浪uid即可,同时也需要知道该新浪uid曾登录过快盘。

(微博授权过程中,我使用了新浪uid 1780xxx登录;然后在快盘往后端服务器api发送数据前截获,并替换成新浪uid 1791xxxx,成功)

金山快盘手机客户端任意进入他人快盘账号

=====================分===隔===符

修复方案:

危害评定:

就快盘而言,综合认定为“高”。原因如下:

(1)问题一中,要获取用户的access token比较容易,只需要注册第三方应用并诱导用户授权即可。

(2)问题二中,要获取用户的新浪uid极容易,只需要微博搜索即可获知。

(3)定向攻击容易,只需要修改数据包;最终成功率极高,并且只要用户不修改密码,即有永久进入权限。

(4)快盘的用户基数大。

(5)是否有用于access token的来源查询、证明或签名校验,要视乎开放平台的提供情况。如果有,只需要在服务器端修复一般可解决新绑定和登录的漏洞。

修复建议:

(1)手机服务器端,在接收手机客户端的平台认证信息、以换取自家服务的认证凭据时,不能使用没有授权信息的uid来认证换取,而是必须使用具有授权信息的access token来进行;并且必须要对access token进行来源查询、证明或签名校验。

具体而言,已查证的国内各开放平台已知的接口文档如下:

(A)新浪微博开放平台“授权查询”:

http://open.weibo.com/wiki/Oauth2/get_token_info

(B)QQ登录:通用参数中似乎已经进行了此问题的防御(时间问题未验证):
点击此处!

(C)百度开放平台“判定当前用户是否已经为应用授权”(此接口本人未验证是否可防御此问题,请咨询百度开放平台):
点击此处!

(D)人人网“判断用户是否已对App授权”(此接口本人未验证可否可防御此问题,请咨询人人开放平台):

http://wiki.dev.renren.com/wiki/Users.isAppUser

其它开放平台,建议进行相关问题的咨询。

(2)对所有存入的绑定access token进行核查,发现access token中的新浪uid和绑定新浪uid不一致、非快盘appkey授权的access token、过期access token等异常情况均需要全部撤消,要求这些快盘用户重新授权登录。

(3)各开放平台加强教育,提醒开发者注意上述问题

分类:默认分类 时间:2015-03-03 人气:6
本文关键词:
分享到:

相关文章

Copyright (C) quwantang.com, All Rights Reserved.

趣玩堂 版权所有 京ICP备15002868号

processed in 0.050 (s). 9 q(s)