挖洞经验 | 利用捐款功能形成重放攻击实现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本应仅在当前会话中有效,但由于缺乏适当的安全措施,导致:

  1. 该URL可在不同设备和浏览器中重复使用
  2. 访问该URL后会自动登录到指定账户
  3. 即使账户密码被更改,通过该URL仍可保持登录状态
  4. 完全绕过了双因素认证(2FA)保护

漏洞复现步骤

  1. 获取捐款链接

    • 使用Facebook App(IOS)访问公益性组织页面(如:https://www.facebook.com/donate/xxx/xxx/)
    • 点击"捐款(donate)"按钮
    • 系统跳转到支付页面,URL格式为:https://m.facebook.com/donation/login/?nonce=xxxxxx&uid=xxxxxx
  2. 利用漏洞

    • 复制生成的捐款URL
    • 在未登录Facebook的设备/浏览器中访问该URL
    • 随后访问facebook.com主页
    • 系统自动登录到该URL对应的Facebook账户
  3. 持久性验证

    • 更改Facebook账户密码
    • 清除所有活动会话
    • 再次使用原捐款URL仍可登录账户

漏洞危害

  1. 账户接管:攻击者可完全控制受害者Facebook账户
  2. 持久访问:即使受害者更改密码,攻击者仍可保持访问权限
  3. 绕过安全措施:完全规避双因素认证(2FA)保护
  4. 信息泄露:可访问所有私密信息、好友列表、消息等
  5. 连锁风险:可能影响与Facebook账户关联的其他服务

漏洞修复建议

  1. 会话管理改进

    • 在认证URL中加入时间戳(timestamp)参数
    • 设置合理的会话有效期(如5-10分钟)
    • 确保nonce参数真正一次性使用
  2. 安全验证增强

    • 对敏感操作(如登录)强制进行2FA验证
    • 实现设备指纹识别,防止跨设备会话转移
    • 记录并监控异常登录行为
  3. 架构设计原则

    • 遵循最小权限原则
    • 实施深度防御策略
    • 关键操作使用多因素认证

时间线

  • 2019.6.18 — 漏洞初报
  • 2019.6.19 — 漏洞分类
  • 2019.6.21 — Facebook修复漏洞
  • 2019.6.21 — 修复确认
  • 2019.6.21 — 赏金发放

经验教训

  1. 认证设计:所有认证流程都应考虑重放攻击可能性
  2. 会话安全:敏感操作的URL应包含足够的安全参数
  3. 测试覆盖:安全测试需包含跨设备、跨会话场景
  4. 响应速度:Facebook的快速修复值得借鉴

防御措施

对于开发者:

  • 实现完善的会话管理机制
  • 关键操作URL应包含时间敏感参数
  • 定期进行安全审计

对于用户:

  • 警惕分享的敏感链接
  • 定期检查账户活动
  • 启用登录提醒功能
  • 发现异常立即更改密码并注销所有会话
Facebook捐款功能身份认证绕过漏洞分析 漏洞概述 本漏洞存在于Facebook的捐款功能中,允许攻击者通过重放攻击绕过双因素认证(2FA)机制,实现对Facebook账户的持久访问。该漏洞于2019年6月被发现并报告,Facebook在3天内完成了修复。 漏洞原理 核心问题 Facebook在捐款功能的URL会话中使用的身份认证措施不完善,缺少关键的安全参数: 没有使用时间戳(timestamp)限制会话有效期 一次性参数(nonce)未能真正实现"一次性使用" UID(用户ID)与会话绑定不严密 技术细节 当用户通过Facebook App(IOS)发起捐款时,系统生成一个包含以下参数的URL: 这个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应包含时间敏感参数 定期进行安全审计 对于用户: 警惕分享的敏感链接 定期检查账户活动 启用登录提醒功能 发现异常立即更改密码并注销所有会话