漏洞挖掘 | Facebook电子邮件泄露和账户接管

文化   2024-11-04 12:02   江西  

扫码领资料

获网安教程


Track安全社区投稿~  

赢千元稿费!还有保底奖励~(https://bbs.zkaq.cn)

在进行漏洞挖掘时,我更偏好使用移动应用而非网页,因此在一月份我决定深入研究APK接口,希望能找到一些有价值的内容。

我下载了多个不同版本的Facebook和Messenger APK,提取了所有接口,进行了分类并逐一查看。

在这个过程中,我发现了一个有趣的接口,名为:

POST auth/flashcall_account_recovery

img

该接口需要三个参数: cuidencrypted_phone_numbers 和 cli

CUID基本上是指加密后的电子邮件/电话,可以很容易找到。只需提供受害者的电子邮件,

POST /recover_accounts

img

在响应中,你将获得 CUID。

其次,在查看 Facebook 的密码恢复流程时,我注意到用于发送 Facebook OTP 代码的接口中有一个名为:

should_use_flash_call=false

如果该参数设置为 false,用户将收到一条 OTP 短信;如果设置为 true,则会收到一个电话以进行账户恢复。

在响应中,包含了所需的加密电话号码。

img

我无法确定 cli 参数的具体含义,当时唯一想到的是 “cli~command line interface”。

无法确定后,我尝试使用 null 值作为参数。

当我发送请求时,成功接收到与提供的 CUID 对应的用户 ID。

这意味着攻击者可以提供任意邮箱或手机号作为 CUID,并精确确定该邮箱的所属用户。

img

我很快提交了报告,问题在一天内被评估和修复。

出于好奇,我深入研究了这个端点,因为我从未使用过“电话恢复”功能来重置密码。

在我的界面上看不到此功能,在Google和YouTube上也找不到关于该恢复流程的相关信息。

于是我开始阅读smali文件,试图分析这一恢复流程的工作方式。

该端点的工作方式如下:

1.我输入我的邮箱或手机号。
2.选择电话恢复选项。
3.收到一通电话。
4.该电话号码会自动传递给端点作为输入:

POST /flash_call_recoverycuid=x&enc_phone=x&cli=+1xxxxx
原来 cli 参数的作用是用于提供我们在步骤 3 中接收到电话的号码。
这时一切都说得通了,难怪称为电话恢复功能🤦‍♂️[1]
我猜测 cli 代表类似于呼叫者身份的含义。
在理想情况下,提供所有有效值后,我们会收到如下响应:
{“id”:”UserID”,”nonce”:”XXXX”,"skip_logout_pw_reset":""}
img
这个 nonce 值充当 OTP 代码,接着将其提供给 OTP 验证端点。
OTP 验证端点负责验证 nonce 并设置新密码。
img
在 POST /flash_call_recovery 中,我最初测试了使用受害者的 cuid 和另一个用户的有效 cli 是否可行,但结果并不奏效。
我尝试调整参数,但没有一个组合成功。
现在,我唯一的选择就是对 cli 进行暴力破解。
考虑到 Facebook 在速率限制方面非常严格,甚至在非身份验证的端点上也实施了速率限制,我几乎没有希望。
但令我感到意外的是,这个端点并没有实施速率限制。
因此攻击的步骤如下:

1.用户在闪电电话恢复端点提供受害者的 cuid 和 enc_phone_number
2.对 cli 进行暴力破解。
3.从响应中接收 nonce
4.将 nonce 提供给 OTP 验证端点,并为受害者的账户设置新密码。

下面是一个视频,演示了默认的电话账户恢复过程是如何工作的:
POC流程演示地址:https://youtu.be/UL2nkmzNPg8

References

[1] 🤦‍♂️: https://emojipedia.org/man-facepalming/

声明:⽂中所涉及的技术、思路和⼯具仅供以安全为⽬的的学习交流使⽤,任何⼈不得将其⽤于⾮法⽤途以及盈利等⽬的,否则后果⾃⾏承担。所有渗透都需获取授权

如果你是一个网络安全爱好者,欢迎加入我的知识星球:zk安全知识星球,我们一起进步一起学习。星球不定期会分享一些前言漏洞,每周安全面试经验、SRC实战纪实等文章分享,微信识别二维码,只需25,即可加入。


白帽子左一
零基础也能学渗透!关注我,跟我一启开启渗透测试工程师成长计划.专注分享网络安全知识技能.
 最新文章