找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

1526

积分

0

好友

222

主题
发表于 6 天前 | 查看: 20| 回复: 0

背景

Messenger Kids 账号(“Neo 账号”)专为 13 岁以下儿童设计。每个儿童账号均可由以下人员管理:

  • 一位主要父母
  • 一位额外的家长

这种亲子关系的设计逻辑存在一些特殊之处:

  1. Messenger Kids 允许在未经本人同意的情况下,将任何好友添加为 Neo 账号的辅助家长。添加后,孩子可以直接与该用户聊天。而且,家长永远无法屏蔽 Neo 账号。
  2. 过去,Facebook 应用的一些漏洞曾导致被添加为家长的用户因系统错误而无法自行移除或阻止通信。

这些特性引起了研究者的注意:能否利用此机制,将一个非好友用户直接添加为儿童账号的家长,从而通过 Messenger Kids 应用直接与之通信?起初通过修改 Graph API 请求的尝试并未完全成功。

在 BountyCon 2024 期间,研究者将目光转向了对 GraphQL 端点的全面评估,并发现了关键漏洞。

漏洞详情

通过向特定的 GraphQL 接口发送 POST 请求,可以将任意 Facebook 用户 ID 设置为受控儿童账号的家长。

核心请求载荷如下:

new AsyncRequest('api/graphql/').setData({
  doc_id: 5247402565289912,
  variables: '{"input":{"managing_parent_id":"VICTIM_ID","mutation_action":"ADD_PARENT","neo_approved_user_id":"TEST_KID_ID","actor_id":null}}'
}).send()

漏洞影响:
任何 Facebook 用户(无论是否为好友)均可被添加为攻击者控制的儿童账号的家长。由于家长会自动成为孩子的已批准联系人,攻击者可以直接使用 Messenger Kids 应用程序给受害者打电话或发消息,完全绕过正常的“消息请求”流程。

初步修复与限制:
Meta 对该漏洞进行了首次修复,要求 managing_parent_id(受害者用户 ID)必须与 actor_id(操作者 ID)相等,否则将抛出错误。但此次修复并不彻底。

绕过漏洞分析

首次修复后,研究重点转向了同一 GraphQL Mutation 中的另一个参数:”mutation_action”:”REMOVE_PARENT”。测试发现,即使用户并非当前家长,执行移除操作也会返回成功。这表明后端缺少对父节点存在性的验证

进一步探索不同的操作类型时,发现了一个更关键的 mutation_action

"mutation_action":"REMOVE_PARENT_AND_KEEP_AS_CONTACT"

该操作同样无需好友关系验证,且未检查用户是否已是家长。其效果是直接将指定用户转换为该儿童账号的 Messenger Kids 联系人。

绕过攻击载荷如下:

new AsyncRequest('api/graphql/').setData({
  doc_id: 5247402565289912,
  variables: '{"input":{"managing_parent_id":"VICTIM_ID","mutation_action":"REMOVE_PARENT_AND_KEEP_AS_CONTACT","neo_approved_user_id":"TEST_KID_ID","actor_id":null}}'
}).send()

绕过漏洞的影响更为严重:

  1. 无感添加:受害者不会收到任何被添加为联系人的通知。
  2. 无法自保:受害者无法像之前那样从家长控制面板中自行移除(因为他们并未被列为家长),也难以追踪攻击来源。
  3. 结合伪造身份:由于 Messenger Kids 账号创建时,名称字段缺乏有效的输入验证与清理,攻击者可设置任意特殊字符或名称。结合此漏洞,攻击者可以伪造身份(如冒充好友)向受害者发送消息或拨打电话,且对方无法查看真实资料或屏蔽该儿童账号。

Messenger Kids 名称字段无过滤

总结与修复

Meta 安全团队在收到绕过漏洞报告后,对 Messenger Kids 相关的所有 GraphQL Mutation 及 Graph API 端点实施了全局修复。核心修复措施包括:

  • 强制验证好友关系
  • 增加严格的家长存在性验证
  • 确保只有在满足业务逻辑的前提下才允许执行家长管理操作。

此案例展示了业务逻辑缺陷GraphQL 接口错误结合可能引发的严重安全问题,同时也凸显了即使在被认为不活跃或边缘的产品中,深入的安全测试依然至关重要。目前,唯一遗留的问题是 Messenger Kids 账户名称字段仍缺乏输入清理,这可能成为未来潜在的研究方向。




上一篇:嵌入式开发中SPI、UART、I2C串行通信协议对比与应用场景解析
下一篇:LibrePods开源项目:在Android与Linux设备上解锁AirPods完整功能
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-24 19:22 , Processed in 0.416736 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表