Обход 2FA за 12 000 долларов — такой простой, но такой критический

Самая простая, но в то же время наиболее значимая ошибка, которую я нашёл:

Это ещё одно из моих старых открытий, которым я делюсь. Иногда самые ценные ошибки не являются самыми сложными. Это история о том, как я заработал 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/

Опубликовано в категории: Статьи