CVE-2026-7820
pgAdmin 4: Account-lockout bypass via Flask-Security default /login view
Что произошло
Improper restriction of excessive authentication attempts (CWE-307) in pgAdmin 4. pgAdmin enforces MAX_LOGIN_ATTEMPTS only inside its custom /authenticate/login view. Flask-Security's default /login view, which is registered automatically by security.init_app() and is reachable on every server, never consulted the User.locked field: pgAdmin's User model relied on Flask-Security's UserMixin.is_locked() (which always returns 'not locked') and Flask-Login's is_active (which only checks the active column, not locked). An attacker who triggered an account lockout via /authenticate/login could therefore obtain a session by re-submitting valid credentials directly to /login, defeating the brute-force-protection control for accounts using the INTERNAL authentication source. The same bypass also means that login attempts via /login are never rate-limited, so an attacker can perform an unbounded online password-guessing attack against INTERNAL accounts regardless of MAX_LOGIN_ATTEMPTS. Fix overrides User.is_active and User.is_locked() so the locked column is enforced on every authentication path. LDAP, OAuth2, Kerberos, and Webserver users are not reachable by this bypass because they have no local password and are rejected by Flask-Security's LoginForm.validate before the locked check; the lockout itself is also internal-only (the /authenticate/login view filters by auth_source=INTERNAL). This issue affects pgAdmin 4: before 9.15.
Что это значит
В источнике описана ошибка безопасности в перечисленных продуктах. Фактический риск зависит от установленной версии, конфигурации и доступности компонента; проверьте условия в первичном бюллетене.
Что делать
1. Проверьте, затронуты ли вы
Соберите инвентаризацию и сравните с таблицей затронутых версий. Эти команды только показывают установленные компоненты и сами по себе не доказывают наличие CVE.
dpkg-query -W -f='${Package} ${Version}\n'rpm -qa --qf '%{NAME}\t%{VERSION}-%{RELEASE}\n'Get-HotFix | Select-Object HotFixID, InstalledOn
2. Установите исправление
Сверьте точный продукт и версию с бюллетенем вендора. Установите указанное в нём исправление после резервного копирования и проверки совместимости. Подтверждённая целевая версия в источниках отсутствует.
3. Временные меры
До проверки бюллетеня ограничьте доступ к затронутому компоненту доверенными узлами. Оцените сегментацию и отключение ненужных интерфейсов с владельцем сервиса; универсального правила WAF для этой CVE не подтверждено.
4. Проверьте следы эксплуатации
Проверьте аномальные входы, новые учётные записи, ошибки и необычные дочерние процессы в затронутом сервисе. Публичные проверенные правила обнаружения не включены в запись; отсутствие сигналов не доказывает отсутствие компрометации.
5. После исправления
- Проверьте фактическую версию и результат установки по бюллетеню.
- При необходимости перезапустите сервисы в согласованное окно.
- Повторите проверку сканером и функциональные проверки.
- Зафиксируйте результат, дату, владельца и оставшийся риск.
Продукты и затронутые версии
pgadmin.org / pgAdmin 4
{
"status": "affected",
"version": "0",
"lessThan": "9.15",
"versionType": "custom"
}pgadmin / pgadmin_4
{
"status": "affected",
"version": "*",
"versionEndExcluding": "9.15"
}cpe:2.3:a:pgadmin:pgadmin_4:*:*:*:*:*:postgresql:*:*
pgadmin4 PyPI
{
"status": "affected",
"version": "*",
"versionEndExcluding": "9.15"
}CVSS: оценки и векторы
CVSS 3.1 · cve6.5
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N
CVSS 4.0 · cve6.9
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N
CVSS 4.0 · f86ef6dc-4d3a-42ad-8f28-e6d5547a50076.9
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
CVSS 3.1 · f86ef6dc-4d3a-42ad-8f28-e6d5547a50076.5
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N
Источники и ссылки
Происхождение полей
{
"cwes": [
"cve",
"nvd"
],
"epss": {
"source": "epss",
"received_at": "2026-11-02T21:14:43.235590+00:00"
},
"title": {
"source": "cve",
"received_at": "2026-10-28T17:27:25.545790+00:00"
},
"scores": [
"cve",
"nvd"
],
"status": {
"source": "cve",
"received_at": "2026-10-28T17:27:25.545790+00:00"
},
"affected": [
"cve",
"nvd",
"osv"
],
"published": {
"source": "cve",
"received_at": "2026-10-28T17:27:25.545790+00:00"
},
"solutions": [],
"percentile": {
"source": "epss",
"received_at": "2026-11-02T21:14:43.235590+00:00"
},
"references": [
"cve",
"nvd",
"osv"
],
"description": {
"source": "cve",
"received_at": "2026-10-28T17:27:25.545790+00:00"
},
"workarounds": [],
"configurations": [
"nvd"
]
}Хронология записи
- Данные обновлены03.11.2026, 00:14
- Данные обновлены02.11.2026, 15:11
- Данные обновлены02.11.2026, 13:40
- Данные обновлены02.11.2026, 00:12
- Данные обновлены31.10.2026, 11:59
- Данные обновлены28.10.2026, 20:27
- Данные обновлены28.10.2026, 18:07
- Появились сведения об исправлении28.10.2026, 15:14
Личная заметка и статус
Другие CVE того же продукта
| УЯЗВИМОСТЬ / ПРОДУКТ | ПРИОРИТЕТ | CVSS | EPSS | СИГНАЛЫ | ОПУБЛИКОВАНА | Карточка |
|---|---|---|---|---|---|---|
| CVE-2026-116252 pgAdmin 4: Materialized view refresh redirects its connection through a crafted database name pgadmin.org / pgAdmin 4 | Высокий | 7.1 | 0,26 % | Патч | 30.10.2026 | |
| CVE-2026-116251 pgAdmin 4: A user's other sessions survive a change of their password pgadmin.org / pgAdmin 4 | Низкий | 2.3 | 0,11 % | Патч | 30.10.2026 | |
| CVE-2026-116250 pgAdmin 4: Files opened in a storage directory follow a symbolic link, hard link or FIFO planted after the containment check pgadmin.org / pgAdmin 4 | Высокий | 7.3 | 0,1 % | Патч | 30.10.2026 | |
| CVE-2026-116249 pgAdmin 4: Connection file paths and parameter keys escape the user's storage directory pgadmin.org / pgAdmin 4 | Высокий | 7.2 | 0,18 % | Патч | 30.10.2026 | |
| CVE-2026-116248 pgAdmin 4: Non-administrators can share a server with every user pgadmin.org / pgAdmin 4 | Средний | 6.0 | 0,23 % | Патч | 30.10.2026 |