Skip to main content

pgAdmin 4 EUVDEUVD-2026-114390

| CVE-2026-116249 HIGH
Path Traversal (CWE-22)
2026-10-30 f86ef6dc-4d3a-42ad-8f28-e6d5547a5007 GHSA-hw9h-5hmm-63g6
7.2
CVSS 4.0 · Vendor: f86ef6dc-4d3a-42ad-8f28-e6d5547a5007
View

Attack ChainAIDerived

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

  1. Access
    Authenticate as low-privileged pgAdmin user
  2. Delivery
    Set traversal path (../victim/.pgpass) in server config
  3. Exploit
    get_complete_file_path resolves into another user's storage
  4. Execution
    Connect using victim's saved credentials/key
  5. Impact
    Access victim's database or write file as pgAdmin account

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V5 - File Handling Path canonicalization, traversal prevention
MITRE ATT&CK

2 techniques across 2 tactics: Discovery, Collection

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Exploitation requires pgAdmin 4 running in server (multi-user web) mode - desktop/single-user installations are not affected. The attacker needs an authenticated pgAdmin account (PR:L) and the ability to set a connection file path through the server dialog, the REST API, or a servers.json import. The key limiting factor (reflected by AT:P) is that the targeted file - another user's .pgpass, SSL certificate, key, CRL, or SSH identity file - must actually exist at a guessable location inside another user's storage directory for credential theft to succeed; for the sslkeylogfile vector, a path outside storage must be writable by the OS account running pgAdmin. High attack complexity (AC:H) reflects the crafting of traversal paths or smuggled libpq keyword=value pairs that survive the pre-fix quoting of values-but-not-names. No user interaction is required (UI:N).

Impact

