Skip to main content

pgAdmin 4 CVE-2026-7820

| EUVDEUVD-2026-29088 MEDIUM
Improper Restriction of Excessive Authentication Attempts (CWE-307)
2026-05-11 PostgreSQL GHSA-hv9p-2pqf-r5w3
6.9
CVSS 4.0 · Vendor: PostgreSQL
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Attacker discovers pgAdmin 4 instance
  2. Delivery
    Identifies valid INTERNAL username
  3. Exploit
    Submits credentials to Flask-Security /login endpoint
  4. Execution
    Bypasses lockout mechanism
  5. Impact
    Obtains valid session

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A07:2025 - Authentication Failures
ASVS 5.0
V6 - Authentication Brute-force prevention, rate limiting
Exploitation Conditions

The vulnerability requires the following specific conditions: (1) pgAdmin 4 instance must be accessible over the network (AV:N confirmed by CVSS); (2) the target account must use INTERNAL authentication source (accounts with LDAP, OAuth2, Kerberos, or Webserver authentication are protected); (3) the attacker must know or guess a valid username for an INTERNAL account; (4) the Flask-Security /login endpoint must be reachable from the attacker's network position (no authentication or special privileges required). No user interaction is required and the attack succeeds against default configurations. The vulnerability does NOT require: account pre-lockout (attackers can perform unbounded guessing without triggering lockout first), non-default MAX_LOGIN_ATTEMPTS settings (the bypass works regardless of the configured threshold), or authentication credentials for other accounts. Organizations using only centralized authentication (LDAP, OAuth2, Kerberos, Webserver) with no INTERNAL accounts have zero exploitable surface.

Impact

CVSS 6.5 with network vector (AV:N/AC:L/PR:N/UI:N) indicates remote unauthenticated exploitation with low complexity and no user interaction required. The vulnerability provides two distinct attack paths: (1) credential enumeration via lockout bypass for accounts previously locked by brute-force attempts, and (2) unbounded password guessing against any INTERNAL account without rate-limiting or account lockout consequences. The impact is limited to confidentiality and integrity (C:L/I:L) with no availability impact, as attackers can gain unauthorized session access but cannot directly cause service disruption. No EPSS score or KEV status is provided, so exploitation probability cannot be independently assessed; however, the straightforward attack vector (sending HTTP requests to an unauthenticated endpoint) and low technical complexity suggest practical exploitability. The limitation to INTERNAL authentication sources reduces the real-world risk surface in organizations using centralized identity systems (LDAP, OAuth2, Kerberos), but any pgAdmin instance with local user accounts faces direct risk. The fact that this bypasses a known security control (MAX_LOGIN_ATTEMPTS) elevates priority despite the moderate CVSS score.

Exploit ScenarioDerived

An attacker discovers a pgAdmin 4 instance and identifies a valid username through information disclosure or enumeration. The attacker submits invalid credentials multiple times to /authenticate/login, triggering the account lockout by exceeding MAX_LOGIN_ATTEMPTS. However, instead of giving up, the attacker then bypasses the lockout by submitting the same valid credentials directly to Flask-Security's /login endpoint, obtaining a valid session without triggering the lockout mechanism. Alternatively, an attacker can skip the lockout trigger entirely and perform continuous password-guessing against /login with no rate-limiting or lockout consequences, eventually recovering credentials through brute force.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.0% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – May 11, 2026

pgAdmin 4 before version 9.15 allows unauthenticated attackers to bypass account lockout and perform unbounded password-guessing attacks against INTERNAL authentication accounts by exploiting Flask-Security's default /login endpoint, which does not enforce the locked column that the custom /authenticate/login view relies on for brute-force protection. The vulnerability affects only accounts using pgAdmin's INTERNAL authentication source; LDAP, OAuth2, Kerberos, and Webserver authentication methods are not vulnerable because they do not use local passwords.

RemediationAI

Upgrade pgAdmin 4 to version 9.15 or later, which overrides User.is_active and User.is_locked() methods to enforce the locked column on all authentication paths including Flask-Security's default /login endpoint. This patch ensures that MAX_LOGIN_ATTEMPTS lockouts are enforced uniformly regardless of which endpoint an attacker targets. Organizations unable to patch immediately should implement network-level rate-limiting on the /login endpoint using a reverse proxy or Web Application Firewall to prevent unbounded password-guessing attacks. Additionally, review and minimize the use of INTERNAL authentication for non-administrative accounts; prefer centralized authentication systems (LDAP, Kerberos, OAuth2) where feasible, as those authentication sources are not vulnerable to this bypass. The rate-limiting mitigation has a trade-off of increased operational complexity and potential for legitimate user lockout if thresholds are set too aggressively.

Affected VersionsENISA

pgAdmin 4 0 <9.15

