Прошлым месяцем на программе Bug Bounty нашел способ регистрировать аккаунты на несуществующие номера телефонов путём обхода OTP — OWASP A01:2021 (Broken Access Control).
Произошло это из-за неправильной архитектуры веб-приложения. При регистрации нужно подтвердить свой номер телефона кодом из СМС (англ. OTP — One-Time Password). Таким образом система должна убедиться, что регистрирующийся пользователь и правда владеет введённым номером. Но при анализе ответов с сервера я обнаружил, что мне возвращается 200-ый код и accessToken (см. скриншот). Это означает, что данные об аккаунте заносятся в базу данных еще до подтверждения кода из СМС. Мне было достаточно перейти в личный кабинет по ссылке https://<...>/profile через 2-3 минуты, после чего у меня был полный доступ к аккаунту. Причем интересно, почему именно спустя какое-то время (если у вас есть идеи почему так, жду комментарии).
Разработчикам необходимо переработать логику создания аккаунта — сначала подтверждение OTP, а после уже вносить аккаунт в базу данных. Конкретно в данном проекте нет возможности отказаться от подтверждения кода, поэтому этот момент должен быть проработан, иначе можно создавать множество аккаунтов на несуществующие номера.
К сожалению, уязвимость в репорте оказалась дубликатом: ровно месяц назад эту же дыру нашел другой специалист.
#bugbounty #кейс
