Когда речь идёт о безопасности, процесс сброса пароля — одно из тех мест, где разработчики не могут позволить себе ошибаться. Одна единственная уязвимость может открыть дверь к критическим багам.

Недавно, тестируя приложение Redacted.com, я обнаружил уязвимость перечисления пользователей. Честно говоря, многие программы помечают подобные проблемы как информационные или не входящие в область тестирования. Но иногда то, что кажется «бесполезным», может скрывать серьёзные последствия.

Это история о том, как я начав с «бесполезного» бага пришёл к обнаружению 0-click ATO (account takeover).

Шаг 1 — страница сброса пароля


В приложении была стандартная функция сброса пароля. Вы вводите свой адрес электронной почты, и оно отправляет ссылку для сброса пароля.  

Введя адрес тестовый электронной почты, я как обычно получил ссылку для сброса пароля.

Но когда я попробовал ввести случайный адрес электронной почты вроде testhehhhehe@gmail.com, приложение ответило:

«Мы не можем найти аккаунт с таким адресом электронной почты.»

Это классическая уязвимость перечисления пользователей.

В такой ситуации один из моих друзей однажды сказал:

«Я не тот парень, который репортит о бесполезной х**не»

И, честно говоря, я думал так же. Перечисление пользователей обычно не стоит того, чтобы о нём сообщать. Но моё любопытство не дало мне остановиться на этом.

Шаг 2 — Детальное изучение ссылки для сброса пароля

Когда я проверил свою почту, ссылка выглядела так...

https://redacted.com/reset-password?email=shiohz0test@gmail.com&token=O4AiLBPhZNvr

Она содержала два параметра:

- адрес моей электронной почты

- токен для сброса

Открыв ее, я попал на привычную страницу «Создать новый пароль». Пока ничего необычного.

Шаг 3 — Небольшой эксперимент

Я решил попробовать простой трюк...

Я запросил ещё одну ссылку для сброса на тот же адрес электронной почты (shiohz0test@gmail.com). Когда я получил свежую ссылку с новым токеном, я изменил адрес электронной почты в URL и открыл её. Вместо моего исходного адреса я подставил другой тестовый аккаунт, которым владел:

https://redacted.com/reset-password?email=testshiozhy@gmail.com&token=sYrUIKzYt46

Вуаля!

Страница без проблем загрузилась и позволила мне сбросить пароль для testshiozhy@gmail.com, хотя я никогда не запрашивал сброс для этого аккаунта.

В приложении была серьёзная ошибка. Оно напрямую доверяло параметру email из URL и не проверяло, действительно ли токен сброса принадлежит этому адресу. Это несоответствие позволило мне сбросить пароль другого пользователя без его участия.

Таким образом, имея всего один токен (который я получил для своего аккаунта), я мог захватить любой аккаунт, просто заменив email в ссылке.

Жертве даже не нужно было ничего нажимать. Никакой социальной инженерии. Никакой сложной цепочки эксплойтов. Просто 0-click account takeover.

Токен для сброса пароля должен был истечь примерно через 10 минут и мог использоваться только один раз, что обычно является надёжной мерой безопасности. Но поскольку токен не был корректно привязан к конкретному адресу электронной почты, эта защита была обойдена и всё равно привела к захвату аккаунта.

Обычно вероятность таких багов невелика, но когда они встречаются, последствия могут быть огромными. Именно поэтому важно тестировать даже самые мелкие детали.

То, что сначала казалось бесполезной ошибкой, превратилось в одну из самых серьёзных уязвимостей — полный захват аккаунта. Так что в следующий раз, когда наткнётесь на что-то незначительное, не игнорируйте это. Поиграйте с этим, и кто знает — возможно, вы наткнётесь на уязвимость, меняющую правила игры. Любопытство всегда окупается.

Еще больше познавательного контента в Telegram-канале — Life-Hack - Хакер

Комментарии (4)


  1. bogolt
    27.08.2025 18:51

    Уязвимость печальная, или токен не привязан к почте или привязан но это забыли проверить в коде.


  1. apcs660
    27.08.2025 18:51

    дыра размером с ворота... не так давно знакомый похожую дыру нашел в документ репозитории OpenText / Vignette (старье никому не нужное, но все же еще где то есть) - после ауфентикации обычным пользователем, можно айди админа ставить и делать все что хочешь - аналогичное "джентельменам верят на слово". Изменить только клиента нужно, всех дел.


    1. kompilainenn2
      27.08.2025 18:51

      OpenText

      Будь проклято это говно, которое кто-то к нам затащил в холдинг


  1. rudefovski
    27.08.2025 18:51

    На самом деле, подобная уязвимость довольно часто встречается в проектах, особенно во внутренних, где почему-то к безопасности не такое пристальное внимание