Эта статья о том, как я обнаружил уязвимость состояния гонки, которая позволила мне отключить 2FA любой учетной записи HackerOne. Я не знаю, как долго там присутствовала эта уязвимость, пока я ее не заметил и не сообщил их команде.
Вот ограниченное раскрытие информации.
Важно сначала изучить то, как работает 2FA на Hackerone. Если вы включили 2FA в своей учетной записи Hackerone, процесс аутентификации выглядит следующим образом:
Email + Password => ✅ => 2FA code => ✅ => Logged In.
Я не смог найти ни одной уязвимости, чтобы пропустить один из приведенных выше шагов для обхода аутентификации.
Как отключить 2FA?
Чтобы отключить 2FA, вам необходимо выполнить следующие действия:
1. Перейдите и введите свой адрес электронной почты и пароль.

2. Затем нажмите на ссылку «Отменить двухфакторную аутентификацию».

У вас спросят, действительно ли вы хотите сбросить 2FA своего аккаунта, примерно следующим образом:

Если вы согласитесь, то получите такое сообщение:

Это означает, что ваша 2FA будет сброшена автоматически через 24 часа, но вы будете получать предупреждения по электронной почте о сбросе 2FA 4–6 раз с определенным интервалом в несколько часов, как напоминание о необходимости отменить процесс для защиты своей учетной записи, если вы не инициировали его. Если вы не отмените восстановление учетной записи и войдете в нее через некоторое время, вы заметите, что кнопка «Сбросить двухфакторную аутентификацию» отключена, как показано на изображении ниже:

Это означает, что вам нужно отменить запрос на сброс 2FA, чтобы запросить его снова, так как он несет одноразовый характер.
Я заметил, что я могу устроить состояние гонки, когда нажимаю на «Сбросить двухфакторную аутентификацию».
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 success\n __typename\n }\n}\n"}
Мутация TwoFactorReset отвечает за инициацию сброса 2FA для вашей учетной записи HackerOne. Если вы выполните этот HTTP-запрос, вы получите несколько уведомлений о сбросе 2FA, подобных этому:

Если вы проанализируете приведенное выше изображение, вы заметите, что все электронные письма с уведомлениями о сбросе 2FA были отправлены 20 минут назад. Это означало, что состояние гонки сработало.
Но жертва проверит электронную почту и отменит восстановление аккаунта, потому что не инициировала его, и аккаунт будет в безопасности, верно?
НЕТ! Потому что если вы отмените запрос на сброс 2FA, нажав на одну ссылку, то оставшиеся ссылки все еще будут активны, и вам придется нажать на каждую ссылку, чтобы отменить восстановление учетной записи и обезопасить себя.
Но для большинства пользователей это невозможно, потому что никто не находится в сети 24/7. Пользователи не знают, что им нужно переходить по всем ссылкам, чтобы отменить запрос на сброс 2FA для защиты своей учетной записи.
Команда Hackerone оценила мою находку как Medium Severity, и наградила меня:

Исправления уже внесены, и как только пользователь переходит по любой из ссылок отмены сброса 2FA, все остальные ссылки становятся недействительными, и пользователь уведомляется по электронной почте. Таким образом, пользователю не нужно нажимать на каждую ссылку, чтобы защитить свою учетную запись.
Почему это произошло: Для каждого успешного запроса в состоянии гонки, пользователю отправлялось электронное письмо, делая все ссылки на отмену 2FA активными, если вы отмените одну, то остальные все еще активны.
Надеюсь, вам понравилось! Спасибо!
Ещё больше познавательного контента в Telegram-канале — Life-Hack - Хакер