Содержание статьи
К сожалению, я не получил согласие на разглашение от компании, однако уязвимость уже устранена. Так что опишу ход тестирования, не называя заказчика.
Pentest Award
Этот текст получил премию Pentest Award 2024 в категории Hack the logic, посвященной поиску логических уязвимостей. Это соревнование ежегодно проводится компанией Awillix.
warning
Статья имеет ознакомительный характер и предназначена для специалистов по безопасности, проводящих тестирование в рамках контракта. Автор и редакция не несут ответственности за любой вред, причиненный с применением изложенной информации. Распространение вредоносных программ, нарушение работы систем и нарушение тайны переписки преследуются по закону.
Первый Account Takeover
При изучении сервиса я нашел несколько интересных аномалий:
- При смене email в настройках профиля доступ к новому адресу не проверяется.
- При регистрации пользователя и логине в его аккаунт API приводит переданный email к нижнему регистру. Но при смене email в настройках профиля он не подвергается никаким изменениям и успешно проходит проверку уникальности, даже если существует близнец с символами в ином регистре.
- При исследовании JWT, который используется для авторизации пользователя, я выяснил, что роль идентификатора пользователя играет email (так как это единственный идентификатор пользователя в пейлоаде JWT).
Получается, что если у почтового адреса есть близнец, то владелец такой почты потенциально сможет подделать токен другого пользователя и получить сессию от его имени.
Пример пейлоада JWT
Первым делом нужно было понять, что произойдет, если будет существовать несколько email-близнецов с символами в разных регистрах и мы попробуем использовать их для логина.
Чтобы разобраться, что происходит на бэкенде сервиса, я создал два аккаунта и email второго поменял на email первого через баг в настройке профиля, предварительно изменив регистр некоторых букв. При этом пароли у аккаунтов были разными.
При попытке войти с данными первого пользователя (того, который был зарегистрирован раньше) мы успешно попадаем в его аккаунт. Если же использовать данные второго пользователя, получаем ошибку Invalid Credentials.
Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее