Failed login limit bypass in pgAdmin 4 allows unlimited password guessing
Key facts
- Attack vector
- Network
- Privileges required
- None
- User interaction
- None
- Attack complexity
- High
- Attack requirements
- Present
- Impact type
- Security bypass
- Confidentiality · integrity · availability
- High · High · High
- Fix status
- Fixed
Attack profile from CVSS 4.0 · CNA. Fix status from CNA. Impact type from CWE-307.
Summary
pgAdmin 4 before 9.19 in server mode locks an internal account after MAX_LOGIN_ATTEMPTS failed logins, but the limit can be bypassed. An unauthenticated remote attacker can make unlimited password guesses against any internal account, including the administrator's, through Flask-Security's own login view, which skips pgAdmin's failed login count and lock. Typing the username in a different case also bypasses the count, and Flask-Security's password change and reset views skip pgAdmin's checks too. The flaw is classified as CWE-307 and CWE-863.
Written with Claude Haiku 5.5 from the sources below · 2026-10-31
Description from the CNA
In server mode pgAdmin 4 locks an internal account after MAX_LOGIN_ATTEMPTS failed logins (3 by default). The limit could be bypassed, giving an unauthenticated attacker an unlimited number of password guesses against any internal account, including the administrator's, in the default configuration: - Flask-Security registers its own views next to pgAdmin's. A login submitted to its /login view was checked and logged in without pgAdmin's failed login count or lock. Its /verify view checked a signed-in user's password without limit, its /change view changed a password without pgAdmin's change password permission or re-encrypting the user's saved server passwords, and its /reset views sent and applied password resets for accounts that are not internal or are locked. - The internal account was looked up by its exact username, while the login form matches the email ignoring case, so a login with the username typed in another case was neither counted nor checked for the lock. - With LDAP or webserver authentication also configured, a wrong internal password was never counted, and with Kerberos or webserver authentication configured a guess could be answered without being counted. In addition, where accounts from different authentication sources share an email address, a password reset could be sent for, or applied to, an account from another source, and the About box showed the server configuration to a user whose email was that of an administrator's account. The fix refuses submissions to Flask-Security's own views, counts every failed internal login however the username is typed and whatever other sources are configured, no longer lets a login that posts a password fall back to an authentication source that does not check it, and locks only internal authentication. Password resets and the About box act only on the user's own internal account. Desktop mode is not affected. This issue affects pgAdmin 4: before 9.19.
Why it matters now
SSVC decision points
CISA ADP · SSVC 2.0.3
- Exploitation
- None
- Automatable
- No
- Technical impact
- Total
The decision (Track, Attend, Act) also depends on your mission and well-being impact; see CISA's SSVC guide.
Affected products
| Vendor | Product | Affected versions | Fixed in | Status | Source |
|---|---|---|---|---|---|
| pgadmin.org | pgAdmin 4 | before 9.19 | 9.19 | Patch available | CNA |
- pgAdmin 4 Vendorpgadmin.org Affected before 9.19 Fixed in 9.19 Patch available CNA
CPE names Threatist (inferred) · 1
Inferred from how NVD named this product before; not given by a source.
| CPE | Versions | Role | Vendor |
|---|---|---|---|
| cpe:2.3:a:pgadmin:pgadmin_4:*:*:*:*:*:*:*:* | — | — | pgadmin.org |
- cpe:2.3:a:pgadmin:pgadmin_4:*:*:*:*:*:*:*:* Versions — — ·pgadmin.org
Remediation
Upgrade pgAdmin 4 to version 9.19 or later. The sources list no fixed version for pgAdmin 4 other than 9.19.
Written with Claude Haiku 5.5 from the sources below · 2026-10-31
- Fix · CNA pgAdmin 4 (pgadmin.org) Fixed in 9.19
Fixed in the same release
Records fixed by the same vendor advisory or release, as the CNA lists them.
- Release ·
pgadmin.org pgAdmin 4 9.19
15 records Highest priority Priority MEDIUM 3 MEDIUM, 12 LOW
Other records, highest priority first
- TI-2026-83355 Command execution via backslash bypass in pgAdmin 4 query exportPriority MEDIUM 42
- TI-2026-83353 pgAdmin 4 LDAP or Kerberos login opens another account by usernamePriority MEDIUM 41
- TI-2026-83357 Utility binary path in pgAdmin 4 can point at shared storagePriority LOW 36
Timeline
- 2026-10-30 Threatist record created from CVE-2026-116238
- 2026-10-30 Alias added: GHSA-jq9v-4fgp-83ww
- 2026-11-06 CISA SSVC decision points changed
References
Patch 3
More pgadmin.org vulnerabilities
- TI-2024-01901 Unsafe Deserialisation and Remote Code Execution by an Authenticated user in pgAdmin 4 CVSS 3.1CRITICAL 9.9
- TI-2024-02918 Remote Code Execution Vulnerability through the validate binary path API in pgAdmin 4 CVSS 3.1CRITICAL 9.8
- TI-2022-03867 Code injection in pgadmin4 CVSS 3.1HIGH 8.8
- TI-2026-06875 pgAdmin 4: Cross-user data access and shared-server privilege escalation in server mode CVSS 4.0CRITICAL 9.4
- TI-2025-02572 pgAdmin 4: Remote Code Execution in Query Tool and Cloud Deployment CVSS 3.1CRITICAL 9.9
- TI-2023-00228 Path traversal in pgadmin CVSS 3.1MEDIUM 6.5
Sources
- CVE-2026-116238 · CVE Program
- CVE-2026-116238 · NVD
- FIRST EPSS
- GHSA-jq9v-4fgp-83ww · GitHub Advisory Database · CC BY 4.0
This product uses the NVD API but is not endorsed or certified by the NVD. Sources and licences