Vigilbase CVEConnect your agent

pgAdmin 4: RCE via backslash-escape mismatch in Import/Export Data query guard (incomplete defense, sibling gap to CVE-2025-13780)

Not in CISA KEVCVE-2026-17566CWE-78CWE-115

Not confirmed exploited. 1 of 8 rule sources name it.

Edge rules
1/8
Our test
No exploit yet
CVSS
9.4
EPSS
0.7% Top 48%
Posts, 14d
02026-10-21: 0 posts2026-10-22: 0 posts2026-10-23: 0 posts2026-10-24: 0 posts2026-10-25: 0 posts2026-10-26: 0 posts2026-10-27: 0 posts2026-10-28: 0 posts2026-10-29: 0 posts2026-10-30: 0 posts2026-10-31: 0 posts2026-11-01: 0 posts2026-11-02: 0 posts2026-11-03: 0 posts
Published
2026-07-31
pgAdmin 4's Import/Export Data tool builds a psql \copy (...) command line by interpolating a user-supplied SQL query into a Jinja template and passing the rendered line to psql via --command. To stop an attacker from breaking out of the… More

pgAdmin 4's Import/Export Data tool builds a psql \copy (...) command line by interpolating a user-supplied SQL query into a Jinja template and passing the rendered line to psql via --command. To stop an attacker from breaking out of the (...) wrapper, create_import_export_job() (route POST /import_export/job/<sid>, gated only by the ordinary, commonly-granted tools_import_export_data permission) validated the query with a hand-written parenthesis-balance checker, _is_query_parens_balanced(). That checker always treated a backslash before a single quote (\') as escaping the quote, i.e. as if standard_conforming_strings were off. PostgreSQL has defaulted standard_conforming_strings to on since 9.1 (2010), the default on every PostgreSQL version pgAdmin 4 currently supports (13-18); under that default psql's own \copy tokenizer treats \ as an ordinary character, so a single quote immediately after it closes the string literal. A query such as SELECT 'a\') TO PROGRAM 'echo pwned' x' was therefore accepted as "balanced" by pgAdmin's checker (which believed the ) was still inside the string), while psql, run through the actual rendered command line, closes the string at that point and treats the following ) as the end of the wrapping \copy (...) subquery, exposing an attacker-chosen TO PROGRAM '<command>' clause that psql executes via popen() -- independent of a subsequent syntax error later on the same line. This is the same class of bug as CVE-2025-12762/CVE-2025-13780 (RCE via psql meta-command/COPY injection during PLAIN-format dump restore), reached through an independently written defense in a different module (Import/Export Data rather than Restore) that had its own, different logic bug (inverted backslash-escape semantics rather than a BOM-defeated regex anchor). The fix rejects any backslash inside a single-quoted string in the query outright, rather than picking one of the two possible psql interpretations. This is intentionally conservative: because the correct interpretation of \ depends on the target server's standard_conforming_strings setting, which the checker cannot reliably know at validation time, refusing the query is safer than guessing. This issue affects pgAdmin 4: from the introduction of _is_query_parens_balanced() before 9.18.

Ask Vigil

AI · answers from this page
Ask about CVE-2026-17566: who's covered, what to patch first, how vendors compare. I cite sources and won't help with attacks.

Workers AI (Llama 3.3). Can be wrong: check the cited source.

Severity, decoded

CVSS 4.0
Critical · 9.4 / 10

Exploitable over the network, with low privileges and no user interaction, leading to full loss of confidentiality, integrity and availability; other systems can also be hit (full loss of confidentiality, integrity and availability).

