
Ограничение частоты TOTP в рамках сессии допускает повторные попытки проверки
В версиях FileRise до 3.23.0 неудачные попытки проверки TOTP сохранялись в состоянии PHP-сессии. Счётчик ограничивал попытки в рамках одной сессии, но не сохранялся при создании новых сессий.
Злоумышленник, уже обладающий действующими первичными учётными данными целевой учётной записи, мог перезапустить процесс входа, получить новую сессию с ожидающим входом и восстановить лимит попыток TOTP. Повторение этого процесса позволяло продолжать онлайн-подбор TOTP сверх предусмотренного лимита в пять попыток.
Процесс проверки TOTP хранил счётчик неудач в $_SESSION. После пяти неудачных попыток дальнейшие попытки в этой сессии возвращали HTTP 429.
Однако успешное прохождение первичной аутентификации в новой сессии создавало новое состояние ожидающего входа с новым счётчиком неудач TOTP. Таким образом, неудачи TOTP предыдущей учётной записи не переносились.
Проблема также затрагивала другой обработчик TOTP для ожидающего входа, который не применял тот же устойчивый лимит. Поэтому исправление было применено централизованно для всех путей проверки TOTP при ожидающем входе.
Эта проблема классифицируется как CWE-307: Ненадлежащее ограничение чрезмерного числа попыток аутентификации.
Для эксплуатации требуется наличие действующих первичных учётных данных целевой учётной записи, например пароля, полученного путём повторного использования учётных данных, фишинга или иной компрометации.
Уязвимость не раскрывает учётные данные и не позволяет немедленно обойти TOTP. Она позволяет продолжать автоматизированный подбор TOTP без устойчивого ограничения на уровне учётной записи. Успешный подбор завершает аутентификацию с привилегиями затронутой учётной записи, потенциально включая привилегии администратора.
Учётные записи без включённого TOTP не затронуты этой конкретной проблемой ограничения частоты второго фактора.
FileRise 3.23.0 вводит централизованное постоянное ограничение попыток TOTP:
Существующие учётные записи, секреты TOTP, сессии, установки Docker и конфигурация развёртывания не требуют миграции.
Пользователям следует обновиться до FileRise 3.23.0 или более поздней версии.
Спасибо за ответственное раскрытие и подробные шаги воспроизведения.
Мы рассмотрели процесс проверки TOTP и подтвердили основную проблему. Неудачные попытки TOTP ограничивались только счётчиком PHP-сессии в основном фронтенд-эндпоинте проверки. Поэтому повторение успешного шага первичной аутентификации в новой сессии могло восстановить бюджет попыток второго фактора. В ходе проверки мы также выявили другой обработчик TOTP для ожидающего входа, который не применял тот же счётчик попыток, поэтому исправление было применено централизованно для всех путей проверки, а не только для указанного эндпоинта.
Исправление реализовано для FileRise v3.23.0:
Лимит учётной записи — пять попыток в 15-минутном окне. Общий лимит по источнику намеренно выше — 50 попыток в том же окне, чтобы уменьшить ложные срабатывания для общих сетей. Существующие учётные записи, секреты TOTP, сессии, установки Docker и конфигурация развёртывания не требуют миграции.
Credit: Pervin Zahidli (@ech0void ) Ref : https://github.com/error311/FileRise/security/advisories/GHSA-4hfj-6478-5cv7