挖洞经验 | 利用捐款功能形成重放攻击实现Facebook身份认证绕过分析
字数 1352 2025-08-18 11:39:11
Facebook捐款功能身份认证绕过漏洞分析
漏洞概述
本漏洞存在于Facebook的捐款功能中,允许攻击者通过重放攻击绕过双因素认证(2FA)机制,实现对Facebook账户的持久访问。该漏洞于2019年6月被发现并报告,Facebook在3天内完成了修复。
漏洞原理
核心问题
Facebook在捐款功能的URL会话中使用的身份认证措施不完善,缺少关键的安全参数:
- 没有使用时间戳(timestamp)限制会话有效期
- 一次性参数(nonce)未能真正实现"一次性使用"
- UID(用户ID)与会话绑定不严密
技术细节
当用户通过Facebook App(IOS)发起捐款时,系统生成一个包含以下参数的URL:
https://m.facebook.com/donation/login/?nonce=xxxxxx&uid={USER_ID}
这个URL本应仅在当前会话中有效,但由于缺乏适当的安全措施,导致:
- 该URL可在不同设备和浏览器中重复使用
- 访问该URL后会自动登录到指定账户
- 即使账户密码被更改,通过该URL仍可保持登录状态
- 完全绕过了双因素认证(2FA)保护
漏洞复现步骤
-
获取捐款链接
- 使用Facebook App(IOS)访问公益性组织页面(如:https://www.facebook.com/donate/xxx/xxx/)
- 点击"捐款(donate)"按钮
- 系统跳转到支付页面,URL格式为:
https://m.facebook.com/donation/login/?nonce=xxxxxx&uid=xxxxxx
-
利用漏洞
- 复制生成的捐款URL
- 在未登录Facebook的设备/浏览器中访问该URL
- 随后访问facebook.com主页
- 系统自动登录到该URL对应的Facebook账户
-
持久性验证
- 更改Facebook账户密码
- 清除所有活动会话
- 再次使用原捐款URL仍可登录账户
漏洞危害
- 账户接管:攻击者可完全控制受害者Facebook账户
- 持久访问:即使受害者更改密码,攻击者仍可保持访问权限
- 绕过安全措施:完全规避双因素认证(2FA)保护
- 信息泄露:可访问所有私密信息、好友列表、消息等
- 连锁风险:可能影响与Facebook账户关联的其他服务
漏洞修复建议
-
会话管理改进
- 在认证URL中加入时间戳(timestamp)参数
- 设置合理的会话有效期(如5-10分钟)
- 确保nonce参数真正一次性使用
-
安全验证增强
- 对敏感操作(如登录)强制进行2FA验证
- 实现设备指纹识别,防止跨设备会话转移
- 记录并监控异常登录行为
-
架构设计原则
- 遵循最小权限原则
- 实施深度防御策略
- 关键操作使用多因素认证
时间线
- 2019.6.18 — 漏洞初报
- 2019.6.19 — 漏洞分类
- 2019.6.21 — Facebook修复漏洞
- 2019.6.21 — 修复确认
- 2019.6.21 — 赏金发放
经验教训
- 认证设计:所有认证流程都应考虑重放攻击可能性
- 会话安全:敏感操作的URL应包含足够的安全参数
- 测试覆盖:安全测试需包含跨设备、跨会话场景
- 响应速度:Facebook的快速修复值得借鉴
防御措施
对于开发者:
- 实现完善的会话管理机制
- 关键操作URL应包含时间敏感参数
- 定期进行安全审计
对于用户:
- 警惕分享的敏感链接
- 定期检查账户活动
- 启用登录提醒功能
- 发现异常立即更改密码并注销所有会话