Over the internetAny user loginNo user actionWorks reliablySpreads beyond the appFull compromise
How the score is built11 metrics
  • Attack vectorAn attacker can reach it over the internet; no access to your network needed.
    Network
  • Attack complexityNo built-in defences have to be bypassed; the attack works reliably.
    Low
  • Attack requirementsThe attack works without any special deployment or timing conditions.
    None
  • Privileges requiredThe attacker needs an ordinary user account.
    Low
  • User interactionNo one has to click or open anything; the attack works on its own.
    None
  • Confidentiality impact (vulnerable system)An attacker can read all data the affected component holds, or the most sensitive parts of it.
    High
  • Integrity impact (vulnerable system)An attacker can change any data or files the affected component protects.
    High
  • Availability impact (vulnerable system)An attacker can take the component down completely or keep it from serving anyone.
    High
  • Confidentiality impact (other systems)Other systems that rely on it can have all their data read.
    High
  • Integrity impact (other systems)Other systems that rely on it can have any data changed.
    High
  • Availability impact (other systems)Other systems that rely on it can be taken down.
    High
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H
CISA's assessmentSSVC, from the CVE record
ExploitationNone

CISA has seen no public exploit and no attacks.

AutomatableNo

At least one step needs hands-on work, which slows mass attacks.

Technical impactTotal

A successful attack gives full control over the affected software or all of its data.

Public exploits

None found
0 Metasploit0 Exploit-DB0 Scanner template0 GitHub PoCs

No exploit in Exploit-DB or Metasploit, and no scanner template. That lowers, but doesn't remove, the chance of mass exploitation.

Timeline

  1. 2026-07-31
    CVE published
    CVE List
  2. 2026-09-16
    F5 ships a rule
    pgAdmin Remote Command Execution (2)

Social

2026-10-21: 0 posts2026-10-22: 0 posts2026-10-23: 0 posts2026-10-24: 0 posts2026-10-25: 0 posts2026-10-26: 0 posts2026-10-27: 0 posts2026-10-28: 0 posts2026-10-29: 0 posts2026-10-30: 0 posts2026-10-31: 0 posts2026-11-01: 0 posts2026-11-02: 0 posts2026-11-03: 0 posts

No posts seen yet on X, Bluesky, Mastodon, Hacker News or GitHub.

Vendor statements

Quoted
CloudflareWAF Managed RulesNo public claim

We found no public statement from this vendor naming this CVE. That is not proof of no protection: generic rules may still catch it. Each row gives the rule ID and its default action. The feed starts in January 2025, so older rules are missing.

AWSAWS WAF Managed RulesNo public claim

We found no public statement from this vendor naming this CVE. That is not proof of no protection: generic rules may still catch it. AWS often describes a vulnerability without naming its CVE (for example "Log4j"). We count only entries that name the CVE, so AWS coverage is understated.

Microsoft AzureFront Door and Application Gateway WAF (DRS)No public claim

We found no public statement from this vendor naming this CVE. That is not proof of no protection: generic rules may still catch it. The rule tables name CVEs but carry no dates, so Azure is left out of every time-to-rule figure.

Google CloudCloud Armor preconfigured WAF rulesNo public claim

We found no public statement from this vendor naming this CVE. That is not proof of no protection: generic rules may still catch it. Google names few CVEs: the release notes start in May 2024 and the rules reference lists CVEs without dates. Its cve-canary rules are opt-in.

FastlyNext-Gen WAF virtual patchesBefore feed history

The CVE predates the oldest entry in this vendor's public feed, so a rule may exist that we cannot see.

F5Attack signatures (Distributed Cloud WAF)1 quoteRule published

First rule 2026-09-16, 47 days after the CVE was published.

2026-09-16New rule200103692Source
Added: signature 200103692 "pgAdmin Remote Command Execution (2)" (Command Execution, risk High), systems: Other Web Server. References: CVE-2026-17566.
AkamaiApp & API Protector (Adaptive Security Engine)No public source

This vendor publishes no machine-readable rule changelog we can check.

OWASP CRSCore Rule Set (open source, used inside many WAFs)No public claim

We found no public statement from this vendor naming this CVE. That is not proof of no protection: generic rules may still catch it. CRS rarely names CVEs: it relies on generic detections. Our own lab measures what it actually blocks.