您好,我是来自尼泊尔的 Samip Aryal,正在写我的收入最高的报告。这篇文章描述了 Facebook 密码重置流程的特定端点中的速率限制问题,该问题可能允许通过暴力破解特定类型的随机数来接管任何 Facebook 帐户。

背景

所以基本上,几个月来我都没有寻找任何独特的错误。事情是从某一天开始的;在我的工程委员会考试期间,我想……让我们搜索帐户接管;就像字面意思一样!出乎意料;仍然不确定它来自哪里哈哈。现在,我需要寻找一个新的未触及/隐藏/未被注意的端点。当涉及“未触及的端点”时;我认为在网络上查找就像不一样..每个人都在网络上查找。所以我开始我的Android Studio设置,跳进Facebook的主登录页面,并尝试寻找一个,卸载安装了多个版本的Facebook,但似乎没有什么新的/有趣的。然后我想如果我们尝试使用不同的用户代理来查看每个登录页面上服务器的 UI 响应会怎么样?

或者您可以使用扩展。

在密码重置流程中的某处弹出:

易受攻击的端点

等等什么!我在我的其他帐户之一(在我的默认设置中)的重置流程中看到了此选项。但无论如何,这对我来说很快就看起来很有趣,因此我很快就开始测试它。原因有以下三个:

  1. 发送给用户的随机数的活动时间比我预期的要长(约 2 小时)

  2. 在此期间每次都会发送相同的随机数代码。

  3. 输入正确的代码后,我没有看到任何类型的代码失效,但之前有多次无效尝试(与短信重置功能不同)。

这导致我看到了暴力攻击。

技术细节

  1. 选择任何 Facebook 用户帐户,进入其密码重置流程。

2. 只需从重置选项中选择以下选项:

这会将 POST 请求发送到:

POST /ajax/recover/initiate/ HTTP/1.1

与参数;恢复方法 = send_push_to_session_login

3.使用 6 位虚拟代码“000000”发送。

这会向易受攻击的端点创建一个 POST 请求:

POST /recover/code/rm=send_push_to_session_login&spc=0&fl=default_recover&wsr=0 HTTP/1.1

4. “ n ”参数保存随机数。

5. 暴力破解这个从000000 到 999999 的6 位数字。这可以通过多种方式完成。使用 Burp Suite 等网络代理,

a) 将上述请求发送给入侵者,并在“n”中插入 $$ 占位符,以便暴力破解随机数代码,并生成 10 组/选项卡的并发负载请求,每个请求有 10,000 种可能性(000000 到 111111、111111 到 222222,等等)。

b) 或者,自动通过 Burp 的资源池,最大并发请求可以设置在 10-15 之间,这应该足以在大约 1 小时内遍历整个搜索空间。

6. 是的,该端点没有速率限制,因此匹配的代码以302 状态代码响应。使用此代码登录/重置用户帐户的FB帐户密码。

7. 另外,就我而言,“通过 Facebook 通知发送代码”选项在我的 UI 中被隐藏,这可能是由于某种保护,但可以通过更改 IP 地址轻松绕过。

样例POC

这是零点击帐户接管吧?

好吧,事实证明;

→ 对于某些用户组,随机数代码将呈现在通知本身上。

这是零点击案例

→ 对于另一组,需要打开与随机数一起发送的通知,并且代码将在单独的屏幕上呈现。

这是一键案例

根据 Facebook 的说法,在第二种情况下,受害者需要轻按一下才能生成随机数。

* Facebook 回复称,“虽然这确实需要用户交互,但我们认为点击通知的门槛比点击攻击者发送给你的链接要低得多,因此我们决定从 0 点击 ATO 中扣除,而不是根据一键 ATO 的赏金”。

该漏洞造成了巨大影响,因为它可以完全接管 Facebook 帐户。它还帮助我在 2024 年 Facebook 名人堂中排名第一(目前)

facebook.com/whitehat/谢谢

时间线:

2024 年 1 月 30 日 — 2024
年 2 月 1 日发送报告 — 2024 年 2 月 1 日进行预分类
— Facebook 要求澄清 | 无法重现
2024 年 2 月 2 日 — 已发出澄清,表明该问题今天似乎已解决
2024 年 2 月 9 日 — 在该问题的同一电子邮件线程中收到了 BountyCon2024(南非)的邀请;很困惑。
2024 年 2 月 22 日 — 收到一条澄清消息,表明该问题已在我之后的其他人报告后修复,但我是第一个报告的人(经过调查)