OAuth授权不当导致的Twitter私信读取漏洞($2,940)

2019 年 1 月 15 日 FreeBuf

想像一下这种场景,当你初次用Twitter服务,登录其附属或授权的第三方app应用时,Twitter会按惯例执行OAuth授权验证,如以下这个界面。仔细查看查看,可以看到,Twitter应用会列出在授权登录之后,其会进行(will be able to)和不会执行(will not be able to)的操作。而在其不会执行的操作中,它清楚地列出了:不会读取用户的推特私信(Direct Messages)。真是这样的吗?

但实际是,如果你点击 Authorize app之后,你的推特私信(Direct Messages)将会被Twitter完全读取,和你个人相关的私信聊天内容,如性别、段子笑话、表情包等等将会被Twitter收集得到,从而导致个人信息间接泄露,非常悲剧!换句话说,Twitter附属或其第三方app应用服务,是有权限读取用户推特私信(Direct Messages)内容的,也就是说,我们用户完全被Twitter欺骗了!怎么会像这样呢?一起来听听漏洞发现者Terence Eden的验证和阐述。

漏洞原因

2013年,Twitter官方应用app的用户接入 OAuth授权API 相关私钥(key)和密码(secrect)遭到泄露,被人放到了Github上,这些API密钥信息都用于Twitter官方应用,如Twitter for Android、Twitter for iPhone、Twitter for Google TV、TweetDeck等app的用户接入授权验证。

这种信息泄露导致的问题就是,一些未被Twitter官方认证的第三方app应用可以用这些密钥信息实行假冒,接入Twitter官方应用API。

为了防止第三方app获取这些密钥并使用它们将用户直接重定向到app应用中,Twitter作了 “callback address restrictions”(回调地址限制)的设置,也就是说,这个回调地址会在app配置中要求用户输入一个预先设定的URL地址,告诉用户,当用户用Twitter账号密码登录app之后,将会被重定向到这个URL链接页面,这个URL链接对用户来说,相当于登录后的重定向跳转。

另外,Terence Eden还强调,针对一些用户直接无法访问或嵌入web浏览器的app应用,像命令行应用、嵌入式系统、游戏控制端或某些类型的移动app,Twitter对这些应用的验证授权相对困难,为此,Twitter推出了一种替代性的次要解决方案,那就是使用PIN码验证,用户使用Twitter账号密码登录这些应用后,跳出的不是直接的回调页面(callback url,),而是一个需要进一步验证的7位数PIN码。之后,用户在其app应用中输入这个PIN码作为oauth_verifier,之后即可在后台得到一个access_token,以此继续使用app。在这个PIN验证过程中,Twitter并没有显示出恰当的验证后权限信息,为此可能会对用户造成误导。

总结来说,漏洞发现者Terence Eden对该漏洞有以下几方面的理解:

1.2013年,遭到泄露的Twitter官方应用app用户接入授权API密钥信息,现在仍可被利用;

2.Twitter官方应用和一些其它第三方应用利用这些授权API密钥信息进行OAuth授权,提示界面明确指出“不会读取用户推特私信”,但实际上,这些应用是能读取到用户的推特私信(Direct Messages)内容的;

3.未经Twitter认证的其它第三方应用,在授权接入Twitter API时,会被要求输入一个7位数PIN码,用户按照指示输入后,并未显示完整的Twitter具备权限,对用户造成误导。

PoC

针对该漏洞的以上理解,Terence Eden给出了以下验证性代码,并称在点击Authorize app授权,并输入PIN码后,能读取并打印出自己的推特私信内容:

#!/usr/bin/env pythonimport tweepy# Official Keysconsumer_key    = 'IQKbtAYlXLripLGPWd0HUA'consumer_secret = 'GgDYlkSvaPxGxC4X8liwpUoqKwwr3lCADbz8A7ADU'# Set up the authorisationauth = tweepy.OAuthHandler(consumer_key, consumer_secret)auth.secure = Trueauth_url = auth.get_authorization_url()print 'Visit this URL and authorise the app to use your Twitter account: ' + auth_url# The above URL says that there's no access to DMsverifier = raw_input('Type in the generated PIN: ').strip()auth.get_access_token(verifier)# Full Authfull_auth = tweepy.OAuthHandler(consumer_key, consumer_secret)full_auth.set_access_token(auth.access_token, auth.access_token_secret)api = tweepy.API(full_auth)# Print all the user's Direct Messagesprint api.direct_messages()

漏洞修复和总结

针对该漏洞,重点在于以上代码可读取并打印出自己的推特私信内容,因此Twitter一开始和Terence Eden进行了积极沟通,并认为他们关注的是,第三方app应用程序是否可能在未经用户同意的情况下访问用户数据。另外,Twitter说明,其 Twitter for iOS 和 Twitter for Android 没有显示用户同意对话框的原因在于,因为OAuth是一个基本的技术细节,而不是一个授权认证会话的批准过程。Twitter还声称,他们已经取消Twitter for Google TV 的应用,并将会审查其它第三方app应用,以确定是否有任何app有可能访问他们未被授权访问的数据。

