Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate as low-privileged pgAdmin user
-
DeliverySet traversal path (../victim/.pgpass) in server config
-
Exploitget_complete_file_path resolves into another user's storage
-
ExecutionConnect using victim's saved credentials/key
-
ImpactAccess 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. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – 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
Affected Packages
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
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
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.
Primary rating from Vendor (f86ef6dc-4d3a-42ad-8f28-e6d5547a5007).
CVSS VectorVendor: f86ef6dc-4d3a-42ad-8f28-e6d5547a5007
Lifecycle Timeline
2DescriptionCVE.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
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.
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
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Path traversal exploits occur when applications use user-controlled input to construct file system paths without proper validation.
pgAdmin 4 contains critical remote code execution vulnerabilities in the Query Tool download and Cloud Deployment endpoi
pgAdmin <= 8.3 is affected by a path-traversal vulnerability while deserializing users’ sessions in the session handling
pgAdmin <= 8.4 is affected by a Remote Code Execution (RCE) vulnerability through the validate binary path API. Rated cr
The pgAdmin server includes an HTTP API that is intended to be used to validate the path a user selects to external Post
pgAdmin versions 8.11 and earlier are vulnerable to a security flaw in OAuth2 authentication. Rated medium severity (CVS
Remote code execution in pgAdmin 4 (versions up to and including 9.9) lets an attacker who can get a crafted PLAIN-forma
SQL injection sandbox escape in pgAdmin 4's AI Assistant (versions 9.13 through 9.16) lets an attacker break out of the
OS command injection in pgAdmin 4 (all versions before 9.18) lets an authenticated user with the commonly-granted tools_
Command injection in pgAdmin 4 before 9.19 lets an authenticated, low-privileged database user execute arbitrary operati
pgAdmin <= 8.5 is affected by XSS vulnerability in /settings/store API response json payload. Rated medium severity (CVS
Cross-tenant credential theft in pgAdmin 4 (9.0 through 9.16) lets an authenticated non-owner user hijack another user's
pgAdmin <= 9.1 is affected by a security vulnerability with Cross-Site Scripting(XSS). Rated critical severity (CVSS 9.1
EUVD-2026-114390
GHSA-hw9h-5hmm-63g6
NVD
CVE.org
EPSS
Exploit-DB