CVE-2026-7820 pgAdmin 4: Account-lockout bypass via Flask-Security default /login view
Attackers can bypass account lockout and rate limiting in pgAdmin 4 by using the default Flask-Security login view, enabling brute-force attacks against internal accounts.
- Exploited in the wild
- Not known
- Login needed
- Not needed
- Attackable
- Over the internet
- Victim action needed
- Not needed
- Fix
- Available
What is CVE-2026-7820?
CVE-2026-7820 is a medium-severity vulnerability in pgadmin.org pgAdmin 4, published on 11 May 2026. An attacker can exploit it over the internet without logging in, with no action from the victim.
Official description
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.
Weakness: CWE-307
Which versions are affected by CVE-2026-7820?
3 open source packages ship an affected version, including pgadmin4. It affects 1 product.
| Package | Affected | Fixed in |
|---|---|---|
pgadmin4 PyPI | All versions | 9.15 |
pgadmin4 PyPI | All versions | 9.15 |
pgadmin4 PyPI | All versions | 9.15 |
Products include Pgadmin Pgadmin 4.
How do I fix CVE-2026-7820?
Upgrade pgadmin4 to 9.15 or later.
Is CVE-2026-7820 being exploited?
There is no known exploitation of CVE-2026-7820 in the wild and no public exploit code.
Other vulnerabilities in pgadmin.org pgAdmin 4
- CVE-2025-2945 pgAdmin 4: Remote Code Execution in Query Tool and Cloud Deployment
- CVE-2024-9014 OAuth2 client id and secret exposed through the web browser in pgAdmin 4
- CVE-2026-12046 Deserialization in pgAdmin 4
- CVE-2026-17351 SQL injection in pgAdmin 4
- CVE-2026-17566 Command injection in pgAdmin 4
Sources
Also known as GHSA-hv9p-2pqf-r5w3, PYSEC-2026-2869.