但是,最终待漏洞完全披露后,Twitter的态度有了转变,其在漏洞总结中声称:

漏洞上报者所说的使用PIN码或非预期OAuth流验证机制,我们认为并不会对用户造成误导,另外,我们也不认为用户数据会被Twitter for iPhone 或 Twitter for Google TV 在未授权情况下读取,而且据目前情况来看,没有任何Twitter用户因此漏洞遭受个人隐私信息泄露。

呵呵……但好在最终该漏洞,Twitter还是奖励了Terence Eden $2,940,漏洞原因被HackerOne定义为隐私侵犯。Terence Eden表示,虽然该漏洞很难被攻击者利用,但是,这是一种对用户隐私的欺骗和漠视。尤其是在现今GDPR(通用数据保护条例)的前提下,大公司更应该做出良好典范。

漏洞上报进程

2018-11-06 通过HackerOne上报漏洞;

2018-11-06 提供更多技术性说明和POC代码;

2018-11-15 因美国假期原因,漏洞披露被推后;

2018-11-16 Twitter奖励了$2,940美金;

2018-12-06 Twitter修复了漏洞;

2018-12-14 发表这篇文章。

*参考来源:shksprthreatposthackerone,clouds编译,转载请注明来自FreeBuf.COM

登录查看更多
0

相关内容

Twitter(推特)是一个社交网络及微博客服务的网站。它利用无线网络,有线网络,通信技术,进行即时通讯,是微博客的典型应用。
【ICML2020】用于强化学习的对比无监督表示嵌入
专知会员服务
27+阅读 · 2020年7月6日
干净的数据:数据清洗入门与实践,204页pdf
专知会员服务
160+阅读 · 2020年5月14日
【实用书】流数据处理,Streaming Data,219页pdf
专知会员服务
76+阅读 · 2020年4月24日
【WWW2020-微软】理解用户行为用于文档推荐
专知会员服务
34+阅读 · 2020年4月5日
【资源】100+本免费数据科学书
专知会员服务
105+阅读 · 2020年3月17日
【2020新书】Kafka实战:Kafka in Action,209页pdf
专知会员服务
65+阅读 · 2020年3月9日
Keras作者François Chollet推荐的开源图像搜索引擎项目Sis
专知会员服务
29+阅读 · 2019年10月17日
在K8S上运行Kafka合适吗?会遇到哪些陷阱?
DBAplus社群
9+阅读 · 2019年9月4日
AWVS12 V12.0.190530102 windows正式版完美破解版
黑白之道
29+阅读 · 2019年8月24日
手把手教你用Python做一个哄女友神器,小白可上手
网易智能菌
5+阅读 · 2019年6月15日
Kali Linux 渗透测试:密码攻击
计算机与网络安全
15+阅读 · 2019年5月13日
基于Web页面验证码机制漏洞的检测
FreeBuf
7+阅读 · 2019年3月15日
被动DNS,一个被忽视的安全利器
运维帮
11+阅读 · 2019年3月8日
DiscuzX 3.4 Phar反序列化漏洞
黑客工具箱
8+阅读 · 2019年1月4日
如何用GitLab本地私有化部署代码库?
Python程序员
9+阅读 · 2018年12月29日
95行代码破解极验滑动验证码(附源码)
FreeBuf
11+阅读 · 2018年5月9日
这位程序员为什么要弃用Facebook?
CSDN
5+阅读 · 2017年7月14日
Arxiv
7+阅读 · 2018年11月27日
Arxiv
5+阅读 · 2015年9月14日
VIP会员
相关资讯
在K8S上运行Kafka合适吗?会遇到哪些陷阱?
DBAplus社群
9+阅读 · 2019年9月4日
AWVS12 V12.0.190530102 windows正式版完美破解版
黑白之道
29+阅读 · 2019年8月24日
手把手教你用Python做一个哄女友神器,小白可上手
网易智能菌
5+阅读 · 2019年6月15日
Kali Linux 渗透测试:密码攻击
计算机与网络安全
15+阅读 · 2019年5月13日
基于Web页面验证码机制漏洞的检测
FreeBuf
7+阅读 · 2019年3月15日
被动DNS,一个被忽视的安全利器
运维帮
11+阅读 · 2019年3月8日
DiscuzX 3.4 Phar反序列化漏洞
黑客工具箱
8+阅读 · 2019年1月4日
如何用GitLab本地私有化部署代码库?
Python程序员
9+阅读 · 2018年12月29日
95行代码破解极验滑动验证码(附源码)
FreeBuf
11+阅读 · 2018年5月9日
这位程序员为什么要弃用Facebook?
CSDN
5+阅读 · 2017年7月14日
Top
微信扫码咨询专知VIP会员