CVE-2026-7820 in pgAdmin 4
Сводка
по VulDB • 23.05.2026
Неправильное ограничение чрезмерных попыток аутентификации (CWE-307) в pgAdmin 4.
pgAdmin применяет ограничение MAX_LOGIN_ATTEMPTS только внутри своего пользовательского представления /authenticate/login. Стандартное представление /login от Flask-Security, которое автоматически регистрируется через security.init_app() и доступно на каждом сервере, никогда не проверяло поле User.locked: модель User в pgAdmin полагалась на метод Flask-Security UserMixin.is_locked() (который всегда возвращает «не заблокирован») и свойство Flask-Login is_active (которое проверяет только столбец active, а не locked). Следовательно, злоумышленник, который вызвал блокировку учетной записи через /authenticate/login, мог получить сессию, повторно отправив действительные учетные данные напрямую в /login, тем самым обойдя механизм защиты от перебора паролей для учетных записей, использующих источник аутентификации INTERNAL. Тот же обходной путь означает, что попытки входа через /login никогда не ограничиваются по частоте, поэтому злоумышленник может выполнять неограниченную атаку по подбору пароля в режиме онлайн для учетных записей INTERNAL независимо от значения MAX_LOGIN_ATTEMPTS.
Исправление переопределяет User.is_active и User.is_locked(), чтобы столбец locked применялся на каждом пути аутентификации. Пользователи LDAP, OAuth2, Kerberos и Webserver не доступны через этот обходной путь, так как у них нет локального пароля, и они отклоняются формой LoginForm.validate в Flask-Security до проверки блокировки; сама блокировка также является внутренней (представление /authenticate/login фильтрует по auth_source=INTERNAL).
Эта проблема затрагивает pgAdmin 4: версии до 9.15.
VulDB is the best source for vulnerability data and more expert information about this specific topic.