白帽故事 · 2023年8月23日 0

【$25,300】绕过 Facebook 双因素身份验证

背景介绍

今天分享国外一位名叫 Bassem M Bazzoun 在 2023 年韩国首尔举行的 Meta Bug 赏金研究人员会议上发现 Facebook 中的双因素身份验证绕过漏洞的故事,最终该白帽获得了 25,300 美元的奖金,并在排行榜上排名第二。如果你对技术细节很感兴趣,那么本篇文章会非常对你胃口!

Meta Bug 赏金研究人员会议

去年六月,白帽小哥收到了 Meta(以前叫 Facebook)的邀请,参加年度研究人员会议,即 Meta Bug Bounty 研究人员会议(以前叫 BountyCon)。 Meta bug 赏金计划、Google bug 赏金计划等项目中最有成就的研究人员会获得独家邀请参加会议;会议包括现场黑客秀、内容丰富的演讲以及与研究人员和 Meta 安全团队间的宝贵交流机会。

会议前三周,漏洞预提交窗口打开,让研究人员有机会提前提交安全漏洞,白帽小哥将主要精力集中在 Facebook 的严重漏洞上,因此,他这次的重点锁定在搜索、帐户接管、2FA 绕过和联系点泄露相关的漏洞。

故事开始

在深入研究之前,要明白 Facebook 假设受害者的电子邮件地址和密码是为 2FA 绕过而设置的, 2FA 绕过的目的是防止黑客可以直接访问你的帐户,即使他们窃取你的登录凭证,他们仍会遇到双因素身份验证,因此在收到正确验证码之前黑客是无法进入你的帐户的。

于是白帽小哥开始深入研究 Facebook 和 Instagram 的登录页面以及恢复流程,在 Instagram 的注册页面那里白帽小哥观察到以下行为:当你注册创建新的 Instagram 帐户并输入与现有帐户相同的电话号码和密码时,Instagram 允许你登录现有帐户而不是创建新帐户。

展示如下:

假设你已经拥有一个具有登录凭证的 Instagram 帐户(例如:电话号码:+1123456 密码“password123”)

如果你尝试使用 +1123456 电话号码和你帐户的相同密码创建新的 Instagram 帐户时,Instagram 将允许你登录现有帐户,而不是创建新帐户。

此时你首先想到的是什么?你会尝试使用受害者的登录凭证创建一个 Instagram 帐户,看看 Instagram 是否允许你登录受害者帐户而不是创建新帐户,并且可能不需要 2FA 代码。然而,这种方法行不通。原因是让你登录而不是创建新帐户的行为与特定设备和网络相关,换句话说,只有你之前已经从该设备/网络登录过,它才有效。

在花了几天时间研究和测试这些端点后,白帽小哥在 Instagram 的注册页面上发现了一个缺少速率限制的端点。该端点负责使用给定的电话号码和验证码创建新的 Instagram 帐户,通过暴力破解验证码,白帽小哥能够创建一个链接到目标受害者电话号码的新 Instagram 帐户,由于仍然无法绕过 2FA,而只是绕过电话号码确认,因此该漏洞只能获得大约 3000 美元的漏洞赏金。

于是白帽小哥继续研究并尝试 2FA 绕过,经过一番研究后,发现位于 Facebook 帐户中心,如果将新创建的 Instagram 帐户与 Facebook 帐户连接,则 Instagram 帐户中确认的电话号码(受害者号码)可能会转移到攻击者的 Facebook 帐户,而无需重新验证电话号码,鉴于该电话号码已在 Instagram 上得到确认,白帽小哥推断这种转移也许存在缺陷。

最终,白帽小哥的想法被证明是可行的!链接Instagram账户成功将电话号码转移至账户中心,因此,白帽小哥可以将电话号码添加到自己的 Facebook 帐户,而不会被要求重新验证提示,将电话号码添加到白帽小哥的 Facebook 帐户时,将会从受害者的帐户中删除该电话号码,这将禁用 2FA! 并且双因素身份验证也会被禁用/删除!

白帽小哥在凌晨 5:00 左右发现了这个 2FA 绕过漏洞,并叫醒了他的兄弟 (Kassem Bazzoun) ,因为过去几天他们一直在讨论是否能够将漏洞升级为 2FA 绕过漏洞,兴奋的心情让他们一直睡到了上午 9:00,随后白帽小哥便向 Facebook 上报了该漏洞。

下图总结了漏洞攻击是如何进行的:
file

file

复现步骤

步骤如下:
1-发送验证码到目标受害者手机号码:

POST /api/v1/accounts/send_signup_sms_code/ HTTP/2
Host: i.instagram.com
-other headers-

signed_body=SIGNATURE.{
  "phone_id": "redacted",
  "phone_number": "TARGET_PHONE_NUMBER",
  "guid": "redacted",
  "device_id": "redacted",
  "android_build_type": "release",
  "waterfall_id": "redacted"
}

2- 暴力破解验证码,使用受害者的电话号码创建 Instagram 帐户:

POST /api/v1/accounts/create_validated/ HTTP/2
Host: i.instagram.com
---Other headers

signed_body=SIGNATURE.{
"verification_code": "CODE_TO_BRUTE_FORCE",
"enc_password": "ENCRYPTED_PASS",
"phone_number": "VICTIM_PHONE_NUMBER",
"username": "USERNAME_OF_THE_NEW_ACCOUNT_TO_CREATE",
"first_name": "",
----other params
}

3- 前往 https://accountscenter.facebook.com/ 并将第 2 步中创建的 Instagram 帐户与攻击者的 Facebook 帐户关联(“添加帐户”),这会将第 2 步中受害者的电话号码转移到帐户中心“个人资料”

file

4- 现在,受害者的电话号码将显示在“个人详细信息”部分,单击“个人详细信息”,然后将电话号码添加到攻击者的 Facebook 帐户,Facebook 不会要求重新验证电话号码,此步骤将从受害者 Facebook 帐户中删除电话号码,从而禁用 2FA!

file

Facebook 最终奖励了白帽小哥 20,000 美元,这是 2FA 绕过 + Hacker Plus Bonus + Conference Bonus 的最高奖金。 (总赏金为 25,300 美元)

file

file

感谢阅读,原文来源:https://medium.com/@bazzounbassem/bypass-two-factor-authentication-of-facebook-accounts-25-300-7ae152d7836a