Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
ReconAttacker obtains low-privilege pgAdmin and PostgreSQL account
-
DeliveryCreates table, publication, or subscription with apostrophe-containing name via quoted identifier
-
ExploitMalicious object name persisted in pg_catalog
-
InstallVictim DBA navigates to Statistics or Dependencies tab in pgAdmin browser tree
-
C2pgAdmin renders coll_stats.sql or dependencies.sql with raw `{{ name }}` interpolation
-
ExecuteApostrophe breaks SQL string boundary, injecting attacker SQL
-
ImpactInjected statements execute in victim's database session with victim's privileges
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Parameterized queries, prepared statements
MITRE ATT&CK
2 techniques across 2 tactics: Initial Access, Persistence The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires the attacker to hold a low-privileged pgAdmin and PostgreSQL account on the same instance as potential victims, with at least one of the following object-creation privileges granted: CREATE TABLE or CREATE INDEX (to exploit the Index Statistics coll_stats.sql sink, present since pgAdmin 1.0), CREATE PUBLICATION (to exploit the Publications dependencies.sql and get_position.sql sinks, present since pgAdmin 5.0), or CREATE SUBSCRIPTION (to exploit the Subscriptions dependencies.sql and get_position.sql sink, present since pgAdmin 5.0). The attacker must create an object with an apostrophe in its name using PostgreSQL's double-quoted identifier syntax (e.g., |
| Impact | The CVSS 4.0 score of 8.7 (AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H) reflects severe confidentiality, integrity, and availability impact over a network with low complexity. The PR:L metric correctly identifies that exploitation requires a low-privileged account with object creation rights. The UI:N designation warrants scrutiny: a second user must actively navigate to the Statistics or Dependencies tab to trigger the payload, which constitutes a user interaction dependency not reflected in the vector - the real-world trigger is victim routine navigation rather than a fully autonomous attack. Real-world risk is meaningfully elevated for multi-tenant or shared-instance pgAdmin deployments (DBaaS platforms, development team shared tools) where untrusted users coexist with administrators on the same pgAdmin instance. Single-user or single-tenant deployments where only one trusted user operates pgAdmin are not realistically exploitable. The incomplete-fix nature is a material priority signal: organizations that applied pgAdmin 9.16 believing CVE-2026-12044 was fully resolved remain exposed without knowing it. No EPSS score is provided in the input; no KEV listing exists. The combination of no public POC, the PR:L precondition, and the victim-navigation trigger suggests moderate-to-high organizational priority rather than immediate mass exploitation risk - but the cross-user privilege escalation mechanism makes this a meaningful threat in shared environments. |
| Exploit ScenarioDerived | A low-privileged developer with a shared pgAdmin account and CREATE TABLE rights on a team PostgreSQL instance creates a table named using PostgreSQL quoted-identifier syntax that embeds an apostrophe followed by injected SQL - for example, naming the table such that, when its name is interpolated into coll_stats.sql as |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Jul 31, 2026
SQL injection in pgAdmin 4 through an incomplete remediation of CVE-2026-12044 allows a low-privileged authenticated user to execute arbitrary SQL in a higher-privileged victim's database session. By creating a PostgreSQL object - table, index, publication, or subscription - with an apostrophe in its name (a character PostgreSQL legally permits in quoted identifiers), the attacker plants a payload that fires the moment any other pgAdmin user opens the object's Statistics or Dependencies tab, triggering raw Jinja2 template interpolation in coll_stats.sql, dependencies.sql, and get_position.sql without the qtLiteral escaping applied by the prior fix. The cross-user injection escalates impact well beyond the attacker's own database privileges, with the injected SQL executing under the victim's session credentials. No public exploit has been identified at time of analysis, and this CVE has not been added to the CISA KEV catalog.
RemediationAI
Upgrade to pgAdmin 4 9.17, which applies qtLiteral(conn) escaping to all previously unescaped template sinks and removes the incorrect ALLOWLIST entries from test_sql_string_literal_lint.py. The fix is confirmed in upstream commits 73b3218 and f75452b; a formally released patched version numbered 9.17 is implied but should be confirmed against the official pgAdmin release page before deployment. If immediate upgrade is not possible, the most effective compensating control is to revoke CREATE TABLE, CREATE PUBLICATION, and CREATE SUBSCRIPTION privileges from any non-fully-trusted PostgreSQL users on instances managed through shared pgAdmin installations - this eliminates the attacker's ability to plant the apostrophe-containing object name that seeds the injection. As a secondary measure, restricting pgAdmin access so that only a single trusted user or role uses each pgAdmin instance prevents cross-user injection entirely, though this may conflict with team workflows. There is no known pgAdmin configuration option to disable the Statistics or Dependencies tabs independently. Organizations running pgAdmin 9.16 under the assumption that CVE-2026-12044 fully resolved SQL injection risks should treat this as an unmitigated exposure and prioritize the 9.17 upgrade accordingly.
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 is an open-source, web-based PostgreSQL administration GUI that uses Jinja2 templating to construct and execute SQL queries against connected database backends, including both community PostgreSQL and EDB Postgres Advanced Server (PPAS/EPAS). The root cause is CWE-89 (SQL Injection) arising from unsanitized interpolation of object names into SQL string literals via the raw '{{ name }}' Jinja2 pattern. The prior fix for CVE-2026-12044 (pgAdmin 4 9.16) introduced the qtLiteral(conn) filter - which uses the live libpq connection to apply PostgreSQL-native quoting - but incorrectly placed four families of template sinks in the lint ALLOWLIST in test_sql_string_literal_lint.py under the false assumption that names sourced from pg_catalog via the browser tree could not contain apostrophes. PostgreSQL's quoted-identifier syntax ("it'satable") permits arbitrary Unicode characters including apostrophes, invalidating that assumption. The missed sinks are: (1) schemas/tables/templates/indexes/sql/16_plus/coll_stats.sql and sql/default/coll_stats.sql for the all-indexes statistics listing, interpolating {{schema}} and {{table}}; (2) publications/templates/publications/pg/default/sql/dependencies.sql and get_position.sql, interpolating {{pname}} and {{pubname}}; (3) the same two files under the ppas/ dialect path; and (4) subscriptions/templates/subscriptions/sql/default/dependencies.sql and get_position.sql, interpolating {{subname}}. A secondary omission in publications/__init__.py and subscriptions/__init__.py failed to pass conn=self.conn into the render_template call, meaning even if qtLiteral had been applied in the templates, the filter would have lacked a connection object to quote against.
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
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
Network-delivered via web UI (AV:N); attacker needs object-creation privilege (PR:L); victim must navigate to the affected tab (UI:R); injected SQL executes in victim's PostgreSQL session under victim's credentials, constituting a scope change (S:C).
AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Primary rating from Vendor (f86ef6dc-4d3a-42ad-8f28-e6d5547a5007).
CVSS VectorVendor: f86ef6dc-4d3a-42ad-8f28-e6d5547a5007
Lifecycle Timeline
2DescriptionCVE.org
The fix for CVE-2026-12044 in pgAdmin 4 9.16 hardened qtLiteral and switched sixteen COMMENT ON / pgstattuple / pgstatindex templates to it, but missed several sinks that had been placed in test_sql_string_literal_lint.py's ALLOWLIST on the incorrect assumption that schema, table, publication, and subscription names sourced from pg_catalog via the browser tree could never contain an apostrophe. PostgreSQL permits arbitrary characters in quoted identifiers, so a low-privileged user able to CREATE TABLE, CREATE PUBLICATION, or CREATE SUBSCRIPTION can plant an apostrophe'd object name that breaks out of the unescaped '{{ name }}' template interpolation the moment any user (including a higher-privileged one) opens that object's Statistics or Dependencies tab, allowing arbitrary SQL statement injection in the viewing user's database session.
Affected sinks: the Index Statistics query for all-indexes listing (coll_stats.sql, both the 16_plus and default PostgreSQL-version template variants -- distinct from the single-index stats.sql path already fixed in CVE-2026-12044), and the publication and subscription dependencies.sql / get_position.sql templates (both the pg and ppas/EPAS dialect variants for publications).
Fix switches all of these templates to qtLiteral(conn) for name interpolation, and updates publications/__init__.py and subscriptions/__init__.py to pass conn=self.conn into the dependencies.sql render_template call so the qtLiteral filter has a connection to quote against. The corresponding ALLOWLIST entries in test_sql_string_literal_lint.py are removed now that these sinks are properly escaped rather than merely assumed safe. A behavioral regression test renders each fixed template with a stacked-statement apostrophe payload and asserts both that the object name appears exactly as qtLiteral-escaped and that the rendered SQL parses as exactly one statement, verifying the assertion genuinely fails against the pre-patch raw-interpolation form.
This issue affects pgAdmin 4: the Index Statistics sink from 1.0, and the Publications/Subscriptions sinks from 5.0, both before 9.17.
Articles & Coverage 1
Executive ViewAI
pgAdmin 4 contains an authenticated SQL injection vulnerability (CVSS 8.7) that allows a low-privileged user to plant malicious database objects that execute arbitrary SQL under any other user's session credentials when they view object statistics or dependencies-escalating attacker impact beyond their own permissions and potentially compromising sensitive data or database integrity across multiple users.
No vendor-released patch identified at time of analysis. Interim mitigations: enforce network-level access controls limiting pgAdmin to trusted administrative staff and subnets; require multi-factor authentication for pgAdmin login; implement database-level audit logging to detect anomalous SQL execution; restrict database object-creation permissions to only necessary administrative users; disable or restrict access to pgAdmin's Statistics and Dependencies features pending vendor patch availability.
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
SQL injection exploits the way applications construct database queries by mixing user input directly into SQL statements.
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
Remote unauthenticated access to two SQL Editor endpoints in pgAdmin 4 server-mode deployments (versions 6.9 through 9.1
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
Remote SQL injection via prompt injection in pgAdmin 4 versions 9.13 through 9.15 allows attackers who can write content
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_
Authorization bypass and privilege escalation in pgAdmin 4 server mode allows authenticated users to access other users'
pgAdmin <= 8.5 is affected by XSS vulnerability in /settings/store API response json payload. Rated medium severity (CVS
Same weakness CWE-89 – SQL Injection
View allVendor StatusVendor
SUSE
Severity: Important| Product | Status |
|---|---|
| SUSE Linux Enterprise Desktop 15 SP7 | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP7 | Affected |
| SUSE Linux Enterprise Module for Python 3 15 SP7 | Affected |
| SUSE Linux Enterprise Server 15 SP7 | Affected |
| SUSE Linux Enterprise Server for SAP Applications 15 SP7 | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP4 | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP4-LTSS | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP5 | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP5-LTSS | Affected |
| SUSE Linux Enterprise Module for Python 3 15 SP6 | Affected |
| SUSE Linux Enterprise Module for Server Applications 15 SP4 | Affected |
| SUSE Linux Enterprise Module for Server Applications 15 SP5 | Affected |
| SUSE Linux Enterprise Server 15 SP4 | Affected |
| SUSE Linux Enterprise Server 15 SP4-LTSS | Affected |
| SUSE Linux Enterprise Server 15 SP5 | Affected |
| SUSE Linux Enterprise Server 15 SP5-LTSS | Affected |
| SUSE Linux Enterprise Server 15 SP6 | Affected |
| SUSE Linux Enterprise Server 15 SP6-LTSS | Affected |
| SUSE Linux Enterprise Server for SAP Applications 15 SP6 | Affected |
| SUSE Manager Proxy 4.3 | Affected |
| SUSE Manager Proxy LTS 4.3 | Affected |
| SUSE Manager Retail Branch Server 4.3 | Affected |
| SUSE Manager Retail Branch Server LTS 4.3 | Affected |
| SUSE Manager Server 4.3 | Affected |
| SUSE Manager Server LTS 4.3 | Affected |
| SUSE CaaS Platform 4.0 | Affected |
| SUSE Enterprise Storage 6 | Affected |
| SUSE Enterprise Storage 7 | Affected |
| SUSE Enterprise Storage 7.1 | Affected |
| SUSE Linux Enterprise Desktop 15 SP6 | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP1 | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP1-ESPOS | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP1-LTSS | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP2 | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP2-ESPOS | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP2-LTSS | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP3 | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP3-ESPOS | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP3-LTSS | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP4-ESPOS | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP5-ESPOS | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP6 | Affected |
| SUSE Linux Enterprise Module for Server Applications 15 SP1 | Affected |
| SUSE Linux Enterprise Module for Server Applications 15 SP2 | Affected |
| SUSE Linux Enterprise Module for Server Applications 15 SP3 | Affected |
| SUSE Linux Enterprise Real Time 15 SP2 | Affected |
| SUSE Linux Enterprise Real Time 15 SP3 | Affected |
| SUSE Linux Enterprise Real Time 15 SP4 | Affected |
| SUSE Linux Enterprise Server 15 SP1 | Affected |
| SUSE Linux Enterprise Server 15 SP1-BCL | Affected |
| SUSE Linux Enterprise Server 15 SP1-LTSS | Affected |
| SUSE Linux Enterprise Server 15 SP2 | Affected |
| SUSE Linux Enterprise Server 15 SP2-BCL | Affected |
| SUSE Linux Enterprise Server 15 SP2-LTSS | Affected |
| SUSE Linux Enterprise Server 15 SP3 | Affected |
| SUSE Linux Enterprise Server 15 SP3-BCL | Affected |
| SUSE Linux Enterprise Server 15 SP3-LTSS | Affected |
| SUSE Linux Enterprise Server for SAP Applications 15 SP1 | Affected |
| SUSE Linux Enterprise Server for SAP Applications 15 SP2 | Affected |
| SUSE Linux Enterprise Server for SAP Applications 15 SP3 | Affected |
| SUSE Linux Enterprise Server for SAP Applications 15 SP4 | Affected |
| SUSE Linux Enterprise Server for SAP Applications 15 SP5 | Affected |
| SUSE Manager Proxy 4.0 | Affected |
| SUSE Manager Proxy 4.1 | Affected |
| SUSE Manager Proxy 4.2 | Affected |
| SUSE Manager Retail Branch Server 4.0 | Affected |
| SUSE Manager Retail Branch Server 4.1 | Affected |
| SUSE Manager Retail Branch Server 4.2 | Affected |
| SUSE Manager Server 4.0 | Affected |
| SUSE Manager Server 4.1 | Affected |
| SUSE Manager Server 4.2 | Affected |
| openSUSE Leap 15.3 | Affected |
| openSUSE Leap 15.4 | Affected |
| openSUSE Leap 15.5 | Affected |
| openSUSE Leap 15.6 | Affected |
EUVD-2026-51559
GHSA-vmj8-4452-jj72
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB