Казалось бы, что может быть необычного в таком привычном функционале, как восстановление пароля?
Но за обычной кнопкой на фронте скрывается порой то , что может удивить.
О таких багах, связанных с логикой сброса пароля, которые были найдены при реальных пентестах, и пойдет речь в данном посте 🔽
‼️ В данном кейсе при нажатии на кнопку отправлялся следующий запрос
{"email":"user@test.com","url":"http://domain.com/password-reset"}'И на указанный емэил приходит письмо с предложением пользователю сменить пароль (пример этого письма на фото к посту).
Думаю, всем сразу же стало очевидно, что в запросе уязвимый параметр
url, изменив который, мы сможем заставить пользователя перейти на контролируемый злоумышленником домен. Таким образом, пользователю пришло бы тоже самое письмо на почту, с той же самой кнопкой "Восстановить пароль", но нажав на нее, он перешел бы на контролируемый злоумышленником домен, куда мог бы ввести свой старый пароль.‼️ Данный баг чем-то похож на предыдущий, но импакт от него посущественнее. Что ж опять перехватываем запрос после нажатия "Reset Password" и видим следующее
{"message":"To reset your password click https://domain.com/reset-password?hash=hash", "subject":"Password Recovery", "to_recipients":"user@test.com"}И сразу же бросается в глаза, что не просто ссылка для восстановления пароля контролируется пользователем, а все параметры письма. Не долго думая, пробуем изменить параметры запроса.. И неужели...
Мы получили возможность от легитимной почты заказчика отправлять письма любого содержания кому-угодно. Импакт можно себе представить.. Наверное, нет лучшей находки для начала фишинговой рассылки.
‼️ Последний баг, про который хотелось бы рассказать, имеет самый огромный импакт, а именно полный Account Takeover через функционал восстановления пароля. Главным спонсором этого бага был всем известный HackTricks . Идея была очень простая... При отправке запроса на восстановления пароля
{"email":"user@test.com"}можно было передать несколько емэйлов через массив, что выглядело следующим образом
{"email":["evil@test.com","user@test.com"]}После чего на две почты приходило два одинаковы письма, с идентичными токенами для восстановления пароля. Таким образом, зная почту пользователя, можно было осуществить полноценный захват аккаунта.
