Read the docs

Failed login limit bypass in pgAdmin 4 allows unlimited password guessing

Priority MEDIUM 42CWE-307Published · Updated

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

Exploitation None reported CISA SSVC · not in CISA KEV
EPSS 0.00404 34th percentileScored 2026-11-07
Fix Fixed pgAdmin 4 (pgadmin.org): 9.19

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

VendorProductAffected versionsFixed inStatusSource
pgadmin.orgpgAdmin 4before 9.199.19Patch availableCNA
  • 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.

CPEVersionsRoleVendor
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

  1. 2026-10-30 Threatist record created from CVE-2026-116238
  2. 2026-10-30 Alias added: GHSA-jq9v-4fgp-83ww
  3. 2026-11-06 CISA SSVC decision points changed

References

  • 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
See all 62 →

Sources