Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate as pgAdmin server-mode user
-
DeliverySubmit crafted storage path via file manager/Query Tool
-
ExploitBypass check_access_permission via path mismatch or double-decode
-
ExecutionPerform targeted file read/list/delete/rename
-
ImpactAccess files outside storage or other users' data
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 | Requires pgAdmin 4 running in server (web, multi-user) mode - desktop mode is explicitly unaffected - and an authenticated pgAdmin account (PR:L). Concrete trigger surfaces named in the description: opening a file in the Query Tool, the Google client-secret path, and (Windows only) Import/Export Data, Backup, Restore and file-save, all of which strip leading slashes/backslashes so a path validated as a name inside storage becomes absolute (POSIX read-anywhere) or drops the storage directory for a drive letter (Windows read/write outside storage); folder listing, which decodes the path a second time after the check so a user-creatable folder named like an encoded '..' lists any host directory; and download/delete/rename/exists, which append the path without a separator so in deployments where one user's storage directory name is a PREFIX of another's, a second user's files can be read, deleted, or moved. Creating a folder can place it in another user's directory. Limiting factors: server mode only, valid account required, several high-impact variants are Windows-specific, and the download/delete/rename cross-user read requires the specific storage-directory-name-prefix condition in a multi-user deployment. |
| Impact | This is a moderate-severity, authenticated path traversal in pgAdmin 4 server mode, rated 7.1 (High) by the vendor's CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:L/UI:N) - network-reachable and low-complexity, but requiring a valid pgAdmin account (PR:L), which materially limits mass, unauthenticated exploitation. No EPSS score is provided in the input, so exploitation probability cannot be quantified; the vuln is NOT in CISA KEV and no working public exploit is identified. The vuln.today decision label is 'this_week', consistent with a real-but-not-emergency priority. A notable conflict exists between signals: the vendor vector sets VI:N (no integrity impact), yet the description explicitly documents writing outside the storage directory on Windows and deleting, renaming, and moving other users' files - these are integrity impacts the published vector under-reflects, so the real severity is arguably higher than 7.1 on the integrity axis. The public fix commit (ad6c028) discloses the mechanism in detail, which lowers the bar for an attacker to reverse-engineer a working exploit even though no PoC is published. Net: a genuine this-week priority for multi-user pgAdmin server-mode deployments, but not a drop-everything emergency given the authentication requirement and absence of KEV/active-exploitation evidence. |
| Exploit ScenarioDerived | A low-privileged but authenticated user of a shared pgAdmin 4 server-mode instance submits a crafted file path (e.g., a POSIX path that resolves to an absolute location once leading slashes are stripped, or a folder name containing an encoded '..') through the Query Tool file open or folder-listing feature. Because the path that check_access_permission() validated differs from the path the caller actually opens, the attacker reads files anywhere the pgAdmin service account can access, lists arbitrary host directories, or reads/deletes/renames another tenant's files. No public exploit is identified at time of analysis, but the fix commit publicly reveals the flawed logic. |
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 server mode before 9.19 lets an authenticated user escape their own storage directory and read, write, delete or move files elsewhere on the host - in the POSIX Query Tool and Google client-secret paths, any file the pgAdmin service account can read; on Windows, Import/Export Data, Backup, Restore and file-save can read or write outside storage via a drive-letter path. The defect is a check-versus-use mismatch: check_access_permission() validated a path built by get_abs_path(), while several callers stripped leading separators, double-decoded folder names, or concatenated without a separator, so download/delete/rename can reach another user's files where one storage directory name is a prefix of another's, and folder creation can land in another user's directory. Rated 7.1 High (CVSS 4.0) with high confidentiality and integrity impact in the independent CVSS 3.1 assessment; exploitation needs the multi-user server deployment and a valid account (PR:L), desktop mode is explicitly unaffected, no public exploit code has been identified at time of analysis, and the fix ships in 9.19.
RemediationAI
Vendor-released patch: upgrade to pgAdmin 4 9.19, which makes check_access_permission() return the path it validated so every caller operates on that exact path, decodes folder paths once, and performs open, delete and rename relative to directories opened from the storage directory without following symbolic links (see https://github.com/pgadmin-org/pgadmin4/commit/ad6c028cff625a095676065767c7b80219205d28 and https://github.com/pgadmin-org/pgadmin4/issues/10674). Deployments that only ever run the desktop application are unaffected and need no action, so scoping any interim risk decision to instances actually serving server mode narrows the exposure - with the trade-off that this does not fix anything for web-mode users. If the upgrade must be scheduled rather than applied immediately, note that the cross-user download/delete/rename variant only succeeds where one user's storage directory name is a string prefix of another's, so renaming storage directories to be prefix-free removes that specific path (and does not address the POSIX Query Tool / Google client-secret arbitrary read, the Windows drive-letter read/write outside storage, or the double-decoded folder listing, all of which persist until 9.19 is installed). No other vendor workaround is described in the available sources.
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's server mode is a Flask web application in which each authenticated user gets a storage directory for Query Tool files, client-secret material and backup artefacts; the file-manager module in web/pgadmin/misc/file_manager/__init__.py mediates access to it. CWE-22 (Improper Limitation of a Pathname to a Restricted Directory) arises here not from a single sanitisation gap but from an architectural split between validation and use: check_access_permission() computed an absolute path with get_abs_path(), and multiple call sites then operated on a path they reconstructed independently. Some joined the caller-supplied path after stripping leading '/' and '\\' characters, so a value validated as a plain name inside storage became an absolute path on POSIX, or, on Windows, a path naming a drive that discarded the storage directory entirely. The folder-listing route decoded the path a second time after validation, so a user-creatable directory whose name looks like an encoded '..' escaped the root. Download, delete, rename and the file-exists check appended the path to the storage directory without a path separator, making resolution depend on a shared string prefix between two users' directory names, and the download path additionally validated the path appended to itself. The upstream fix (commit ad6c028cff625a095676065767c7b80219205d28) changes check_access_permission() to return the resolved path and has every caller act on that returned value, decodes folder paths exactly once, and replaces lexical handling with descriptor-relative operations: an _open_parent_beneath() walk that treats '..' as a directory pop rather than a text collapse, O_NOFOLLOW opens so a symlink swapped in after the check is refused (ELOOP, or EMLINK on BSDs; on Linux EMLINK is treated as a genuine link-count error), O_NONBLOCK plus an fstat regular-file check so a planted FIFO cannot hang a request, and rmdir/unlink/rename performed relative to the opened parent directory where the platform supports dir_fd. Desktop mode has no storage directory to escape and is out of scope.
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:L/AT:N/PR:L/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N
Authenticated server-mode web user (PR:L, AV:N, AC:L, UI:N) can read arbitrary accessible files (C:H) and, on Windows and cross-user, write/delete/rename files (I:H); availability not the primary impact.
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 validates a path into the user's storage directory with check_access_permission(), which builds the absolute path with get_abs_path(). Several callers then acted on a path they built differently, so the path checked and the path used could name different files:
- Opening a file in the Query Tool, the Google client secret and, on Windows, Import/Export Data, Backup, Restore and saving a file joined the path to the storage directory after stripping leading slashes and backslashes. On POSIX a path checked as a name inside storage could become an absolute path once stripped, so any file the pgAdmin account can read could be opened; on Windows a path naming a drive discarded the storage directory, so these could read, or write, outside it.
- Listing a folder decoded the path a second time after the check, so a folder named like an encoded "..", which a user can create, listed any directory on the host.
- Download, delete, rename and the file-exists check appended the path to the storage directory without a separator, so in a deployment where one user's storage directory name is a prefix of another's, another user's files could be read, deleted or moved; download also checked the path appended to itself.
- Creating a folder could create one in another user's directory.
The fix makes check_access_permission() return the path it checked and every caller act on that path, decodes folder paths once, and opens, deletes and renames files relative to directories opened from the storage directory without following symbolic links. Desktop mode is not affected.
This issue affects pgAdmin 4: before 9.19.
Executive ViewAI
CVE-2026-116240 is a high-severity path traversal flaw in pgAdmin 4 server mode (before 9.19) that allows any authenticated user to escape their designated storage directory and access, modify, or delete files belonging to other users or the host system. This impacts multi-user deployments where users could compromise data integrity and confidentiality, potentially leading to cross-tenant data leakage or service disruption. Leadership should prioritize remediation due to the high impact on data protection and trust in shared environments.
No vendor-released patch identified at time of analysis. Interim mitigations include restricting pgAdmin server mode to trusted networks, enforcing least privilege for the pgAdmin service account, and monitoring for suspicious file access patterns.
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-114381
GHSA-wp8g-m28w-27c5
NVD
CVE.org
EPSS
Exploit-DB