Статья Блог начинающего Bug Хантера. Уязвимости при SMS-аутентификации + Кейсы. Часть 3.1

Всем Салам. Эта статья является неким дополнением и продолжением этой статьи BruteForce, как недооцененный вид атаки (Account TakeOver)

Предисловие
Здесь разберем уязвимости, с которыми можно столкнуться при реализации SMS-аутентификации. Все описанные уязвимости не просто в теории, а со всеми описанными типами уязвимостями встречался на пентестах и на BugBounty.

5.jpg


К SMS-аутентификации переходят очень многие B2C сервисы, так как - это просто для пользователя. Не нужно запоминать какие-либо пароли, просто ввёл номер, получил код и на этом все. Но при разработке допускаются множество ошибок, которые приводят к серьезным уязвимостям и самая критическая из них, это захват аккаунта любого пользователя, зная только его номер телефона.


Разбор видов уязвимостей
На данный момент на практике удачно испробованы следующие виды уязвимостей:
  • Отсутствие Rate Limit
  • Одинаковый код для разных эндпоинтов
  • Привязка Rate Limit к Cookie
  • Отсутствие срока жизни кода
  • Каждый раз одинаковый код
  • Можем предугадать ID сессии
  • Блокировка пользователей
  • SMS-флуд
Давайте разберем каждый из них немного подробнее с реальными кейсами.

1. Отсутствие Rate Limit - это самый простой случай, когда просто нет ограничений на перебор кода, который мы получили. Но также, это достаточно редкий случай, в большинстве случаем есть лимиты на перебор полученного кода и нужно искать обход.

Но был и случай, когда просто не было Rate Limit. Это было в проекте Mailru - my.33slona.ru ( ). В данном случае оставалось просто найти номер, который зареган в сервисе, отправить на него код и перебрать его, без каких-либо ограничений. Ниже 2 скрина, на 1 нахождение номера, который зарегистрирован в сервисе, а на втором уже перебор кода, который был отправлен на этот номер:

1.png


2.png


2. Одинаковый код для разных эндпоинтов - это уже более интересный случай. Встретил его также на сервисе Mailru - worki.ru ( ). В данном случае было 2 эндпоинта, где можно было получать код на номер.

  • Регистрация - /api/user/register
  • Авторизация - /api/user/auth
При авторизации Rate Limit был, поэтому возможности захвата аккаунта не было. При регистрации лимита не было. И вот этим удалось воспользоваться из-за ошибки разработчиков, так как они генерировали для эндпоинта авторизации и регистрации один и тот же код. Использовать это можно было следующим образом:
Авторизация с помощью номера, получал код и начинал перебирать этот код не на эндпоинте авторизации, а на эндпоинте регистрации, тем самым получал такой ответ:


3.png


Что такой номер уже зарегистрирован, код теперь знаем, идем с эти кодом к эндпоинту авторизации, где запросили код и вводим код, тем самым захватываем аккаунт.

3. Привязка Rate Limit к Cookie - такой способ ограничения встречается достаточно часто. Разработчики особо не напрягаясь привязывают Rate Limit к Cookie и как вы уже могли понять обход такого лимита - просто удалить куки и перебрать код. Такая ситуация также было с сервисом Mailru - am.ru ( ) при сбросе пароля, там же и обходилась капча, но сейчас не об этом.

4.png


Для части 3.1 думаю на этом стоит остановится, остальные виды разберем уже в следующей части.
Слайды с OWASP Moscow -
Также поделитесь в комментариях с какими видами уязвимостей сталкивались Вы в SMS-аутентификации. Всем удачи.
 
Прочитал статью, посмотрел видео презентацию с вопросами и прочим. Работа сделано очень интересно, вроде никто еще не рассказывал про дыры с SMS-аутентификацией
 
Я почему-то считал что единственный вариант попасть в sms-авторизации это - прислал код -> рандом попытки, пока код действителен -> некст код.
Видимо нет... Я один заметил что MailRu отличился?)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!