CVE-2026-7820 pgAdmin 4: Account-lockout bypass via Flask-Security default /login view

Medium 6.9 Published Updated

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.

PackageAffectedFixed in
pgadmin4 PyPIAll versions9.15
pgadmin4 PyPIAll versions9.15
pgadmin4 PyPIAll versions9.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.

Sources

Also known as GHSA-hv9p-2pqf-r5w3, PYSEC-2026-2869.

Is CVE-2026-7820 in your software?

Upload an SBOM and sbomify checks it against every vulnerability here, every day.

Check your SBOMs for free