扫码领资料
获网安教程
来Track安全社区投稿~
赢千元稿费!还有保底奖励~(https://bbs.zkaq.cn)
这篇文章讲述了我是如何发现 HackerOne 的一个 竞争条件漏洞,该漏洞允许我 关闭任何 HackerOne 账户的 2FA。我不清楚这个漏洞存在了多久,直到我注意到并向团队报告它。
部分披露的报告:https://hackerone.com/reports/2598548
背景:HackerOne 的 2FA 工作原理
在了解漏洞之前,首先需要了解 HackerOne 双因素认证 (2FA) 的工作方式。
假设你已经在 HackerOne 账户中启用了 2FA,那么身份验证流程如下:
输入邮箱和密码 ✅
输入 2FA 验证码 ✅
成功登录
这是一条安全的认证流程,我无法找到绕过这些步骤以跳过身份验证的漏洞。
如何禁用 2FA?
要关闭 2FA,需要执行以下步骤:
访问 HackerOne 登录页面[1],输入你的邮箱和密码
img
然后点击 重置双因素认证
链接
img
然后,系统会提示您是否确实要重置账户的双因素认证,提示内容如下:
img
如果您点击“OK”,那么您将会收到如下邮件:
img
这意味着您的 2FA 将在 24 小时内自动重置,但您会在几个小时的间隔内多次收到 2FA 重置的提醒邮件(大约 4-6 次),以提醒您如果不是您本人操作,可以取消恢复以保护您的账户。
假设您没有取消账户恢复,并且在一段时间后登录您的账户,您会注意到“重置两步验证”按钮已被禁用,如下图所示:
img
这意味着您需要取消 2FA 重置请求后才能再次请求,因为它是一次性操作。
我发现,当我点击“重置两步验证”时,可以对该请求进行竞态攻击(race condition)。
该 HTTP 请求如下所示:
POST /graphql HTTP/2
Host: hackerone.com
Cookie:<COOKIES>
User-Agent:Mozilla/5.0(Macintosh;IntelMac OS X 10.15; rv:135.0)Gecko/20100101Firefox/135.0
Accept:*/*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: https://hackerone.com/users/sign_in
Content-Type: application/json
X-Csrf-Token:<CSRF TOKEN>
X-Product-Area: user-management
X-Product-Feature: signin
Content-Length:467
Origin: https://hackerone.com
Dnt:1
Sec-Gpc:1
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
Priority: u=0
Te: trailers
{"operationName":"TwoFactorReset","variables":{"product_area":"user-management","product_feature":"signin","email":"<EMAIL>","password":"<PASSWORD>","fingerprint":"<FINGERPRINT>"},"query":"mutation TwoFactorReset($email: String!, $password: String!, $fingerprint: String!) {n createUserTwoFactorReset(n input: {email: $email, password: $password, fingerprint: $fingerprint}n ) {n successn __typenamen }n}n"}
变更(mutation)TwoFactorReset
负责为您的 HackerOne 账户发起 2FA 重置请求。如果对该 HTTP 请求进行竞态攻击(race condition),您将会收到多封 2FA 重置通知,如下所示:
img
如果你分析上面的图片,会发现所有的 2FA 重置通知邮件都是在 20 分钟前发送的,这说明竞态条件成功生效了。
但是,受害者会检查邮件并取消账户恢复,因为他们并没有主动发起该请求,所以账户应该是安全的,对吧?错!
因为当你点击链接取消 2FA 重置请求后,其余的重置链接仍然是有效的。这意味着,用户必须点击所有链接才能彻底取消账户恢复请求,确保账户安全。
但这对大多数用户来说是不现实的,因为没有人能 24/7 全天候在线,并且用户通常不会意识到他们需要点击所有链接来取消 2FA 重置请求,以保护他们的账户。
HackerOne 团队将这一发现判定为中等严重性(Medium Severity),并给予了我漏洞赏金:
img
修复: 该问题现已在正式环境中修复。一旦用户点击任意 2FA 请求取消链接,所有其他链接都会立即失效,并且用户会收到邮件通知。因此,用户不再需要点击每个链接来确保账户安全。
为什么会发生这个问题? 由于每次成功的竞态请求都会向用户账户发送一封邮件,使所有 2FA 取消链接保持有效。如果用户取消了其中一个,其他链接仍然可以使用。
References
[1]
HackerOne 登录页面: https://hackerone.com/users/sign_in
#漏洞挖掘 #SRC #CTF #web安全 #渗透测试 #黑客 #红队 #网络安全
声明:⽂中所涉及的技术、思路和⼯具仅供以安全为⽬的的学习交流使⽤,任何⼈不得将其⽤于⾮法⽤途以及盈利等⽬的,否则后果⾃⾏承担。
原文始发于微信公众号(白帽子左一):利用条件竞争绕过 HackerOne 2FA
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论