Affected Packages

pypi pgadmin4 fix: 9.15
euvd pgadmin_4 fix: 9.15

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 2 packages in pypi, euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

pgAdmin 4 implements account lockout via the MAX_LOGIN_ATTEMPTS setting, enforced only in a custom /authenticate/login view that checks the User.locked column. However, pgAdmin's User model inherits from Flask-Security's UserMixin and Flask-Login's UserMixin, both of which have authentication checks that do not consult the locked column. Specifically, Flask-Security's default /login view (automatically registered by security.init_app()) uses only Flask-Security's is_locked() method (which always returns False due to pgAdmin's User model override) and Flask-Login's is_active check (which only examines the active column). This architectural flaw in the authentication framework allows attackers to bypass the lockout mechanism by submitting valid credentials to the unprotected Flask-Security endpoint instead of pgAdmin's custom endpoint. The CWE-307 classification correctly identifies this as improper restriction of excessive authentication attempts. The INTERNAL authentication source stores passwords locally in pgAdmin's database, making it vulnerable to online brute-force attacks; other authentication methods (LDAP, OAuth2, Kerberos, Webserver) delegate credential validation to external systems and do not store passwords in pgAdmin, thus are not affected.

Know when Pgadmin 4 gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (PostgreSQL) PRIMARY 6.9 MEDIUM
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
SUSE 6.5 MEDIUM
AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N

Primary rating from Vendor (PostgreSQL).

CVSS VectorVendor: PostgreSQL

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
Low
Vulnerable system: Integrity
Low
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

3
Patch available
May 11, 2026 - 17:17 EUVD
CVSS changed
May 11, 2026 - 16:22 NVD
6.5 (MEDIUM) 6.9 (MEDIUM)
CVE Published
May 11, 2026 - 14:35 nvd
MEDIUM 6.5

DescriptionCVE.org

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.

Threat Intelligence Overview

EPSS Score
0.0%
Top 89% exploitable
Data Quality
7 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment Vendor GitHub

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.0%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
Yes
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

34
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +34
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.

CVE-2025-2945 CRITICAL POC
9.9 Apr 03

pgAdmin 4 contains critical remote code execution vulnerabilities in the Query Tool download and Cloud Deployment endpoi

CVE-2024-2044 CRITICAL POC
9.9 Mar 07

pgAdmin <= 8.3 is affected by a path-traversal vulnerability while deserializing users’ sessions in the session handling

CVE-2024-3116 CRITICAL POC
9.8 Apr 04

pgAdmin <= 8.4 is affected by a Remote Code Execution (RCE) vulnerability through the validate binary path API. Rated cr

CVE-2026-12046 CRITICAL POC
9.5 Jun 18

Remote unauthenticated access to two SQL Editor endpoints in pgAdmin 4 server-mode deployments (versions 6.9 through 9.1

CVE-2022-4223 HIGH POC
8.8 Dec 13

The pgAdmin server includes an HTTP API that is intended to be used to validate the path a user selects to external Post

CVE-2024-9014 MEDIUM POC
6.5 Sep 23

pgAdmin versions 8.11 and earlier are vulnerable to a security flaw in OAuth2 authentication. Rated medium severity (CVS

CVE-2025-12762 CRITICAL
9.8 Nov 13

Remote code execution in pgAdmin 4 (versions up to and including 9.9) lets an attacker who can get a crafted PLAIN-forma

CVE-2026-12045 CRITICAL
9.4 Jun 18

Remote SQL injection via prompt injection in pgAdmin 4 versions 9.13 through 9.15 allows attackers who can write content

CVE-2026-17351 CRITICAL
9.4 Jul 31

SQL injection sandbox escape in pgAdmin 4's AI Assistant (versions 9.13 through 9.16) lets an attacker break out of the

CVE-2026-17566 CRITICAL POC
9.4 Jul 31

OS command injection in pgAdmin 4 (all versions before 9.18) lets an authenticated user with the commonly-granted tools_

CVE-2026-7813 CRITICAL
9.4 May 11

Authorization bypass and privilege escalation in pgAdmin 4 server mode allows authenticated users to access other users'

CVE-2024-4216 MEDIUM POC
5.4 May 02

pgAdmin <= 8.5 is affected by XSS vulnerability in /settings/store API response json payload. Rated medium severity (CVS

Vendor StatusVendor

SUSE

Severity: Medium
Product Status
SUSE Linux Enterprise Desktop 15 SP7 Fixed
SUSE Linux Enterprise High Performance Computing 15 SP7 Fixed
SUSE Linux Enterprise Module for Python 3 15 SP7 Fixed
SUSE Linux Enterprise Server 15 SP7 Fixed
SUSE Linux Enterprise Server for SAP Applications 15 SP7 Fixed

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy