CVE-2026-12044

HIGHPre-NVD 8.88.8—
EchelonGraph scoreMEDIUM confidence

Score 8.8 from GitHub Security Advisory (severity: HIGH) published 2026-06-19. a secondary CVSS source baseline 8.8; sources differ by 0.0.

Triggered by: GitHub Security Advisory CVSS
Sources: epss, ghsa, secondary
8.8EG
EchelonGraph verdictPlan mitigationSerious severity, but no confirmed exploitation yet.
  • High severity, but no confirmed exploitation yet
CISA-KEV: Not listedEPSS PROB: 0.7%CVSS: 8.8Exploit: None knownExposed services: Not assessed

An upstream fix is merged but not yet released — mitigate (WAF / firewall / segmentation) until the release ships, then apply it.

SQL injection in pgAdmin 4 across every dialog template that renders `COMMENT ON ... IS '' for a user-supplied description field. The Jinja templates for Domains (and their constraints), Foreign Tables, Languages, and Event Triggers, plus the Views OID-lookup query, interpolated the description directly inside a single-quoted SQL literal -- '{{ data.description }}' -- instead of passing it through the qtLiteral escape filter. An authenticated pgAdmin user with permission to create or alter the affected object types could submit a description containing an apostrophe, break out of the literal and chain arbitrary SQL. The injected SQL runs under the PostgreSQL role the user is already authenticated as; for a connected role with COPY ... TO/FROM PROGRAM (typically PostgreSQL superuser), this chains to OS command execution on the PostgreSQL host. The defect does not cross a privilege boundary -- the user already has direct SQL access to that role through pgAdmin's Query Tool -- so the attacker gains no capability beyond what their database role already grants. The marginal impact captures bypass of any application-layer Query Tool gating an operator may have configured.

The defect was originally reported against the Domain Dialog description field; a code-wide audit identified sixteen sites of the same pattern across the templates listed above. The same review also surfaced ten related sinks in the pgstattuple/pgstatindex stats templates -- pgstattuple('{{schema}}.{{table}}') and the matching pgstatindex shape -- where qtIdent escapes embedded double quotes inside the identifier but not apostrophes, so a user with CREATE privilege on a schema could plant a table or index named foo'bar and a later stats viewer would render an unbalanced literal.

Fix is layered:

  • Sites: replace every '{{ x.description }}' with {{ x.description|qtLiteral(conn) }} (no surrounding quotes -- the filter wraps the value in escaped quotes itself). Plumb conn=self.conn through every render_template call that loads one of these templates. Also corrects a { % elif Jinja typo in the foreign-table schema diff (dead branch). Rewrite the ten pgstattuple/pgstatindex stats sites to address the relation via OID + ::oid::regclass cast (e.g. pgstattuple({{ tid }}::oid::regclass)), eliminating the embedded literal-call form entirely so that bug-class can no longer recur there.
  • Driver hardening: qtLiteral (in utils/driver/psycopg3/__init__.py) used to silently return the raw unescaped value when its conn argument was falsy. It now raises ValueError -- surfacing the entire bug class going forward. The change immediately uncovered eight latent plumbing bugs (in schemas/__init__.py, schemas/functions/__init__.py, schemas/tables/utils.py, foreign_servers/__init__.py, and seven sites in roles/__init__.py) -- all fixed as part of this patch. The inner except block that swallowed adapter-level failures and returned the raw value is also removed, so unadaptable inputs raise instead of leaking unescaped values.
  • Regression tests: a per-template behavioural test renders each previously-vulnerable template with an apostrophe-injection payload and asserts the escaped fragment is present and the vulnerable fragment absent; a lint test walks every *.sql template flagging any '{{ ... }}'` single-quote-wrapped interpolation against an explicit allowlist; unit tests cover the new qtLiteral fail-fast and inner-except raise paths.

This issue affects pgAdmin 4: from 1.0 before 9.16.

CVSS v3
8.8
EG Score
8.8HIGHmedium confidence
EG Risk
44
EG Risk 44/100

EG Risk is EchelonGraph's 0–100 priority score: it fuses intrinsic severity with real-world exploitation and automatability so you can rank equal-severity CVEs and fix the most dangerous first. Higher = act sooner. Distinct from the 0–10 EG Score (severity).

How it’s computed
Severity88% × 45%
Exploitation1% × 40%
Automatability30% × 15%
EPSS PROB
0.7%
EPSS %ILE
52nd
KEV
Not listed

Published

June 19, 2026

Last Modified

July 1, 2026

Advisory Details (3)

Auto-updated Jun 22, 2026
Upstream fix merged — awaiting tagged release. Sources: github_commit.
generic

SQL injection via comment and description fields in dialog SQL templates (CVE-2026-12044) · Issue #10078 · pgadmin-org/pgadmin4 · GitHub

