这篇文章是关于我如何发现一个竞争条件漏洞,该漏洞允许我关闭任何 HackerOne 帐户的 2FA。我不知道这个漏洞存在了多长时间,直到我注意到并向团队报告。
背景:首先了解 Hackerone 的 2fa 如何运作的背景很重要。
假设您已在 Hackerone 帐户中启用了 2FA,则身份验证流程将如下所示:
电子邮件 + 密码 => ✅ => 2FA 代码 => ✅ => 已登录。
一个安全的流程,我找不到任何漏洞来跳过给定的步骤之一来绕过身份验证。
如何禁用 2FA?
要禁用 2FA,您需要按照给定的步骤作:
-
转到 https://hackerone.com/users/sign_in 并输入您的电子邮件和密码
2. 然后点击链接Rest two-factor authentication
然后,如果您真的要重置帐户的 2FA,系统会提示您,如下所示:
如果您单击,您将收到如下电子邮件:OK
这意味着您的 2FA 将在 24 小时内自动重置,但您将收到有关 2FA 重置 4-6 次的警报电子邮件,每隔一段时间就会提醒您取消恢复,如果您没有启动恢复以保护您的帐户。
假设您不取消帐户恢复,并且如果您在片刻后登录您的帐户,您会注意到“重置双因素身份验证”按钮已禁用,如下图所示:
这意味着您需要取消 2FA 重置请求,以再次请求作为其 1 次作。
我发现当我点击时我可以与请求赛跑Reset two-factor authentication.
HTTP 请求如下所示:
POST /graphql HTTP/2 Host: hackerone.com Cookie: <COOKIES> User-Agent: Mozilla/5.0(Macintosh; Intel Mac OS X 10.15; rv:135.0) Gecko/20100101 Firefox/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"}
该更改负责为您的 HackerOne 帐户启动 2FA 重置。如果您与此 HTTP 请求竞争,则会收到多个 2FA 重置通知,如下所示:TwoFactorReset
如果您分析上图,您会注意到所有 2FA 重置通知电子邮件都是在 20 分钟前发送的,因此这意味着争用条件有效。
但是受害者会检查电子邮件并取消帐户恢复,因为他/她没有启动它,所以帐户会很安全,对吧?错
因为如果您通过单击链接取消 2FA 重置请求,则其余链接仍然有效,因此这意味着您需要单击每个链接以取消帐户恢复以保护您的帐户。
但这对大多数用户来说是不可能的,因为没有人 24/7 全天候在线,而且用户不知道他们需要点击所有链接来取消 2FA 重置请求以保护他们的帐户。
Hackerone 团队将此发现判定为中等严重性,并奖励我赏金:
FIX:该修复程序现已在生产环境中运行,一旦用户链接到任何 2FA 请求取消链接,则所有其他链接都将失效,并通过电子邮件通知用户。因此,用户无需点击每个链接即可保护他们的帐户。
发生原因: 对于每个成功的 Raced 请求,都会向用户帐户发送一封电子邮件,使所有 2FA 取消链接都处于活动状态,如果您取消一个链接,则其他链接仍然有效。
原文始发于微信公众号(安全狗的自我修养):由于争用条件而绕过 HackerOne 2FA
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论