挖洞经验 | Facebook的Gmail验证机制存在的CSRF漏洞
字数 1194 2025-08-18 11:38:52
Facebook Gmail验证机制CSRF漏洞分析报告
漏洞概述
本报告详细分析了Facebook在使用Gmail/G-Suite账户验证新创建Facebook账户时存在的CSRF(跨站请求伪造)漏洞。该漏洞允许攻击者以最小用户交互方式利用受害者邮箱验证其注册的Facebook账户,最终获得Facebook官方$3000美金的漏洞奖励。
漏洞背景
Facebook提供两种使用Gmail/G-Suite账户验证新创建账户的方式:
- 接收5位数验证码并在Facebook网页输入
- 通过OAuth授权跳转登录
第一种方式由于Facebook强大的安全防护(Checkpoint设备和速率限制)难以绕过,因此研究人员将重点放在第二种OAuth登录机制上。
漏洞细节
OAuth登录流程缺陷
OAuth登录链接格式如下:
https://accounts.google.com/o/oauth2/auth?
client_id=15057814354-80cg059cn49j6kmhhkjam4b00on1gb2n.apps.googleusercontent.com
&state=ARf8Zzq50032sck96TSFssFhWVvMUWO7KEJlq3n3_7Yp73WcWvlpyFn1dpdoUGv5QOLAn2ffrRZ_L_3ZfAncV_I0Ihog80LabpToEfHUIgfzBK720-pGRNbXGeYkETOwjeCfbsl70shdjuLnp3jC4dIsn-xPTwoggineLFh34F61bbYGsg
&response_type=code
&redirect_uri=https%3A%2F%2Fwww.facebook.com%2Foauth2%2Fredirect%2F
&scope=openid+email
&login_hint=victim_email@gmail.com
关键问题:
state参数本应作为CSRF令牌,用于验证跨站请求的合法性- 该令牌本应绑定到生成它的客户端浏览器(如Firefox)
- 实际实现中,该令牌可在任何客户端浏览器中有效使用
攻击原理
攻击者可构造恶意网页实现以下攻击链:
-
攻击者账户预登录:
- 使用Facebook一键式登录功能在受害者浏览器中预先登录攻击者账户
- 通过嵌入以下链接的IFrame实现:
https://www.facebook.com/recover/password/?u=100008421723582&n=232323&ars=one_click_login&fl=one_click_login&spc=1&ocl=1&sih=0
-
诱导受害者点击OAuth链接:
- 将构造好的OAuth链接嵌入恶意网页
- 受害者点击后,其邮箱(victim_email@gmail.com)将被用于验证攻击者的Facebook账户
-
清理痕迹:
- 使用以下链接退出攻击者账户:
https://m.facebook.com/logout.php?h=17AfealsadvYomDS
- 使用以下链接退出攻击者账户:
漏洞复现步骤
-
构造包含以下元素的恶意网页:
- 攻击者账户一键登录的IFrame
- 包含固定state参数的OAuth登录按钮
- 账户退出链接
-
诱导受害者访问该网页并点击OAuth按钮
-
系统将使用受害者邮箱完成攻击者Facebook账户的验证
漏洞危害
虽然该漏洞危害有限,但暴露了以下安全问题:
- OAuth流程中CSRF令牌验证不严格
- 第三方登录机制可能被滥用
- 最小用户交互即可完成账户验证
修复建议
- 严格绑定CSRF令牌与生成它的客户端会话
- 增加OAuth流程中的用户确认步骤
- 对state参数实施一次性使用策略
- 增强OAuth跳转过程中的上下文验证
时间线
- 2019.5.10 : 漏洞初报
- 2019.5.17 : Facebook跟进调查
- 2019.5.31 : Facebook修复
- 2019.6.19 : 发放$3,000奖励
经验总结
- 第三方OAuth机制需要严格验证所有安全参数
- CSRF防护不能仅依赖令牌存在,还需验证其使用上下文
- 身份验证流程中的每个环节都需要考虑可能的滥用场景
- 最小用户交互设计可能带来安全风险,需要平衡安全与便利
该案例展示了Web应用中第三方认证机制可能存在的安全隐患,随着OAuth等机制的广泛应用,此类问题值得开发者和安全研究人员高度关注。