https://github.com/pgadmin-org/pgadmin4/issues/10078
github_commit

commit 658bb585d (pgadmin-org/pgadmin4)

Fix landed in pgadmin-org/pgadmin4 commit 658bb585d — awaiting tagged release

https://github.com/pgadmin-org/pgadmin4/commit/658bb585d
github_commit

commit 2ae0d3610 (pgadmin-org/pgadmin4)

Fix landed in pgadmin-org/pgadmin4 commit 2ae0d3610 — awaiting tagged release

https://github.com/pgadmin-org/pgadmin4/commit/2ae0d3610

Vendor Advisories for CVE-2026-12044(1)

These vendors published their own advisory mentioning this CVE — often with vendor-specific remediation steps + affected product lists not in NVD.

Weakness Classification(2)

MITRE Common Weakness Enumeration — the root-cause categories this CVE belongs to.

Data Freshness Timeline

(refreshed 7× in last 7d / 26× in last 30d)

Each row is a source pipeline that fetched or updated this CVE on that date, with what changed. For example, "NVD update" means NVD published or revised its analysis for this CVE; "MITRE cvelistV5" means we ingested or refreshed it from the CNA feed. Most recent first.

Showing the most recent 100 of 231 total refreshes for this CVE.

  1. 2026-10-10 19:59 UTCEPSS rescore
  2. 2026-10-09 20:06 UTCEPSS rescore
  3. 2026-10-08 17:11 UTCEPSS rescore
  4. 2026-10-07 23:47 UTCEPSS rescore
  5. 2026-10-06 15:17 UTCEPSS rescore
  6. 2026-10-05 17:42 UTCEPSS rescore
  7. 2026-10-04 23:21 UTCEPSS rescore
  8. 2026-10-03 14:25 UTCEPSS rescore
  9. 2026-10-03 06:09 UTCOSV refresh
  10. 2026-10-01 19:49 UTCEPSS rescore
  11. 2026-09-30 15:02 UTCEPSS rescore
  12. 2026-09-29 15:20 UTCEPSS rescore
  13. 2026-09-28 13:50 UTCEPSS rescore
  14. 2026-09-26 15:58 UTCEPSS rescore
  15. 2026-09-23 13:47 UTCEPSS rescore
  16. 2026-09-20 20:15 UTCEPSS rescore
  17. 2026-09-18 19:27 UTCEPSS rescore
  18. 2026-09-16 05:14 UTCEPSS rescore
  19. 2026-09-14 03:05 UTCEG score recompute
  20. 2026-09-14 03:05 UTCGHSA enrichment
  21. 2026-09-13 16:46 UTCEPSS rescore
  22. 2026-09-13 13:49 UTCEG score recompute
  23. 2026-09-13 13:49 UTCGHSA enrichment
  24. 2026-09-12 15:00 UTCEPSS rescore
  25. 2026-09-11 14:52 UTCEPSS rescore
