CVE-2026-12047: pgAdmin 4: HTML injection in cloud verify_credentials / deploy endpoints via unsanitised SDK exception text

Published Jun 18, 2026
·
Updated

HTML injection in pgAdmin 4's cloud deployment module. The verifycredentials, deploy, regions, and update-server endpoints under /rds/, /azure/, /google/, and the top-level /cloud/ blueprint propagated AWS / Azure / Google SDK exception text — and the related file-resolution and database-commit exception text — into the JSON response body (the info and errormsg fields) without HTML-encoding. The Cloud Wizard frontend rendered these strings through html-react-parser, so an attacker-influenced exception message embedded structural HTML directly into the wizard's DOM.

The reported entry point is /rds/verifycredentials/. An authenticated pgAdmin user submits a crafted accesskey whose value contains an <iframe/src=...> payload; AWS STS rejects the credential with an IncompleteSignature exception whose text quotes the accesskey verbatim; the pgAdmin backend forwards that text into the JSON info field; the Cloud Wizard's FormFooterMessage parses it as HTML. The browser fetches the iframe's src from an attacker-controlled host, and JavaScript executing inside the cross-origin iframe writes to parent.location, redirecting the victim's pgAdmin tab. Because the injection renders inside pgAdmin's own interface, X-Frame-Options and Content-Security-Policy frame-ancestors do not mitigate it. Baseline impact is self-targeted (the same user who supplied the payload sees the injection); escalation against other authenticated users requires an additional cross-site request-forgery primitive capable of submitting the malformed credential request with a valid X-pgA-CSRFToken in the victim's browser context.

The same unsanitised-error-into-JSON pattern was present across multiple sibling endpoints — Azure's checkclusternameavailability, every Google endpoint that surfaces SDK errors (verificationack, projects, regions, instancetypes, databaseversions, the verifycredentials path-resolution branches), the central /deploy endpoint that bubbles str(e) from deployonrds / deployonazure / deployongoogle, and updatecloudserver which surfaces the str(e) from a failing db.session.commit — all of which are now covered.

Fix HTML-escapes every external/SDK exception string at the endpoint sink via a new shared sanitizeexternaltext helper (HTML escape with control-character strip), promoted out of the psycopg3 driver into web/pgadmin/utils/textsanitize.py. The Cloud Wizard frontend additionally renders its FormFooterMessage in plain-text mode for backend-derived strings, so the value is never parsed as HTML even if a future sink forgets the escape.

This issue affects pgAdmin 4: from 6.6 before 9.16.

Affected Software

2 affected components
pgAdmin pgAdmin 4>=6.6<9.16
pgAdmin Pgadmin 4 Postgresql>=6.6<9.16

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Upgrade

    Upgrade pgAdmin 4 to a version that resolves this vulnerability.

    Fixed in 9.16
  2. Configuration

    Ensure Cloud Wizard FormFooterMessage renders backend-derived strings in plain-text mode (not parsed as HTML), so future sinks cannot reintroduce HTML parsing even if escape is missed.

    Cloud Wizard frontend (FormFooterMessage) render_mode = plain-text
  3. Configuration

    Do not render backend-derived error/exception strings through html-react-parser; treat exception-derived fields as text so attacker-controlled exception content cannot embed structural HTML in the wizard DOM.

    Cloud Wizard frontend (FormFooterMessage rendering pipeline) html-react-parser usage = disabled_for_backend_derived_exception_strings
  4. Configuration

    At the endpoint sink, HTML-escape every external/SDK exception string by using the new shared sanitize_external_text helper (HTML escape + control-character strip). Promote it into web/pgadmin/utils/text_sanitize.py and apply it to JSON fields that currently bubble SDK/exception text such as info/errormsg (including /rds/verify_credentials/ entry point and related /rds/, /azure/, /google/, and /cloud/ flows mentioned).

    pgAdmin backend endpoint sink (Cloud deployment module) sanitize_external_text helper = HTML escape with control-character strip

Event History

Jun 18, 2026
CVE Published
via MITRE·11:37 PM
Data Sourced
via MITRE·11:37 PM
DescriptionSeverityWeakness
Jun 19, 2026
Data Sourced
via NVD·12:16 AM
RemedyDescriptionSeverityWeaknessAffected Software
Free Weekly Intel

Don't miss critical vulnerabilities

Join thousands of security professionals who receive our weekly digest of trending CVEs, zero-days, and exploited vulnerabilities.

No spam. Unsubscribe anytime.

Frequently Asked Questions

1

What is the severity of CVE-2026-12047?

The severity of CVE-2026-12047 is rated as low with a score of 3.5.

2

How do I fix CVE-2026-12047?

To fix CVE-2026-12047, ensure to sanitize SDK exception text in the cloud deployment module endpoints.

3

What impact does CVE-2026-12047 have on pgAdmin 4?

CVE-2026-12047 allows for HTML injection which could affect the integrity of web interfaces in pgAdmin 4.

4

Which components of pgAdmin 4 are affected by CVE-2026-12047?

The cloud verify_credentials, deploy, regions, and update-server endpoints under /rds/, /azure/, /google/, and /cloud/ are affected by CVE-2026-12047.

5

What type of vulnerability is CVE-2026-12047?

CVE-2026-12047 falls under the categories of XSS and CSRF vulnerabilities.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203