📲 Уязвимости SMS-рассылок и как от них защититься
Отправки SMS встречаются на самых разных сайтах и используются для множества задач: регистрации, восстановления пароля, рассылки промокодов, аутентификации, подтверждения платежей — и множества других важных операций.
При недостаточной защите таких рассылок появляются серьёзные риски. Например, злоумышленник может подобрать код и получить доступ к чужому аккаунту, а вы сожжёте весь баланс на отправку SMS и ваши номера попадут в спам-списки.
Мы в
Metascan уже не раз успешно находили подобные уязвимости, которые грозили значительными рисками — так мы помогли нашим клиентам избежать финансовых и репутационных потерь, связанных с отправкой SMS-рассылок.
🔓 Один из таких сценариев позволял использовать группу слабостей в реализации SMS-рассылки и получить доступы к чужим аккаунтам:
1. Отсутствие рейт-лимита на отправку SMS
POST /api/v1/sms_send
{"phone": 79999999999}
Несмотря на то, что пользователь видит сообщение о возможности повторной отправки SMS только спустя определённое время, при отправке запроса напрямую сервер всё равно принимает его и отправляет новую SMS.
2. Амплификация кода в одном HTTP-запросе
POST /api/v1/sms_confirm
{"code": 0000, "code": 0001, "code": 0002, "code": 0003, ...}
Иногда приложение может обрабатывать несколько кодов за раз в одном HTTP-запросе, что позволяет обойти некоторые проверки на стороне сервера.
3. В комбинации первой и второй уязвимостей можно отослать большое количество SMS и снизить объём необходимых попыток до минимума, в результате чего злоумышленник может обойти проверку SMS-кода и захватить аккаунт пользователя.
📌 Как показывает наша практика, уязвимости в отправке и проверке SMS-кодов до сих пор повсеместны. Мы выделили две ключевых проблемы и способы их решения:
1. Неограниченная отправка SMS
Необходимо убедиться, что все запросы проверяются на стороне сервера, а не только в интерфейсе. К таким проверкам относятся:
• капча
• уникальные CSRF-токены
• ограничение по времени на повторную отправку SMS
• ограничение на отправку множественных SMS на разные номера с одного IP
• инвалидация предыдущего кода при отправке нового
• срок жизни кода — 5 минут или меньше
2. Недостаточная проверка ввода SMS-кода
Функции подтверждения кода могут быть подвержены различным проблемам. Важно осуществлять корректные проверки:
• валидация рейт-лимита на стороне сервера с временным интервалом
• проверка одного кода за раз (предотвращение амплификации)
• не допускать использование одного и того же кода для разных действий
• корректная обработка параллельных запросов (гонок)
• успешный ввод кода должен проверяться на сервере до назначения сессии
• обработка номера по RFC 5341 — без обхода лимитов через служебные поля
Несмотря на простоту отправок SMS, в таких рассылках присутствует много тонкостей, которые стоит учитывать, чтобы не допустить использования особенностей этого функционала злоумышленниками.
#Metascan #pentest #redteam #Metascan_news
Обсуждение 0
Обсуждение не доступно в веб-версии. Чтобы написать комментарий, перейдите в приложение Telegram.
Обсудить в Telegram