Show 75 more
  1. 2026-09-11 09:36 UTCEPSS rescore
  2. 2026-09-10 09:34 UTCEPSS rescore
  3. 2026-09-08 22:00 UTCEPSS rescore
  4. 2026-09-07 16:01 UTCEPSS rescore
  5. 2026-09-06 13:47 UTCEPSS rescore
  6. 2026-09-04 05:06 UTCEPSS rescore
  7. 2026-09-02 14:11 UTCEPSS rescore
  8. 2026-09-01 13:53 UTCEPSS rescore
  9. 2026-09-01 04:39 UTCEPSS rescore
  10. 2026-08-30 20:53 UTCEG score recompute
  11. 2026-08-30 20:53 UTCGHSA enrichment
  12. 2026-08-30 19:17 UTCEPSS rescore
  13. 2026-08-30 01:21 UTCEPSS rescore
  14. 2026-08-28 21:40 UTCEPSS rescore
  15. 2026-08-27 14:24 UTCEPSS rescore
  16. 2026-08-25 13:48 UTCEPSS rescore
  17. 2026-08-24 22:18 UTCEG score recompute
  18. 2026-08-24 22:18 UTCGHSA enrichment
  19. 2026-08-24 05:08 UTCGHSA enrichment
  20. 2026-08-23 14:12 UTCGHSA enrichment
  21. 2026-08-23 01:03 UTCEG score recompute
  22. 2026-08-23 01:03 UTCGHSA enrichment
  23. 2026-08-23 00:19 UTCEPSS rescore
  24. 2026-08-21 23:48 UTCEPSS rescore
  25. 2026-08-21 23:36 UTCGHSA enrichment
  26. 2026-08-21 10:27 UTCEG score recompute
  27. 2026-08-21 10:27 UTCGHSA enrichment
  28. 2026-08-20 22:55 UTCEPSS rescore
  29. 2026-08-20 21:17 UTCGHSA enrichment
  30. 2026-08-20 08:08 UTCEG score recompute
  31. 2026-08-20 08:08 UTCGHSA enrichment
  32. 2026-08-19 17:03 UTCEPSS rescore
  33. 2026-08-19 07:25 UTCEG score recompute
  34. 2026-08-19 07:25 UTCGHSA enrichment
  35. 2026-08-18 13:48 UTCEPSS rescore
  36. 2026-08-17 10:24 UTCGHSA enrichment
  37. 2026-08-16 21:16 UTCEG score recompute
  38. 2026-08-16 21:16 UTCGHSA enrichment
  39. 2026-08-16 14:56 UTCEPSS rescore
  40. 2026-08-16 08:07 UTCEG score recompute
  41. 2026-08-16 08:07 UTCGHSA enrichment
  42. 2026-08-16 02:14 UTCEPSS rescore
  43. 2026-08-15 18:59 UTCGHSA enrichment
  44. 2026-08-15 05:50 UTCEG score recompute
  45. 2026-08-15 05:50 UTCGHSA enrichment
  46. 2026-08-15 01:30 UTCEPSS rescore
  47. 2026-08-14 16:40 UTCGHSA enrichment
  48. 2026-08-14 03:24 UTCEG score recompute
  49. 2026-08-14 03:24 UTCGHSA enrichment
  50. 2026-08-13 22:00 UTCEPSS rescore
  51. 2026-08-13 14:15 UTCGHSA enrichment
  52. 2026-08-13 01:07 UTCEG score recompute
  53. 2026-08-13 01:07 UTCGHSA enrichment
  54. 2026-08-12 13:50 UTCEPSS rescore
  55. 2026-08-12 11:58 UTCGHSA enrichment
  56. 2026-08-11 22:49 UTCEG score recompute
  57. 2026-08-11 22:49 UTCGHSA enrichment
  58. 2026-08-11 13:42 UTCEPSS rescore
  59. 2026-08-11 09:33 UTCEG score recompute
  60. 2026-08-11 09:33 UTCGHSA enrichment
  61. 2026-08-10 23:59 UTCEPSS rescore
  62. 2026-08-10 20:23 UTCGHSA enrichment
  63. 2026-08-10 07:14 UTCGHSA enrichment
  64. 2026-08-09 18:05 UTCEG score recompute
  65. 2026-08-09 18:05 UTCGHSA enrichment
  66. 2026-08-09 13:46 UTCEPSS rescore
  67. 2026-08-09 04:57 UTCEG score recompute
  68. 2026-08-09 04:57 UTCGHSA enrichment
  69. 2026-08-08 16:37 UTCEPSS rescore
  70. 2026-08-08 15:48 UTCGHSA enrichment
  71. 2026-08-08 02:39 UTCEG score recompute
  72. 2026-08-08 02:39 UTCGHSA enrichment
  73. 2026-08-07 13:30 UTCGHSA enrichment
  74. 2026-08-07 00:22 UTCEG score recompute
  75. 2026-08-07 00:22 UTCGHSA enrichment

Frequently asked(5)

What is CVE-2026-12044?
CVE-2026-12044 is a high vulnerability published on June 19, 2026. SQL injection in pgAdmin 4 across every dialog template that renders COMMENT ON ... IS '<description>' for a user-supplied description field. The Jinja templates for Domains (and their constraints), Foreign Tables, Languages, and Event Triggers, plus the Views OID-lookup query, interpolated the…
When was CVE-2026-12044 disclosed?
CVE-2026-12044 was first published on June 19, 2026, with the most recent update on July 1, 2026. EchelonGraph re-ingests CVE updates from NVD on a 2-hour cycle, so this page reflects the latest published state.
Is CVE-2026-12044 actively exploited?
CVE-2026-12044 is not currently on CISA's Known Exploited Vulnerabilities catalog. FIRST EPSS estimates a 0.7% probability of exploitation in the next 30 days (52nd percentile of EPSS-scored CVEs).
What is the CVSS score of CVE-2026-12044?
CVE-2026-12044 has a CVSS base score of 8.8 (a secondary CVSS source that NVD displays; NVD's own analysis pending).
How do I remediate CVE-2026-12044?
An upstream fix for CVE-2026-12044 has been merged but is not yet in a tagged release. Until it ships, restrict network exposure of the affected system or apply the vendor's mitigation, then update to the release that contains the fix. The vendor advisories EchelonGraph has for CVE-2026-12044 are linked in the Vendor Advisories panel on this page.

Dependency Blast Radius

Explore the affected products and dependency analysis for CVE-2026-12044

Explore →

Is Your Infrastructure Affected by CVE-2026-12044?

EchelonGraph automatically scans your cloud infrastructure and maps CVE exposure using blast radius analysis.