Как стать автором
Обновить

Обход 2FA на HackerOne из-за состояния гонки

Время на прочтение3 мин
Количество просмотров1.7K
Автор оригинала: Akash Hamal

Эта статья о том, как я обнаружил уязвимость состояния гонки, которая позволила мне отключить 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 - Хакер

Теги:
Хабы:
Рейтинг0
Комментарии1

Публикации

Ближайшие события