This is a credible but not emergency-grade priority, consistent with the 'this_week' decision label. The CVSS 4.0 vector (AV:N/AC:H/AT:P/PR:L/UI:N, score 7.2) describes a network-reachable but authenticated (PR:L) flaw that requires both high attack complexity (AC:H) and a specific attack precondition (AT:P) - namely that a targeted victim file (another user's .pgpass, SSL key, client cert, CRL or SSH identity) actually exists at a predictable location in another user's storage directory. The high confidentiality and subsequent-system impact (VC:H, SC:H, SI:H) are well-justified: the source diff confirms an attacker-controlled relative path resolved to another user's saved credentials and that those credentials were then used to connect, so a low-privileged pgAdmin user can pivot into another user's database sessions. No EPSS score was supplied and this CVE is NOT in CISA KEV, so there is no evidence of active or widespread exploitation - exploitation status is best characterized as no public exploit identified at time of analysis (the only references are the fix commit and the issue tracker, not weaponized exploit code). The real-world risk is gated hard by deployment mode: this only affects pgAdmin running in multi-user server mode, so single-user desktop installations are not exposed. Net: a genuine privilege/credential-theft issue worth patching this week, but its blast radius is limited to shared server-mode deployments, not a drop-everything internet-wide threat.

Exploit ScenarioDerived

In a shared pgAdmin server-mode deployment, a low-privileged authenticated user creates or edits a server definition (via the server dialog, the REST API, or a servers.json import) and sets a file path such as '../<victim>/.pgpass' for the password file, SSL key, client certificate, CRL or SSH tunnel identity. When the attacker connects that server, pgAdmin resolves the path into the victim's storage directory and uses the victim's saved password, client certificate or SSH key, letting the attacker authenticate as the victim; alternatively the sslkeylogfile parameter is passed to libpq unchanged to create or append a file anywhere writable by the account running pgAdmin. No public exploit code was identified, but the triggering mechanism is fully documented in the fix commit diff.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.2% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Oct 30, 2026

Path traversal in pgAdmin 4 releases before 9.19 lets an authenticated user in server (multi-user web) mode point a server's password file, client certificate, key, CRL, SSH tunnel identity file, or the sslkeylogfile parameter outside their own storage directory, so a connection can consume another user's saved PostgreSQL passwords, client certificate or SSH key, or make libpq create/append a file as the pgAdmin service account. The flaw exists because get_complete_file_path() only stripped leading slashes before joining the configured path to the user's storage directory, and because make_conninfo() quoted connection parameter values but not their names, allowing a crafted parameter name to smuggle extra keyword=value pairs past that check. Only server-mode deployments are affected; exploitation requires an authenticated pgAdmin account and a target file that actually exists at a guessable path (or a writable directory for the sslkeylogfile vector), and no public exploit or active exploitation has been identified at time of analysis. A vendor fix is available in pgAdmin 4 9.19.

RemediationAI

Upgrade to pgAdmin 4 9.19 or later, which contains the fix in commit 2afe505ef4a31591796449d54ab1604355ff06c2 (upstream issue https://github.com/pgadmin-org/pgadmin4/issues/10650). After upgrading, every connection file path must resolve, with symbolic links followed, inside the acting user's storage directory or inside a configured SHARED_STORAGE entry; paths that escape via '..' or a symlink are refused with an 'Access denied (...): the path resolves outside your storage directory' error at connect time or when starting a utility, and non-libpq connection parameter names are rejected with 'Invalid connection parameter'. Where users previously relied on a symbolic link in their storage directory that pointed at a shared location such as /etc/pgadmin/certs, replace it with a SHARED_STORAGE entry written as Name:/path rather than a link; note that anything placed in shared storage is readable by every pgAdmin user, so it should hold only shareable material such as a root certificate or CRL and never a private key or a .pgpass file. Until the upgrade is applied, the practical limit is to restrict who may create or modify server definitions (server dialog, REST API and servers.json imports) and to run pgAdmin under an OS account that cannot write outside its own storage area, which constrains the sslkeylogfile file-creation vector but does not close the credential-theft path.

Affected VersionsENISA

pgAdmin 4 0 <9.19

Affected Packages

euvd pgadmin_4 fix: 9.19

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

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

Technical ContextAI · show details

pgAdmin 4 stores per-user connection material (password file, client certificate and key, root certificate, CRL, CRL directory, SSH tunnel identity, SSL key log file) relative to the user's storage directory. The pre-fix get_complete_file_path() helper only stripped leading slashes from the user-supplied path before joining it to that directory, so a value such as '../<another user>/.pgpass', set through the server dialog, the REST API or a servers.json import, resolved outside the user's own area; the resulting path was then handed to the connect flow and to libpq. A second, related weakness sits in make_conninfo(): it quoted connection parameter values but not their names, so a crafted key could carry its own 'keyword=value' pairs and reach libpq as additional connection directives, bypassing the path checks. Separately, the sslkeylogfile connection parameter was forwarded to libpq unchanged, so a path outside storage allowed libpq to create or append a file with the privileges of the OS account running pgAdmin. This is CWE-22 (improper limitation of a pathname to a restricted directory). The fix resolves each path with symbolic links followed and requires it to remain inside the user's storage directory or within a configured SHARED_STORAGE entry (written as Name:/path), confines sslkeylogfile the same way, and accepts only exact libpq keywords as connection parameter names. Refused paths and rejected keywords are now reported to the user instead of allowing libpq to silently fall back to a default.

Know when Pgadmin 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 (f86ef6dc-4d3a-42ad-8f28-e6d5547a5007) PRIMARY 7.2 HIGH
CVSS:4.0/AV:N/AC:H/AT:P/PR:L/UI:N/VC:H/VI:L/VA:L/SC:H/SI:H/SA:N
vuln.today AI 7.7 HIGH

Network-reachable but needs an authenticated pgAdmin user (PR:L) and crafted paths with a victim file present (AC:H); cross-user credential theft changes scope (S:C) with high confidentiality and limited integrity/availability from arbitrary file write.

3.1 AV:N/AC:H/PR:L/UI:N/S:C/C:H/I:L/A:L
4.0 AV:N/AC:H/AT:P/PR:L/UI:N/VC:H/VI:L/VA:L/SC:H/SI:H/SA:N

Primary rating from Vendor (f86ef6dc-4d3a-42ad-8f28-e6d5547a5007).

CVSS VectorVendor: f86ef6dc-4d3a-42ad-8f28-e6d5547a5007

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

Lifecycle Timeline

2
Patch available
Oct 30, 2026 - 21:18 EUVD
CVE Published
Oct 30, 2026 - 20:17 cve.org
HIGH 7.2

DescriptionCVE.org

In server mode pgAdmin 4 resolves a server's password file, SSL certificate, key, CRL and SSH tunnel identity file relative to the user's storage directory, but get_complete_file_path() only stripped leading slashes before joining the two. A path such as "../<another user>/.pgpass", set through the server dialog, the REST API or a servers.json import, therefore named another user's file, and connecting used that user's saved passwords, client certificate or SSH key. The sslkeylogfile connection parameter was passed to libpq unchanged, so a path outside storage let libpq create or append a file as the account running pgAdmin.

make_conninfo() also quoted connection parameter values but not their names, so a crafted parameter name could smuggle additional keyword=value pairs past these checks.

The fix requires the resolved path, with symbolic links followed, to stay inside the user's storage directory or the named shared storage directory, confines sslkeylogfile the same way, and accepts only exact libpq keywords as connection parameter names. A refused path or keyword is reported instead of letting libpq fall back to a default.

This issue affects pgAdmin 4: before 9.19.

Executive ViewAI

Why It Matters

CVE-2026-116249 is a high-severity path traversal vulnerability in pgAdmin 4 (multi-user server mode) that allows an authenticated user to access files outside their storage directory, potentially compromising other users' saved PostgreSQL passwords, client certificates, SSH keys, and other sensitive connection materials. This could lead to credential theft and lateral movement within the organization's database infrastructure. Given pgAdmin's role in managing PostgreSQL environments, leadership should prioritize remediation to prevent unauthorized access to critical database assets.

Business Impact: High
Compensating Controls

No vendor-released patch identified at time of analysis. Interim mitigations: restrict pgAdmin server-mode access to trusted networks and users, enforce strong authentication and authorization, monitor for anomalous file access attempts, and isolate pgAdmin storage directories with filesystem permissions to limit traversal impact.

Threat Intelligence Overview

EPSS Score
0.2%
Top 92% exploitable
Prevalence
Medium
popular PostgreSQL admin tool, but only multi-user server-mode deployments are affected
Data Quality
5 sources
Confidence: Medium

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 HIGH
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.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· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact
High

Priority Score

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

Attack Technique

Path traversal exploits occur when applications use user-controlled input to construct file system paths without proper validation.

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-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-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-116241 CRITICAL
9.4 Oct 30

Command injection in pgAdmin 4 before 9.19 lets an authenticated, low-privileged database user execute arbitrary operati

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

CVE-2026-17349 CRITICAL
9.3 Jul 31

Cross-tenant credential theft in pgAdmin 4 (9.0 through 9.16) lets an authenticated non-owner user hijack another user's

CVE-2025-2946 CRITICAL
9.1 Apr 03

pgAdmin <= 9.1 is affected by a security vulnerability with Cross-Site Scripting(XSS). Rated critical severity (CVSS 9.1

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