
Самая простая, но в то же время наиболее значимая ошибка, которую я нашёл:
Это ещё одно из моих старых открытий, которым я делюсь. Иногда самые ценные ошибки не являются самыми сложными. Это история о том, как я заработал 12 000 долларов, обойдя ограничение частоты запросов для перебора кода двухфакторной аутентификации (2FA) — уязвимость, которая оказалась удивительно простой, но критической.
Обнаружение
После входа в систему с правильными данными система отправляет пользователю одноразовый пароль (OTP) из 3 цифр для прохождения двухфакторной аутентификации. Пользователю необходимо было ввести правильный OTP в POST-запросе, чтобы продолжить работу.
После анализа структуры POST-запроса я обнаружил интересный параметр, который я назову RAREPARA (не настоящее название). Этот параметр отвечал за ограничение частоты запросов.
Это пример структуры запроса, но он не является реальным.

После входа с правильными учетными данными был присвоен сессионный cookie, после чего последовал запрос на ввод OTP. После ввода правильного OTP был выдан отдельный 2FA-cookie-Token. Для доступа к любой аутентифицированной конечной точке требовались и сессионный cookie, и 2FA-cookie-Token. В запросе выше, я удалил сессионные cookies по причинам конфиденциальности, а токен в этом POST-запросе на самом деле является CSRF-токеном.
Механизм ограничения частоты запросов
Изначально, когда я попробовал несколько неправильных OTP, система ответила сообщением с ошибкой:
You have tried too many times. Please try again later.
Это указывало на то, что приложение предотвращало атаки перебора, ограничивая количество попыток.
Обход защиты
Я попробовал множество методов обхода ограничения частоты запросов, но они не увенчались успехом. Вернувшись к параметру RAREPARA, который привлек мое внимание, мне удалось найти правильный метод.
Я решил поэкспериментировать с запросом, изменяя параметр RAREPARA. После тестирования различных значений я отправил запрос с пустым значением для RAREPARA, этого было достаточно для обхода ограничения частоты запросов! Система больше не ограничивала мои попытки, и я мог перебирать OTP. Это означало, что злоумышленник мог бы непрерывно пробовать различные OTP, пока не получил бы доступ к аккаунту жертвы.

Шаги для воспроизведения
• Войдите с валидными учетными данными, чтобы получить одноразовый пароль (OTP).
• Перехватите POST-запрос с OTP с помощью веб-прокси (например, Burp Suite).
• Определите параметр RAREPARA в запросе.
• Отправьте несколько неправильных попыток ввода OTP и обратите внимание на ответ, предупреждающий об ограничении частоты запросов.
• Измените значение параметра RAREPARA на пустое и повторно отправьте запрос.
• Заметьте, что ограничение частоты запросов исчезло, позволяя неограниченное количество попыток ввода OTP.
• Используйте Burp Intruder для автоматического перебора OTP.
• Получите несанкционированный доступ к учетной записи после нахождения правильного OTP.
Impact
Эта уязвимость была критической, так как создавала угрозу захвата учетной записи. Поскольку большинство OTP обычно состоят из 3 цифр, злоумышленник может перебрать правильный код за считанные секунды. Учитывая простоту эксплуатации и потенциальный ущерб, компания наградила меня премией в размере 12 000 долларов.

Извлеченные уроки
• Всегда проверяйте, как система обрабатывает параметры, связанные с ограничением частоты запросов. Иногда изменение или исключение одного единственного параметра может позволить обойти ограничения.
• Не все критические баги требуют сложной эксплуатации. Это была не сложная атака, но она имела огромное воздействие.
Ещё больше познавательного контента в Telegram-канале — Life-Hack — Хакер
Источник: https://habr.com/ru/articles/889274/