CVE-2026-17351
Received Received - Intake

SQL Injection Bypass in pgAdmin AI Assistant

Vulnerability report for CVE-2026-17351, including description, CVSS score, EPSS score, affected products, exploitability, helpful resources, and attack-flow context.

Publication date: 2026-07-31

Last updated on: 2026-07-31

Assigner: PostgreSQL

Description

The fix for CVE-2026-12045 in pgAdmin 4 9.16 required the LLM-supplied query passed to the AI Assistant's execute_sql_query tool to parse, via sqlparse, as exactly one non-transaction-control statement before running it inside a BEGIN TRANSACTION READ ONLY wrapper. sqlparse's string-literal lexing can disagree with PostgreSQL's own parser: under standard_conforming_strings = on (PostgreSQL's default since 9.1), a backslash immediately before a quote is an ordinary character to PostgreSQL, but sqlparse treats it as escaping the quote. A payload such as SELECT '\';COMMIT;CREATE TABLE pwn(x int);SELECT 1 --' therefore parses as a single SELECT to sqlparse's validator, while PostgreSQL executes it as four statements: the smuggled COMMIT ends the wrapping read-only transaction, and the trailing ROLLBACK becomes a no-op. This reintroduces the same write/RCE bypass CVE-2026-12045 was meant to close, reachable via the same indirect prompt-injection delivery (an attacker plants the payload in any object the AI Assistant may read; the LLM emits it as a tool call). An initial candidate fix ran the query with psycopg's execute(..., prepare=True), intending to force PostgreSQL's own Parse step (extended query protocol) to reject multi-statement text regardless of sqlparse's classification. This candidate fix does not work as submitted: psycopg3's PrepareManager silently ignores the prepare argument whenever the connection's prepare_threshold is None, which is pgAdmin's default for every server connection (the per-server "Prepare threshold" field is blank unless an administrator explicitly sets it) -- psycopg3 falls back to the simple query protocol, the same multi-statement-capable path the bypass exploits, so the candidate fix closes nothing on any real-world default configuration. The corrected fix sets conn.prepare_threshold = 0 directly on the dedicated, single-use read-only connection the AI Assistant tool opens, structurally forcing the extended query protocol independent of any server-level configuration. Verified against a live PostgreSQL 18 instance: the payload executes successfully under the prepare_threshold=None (default) behavior, and is rejected with "cannot insert multiple commands into a prepared statement" once prepare_threshold=0 is set on that connection. This issue affects pgAdmin 4: from 9.13 before 9.17.

CVSS Scores

EPSS Scores

Probability:
Percentile:

Meta Information

Published
2026-07-31
Last Modified
2026-07-31
Generated
2026-07-31
AI Q&A
2026-07-31
EPSS Evaluated
N/A
NVD
EUVD

Affected Vendors & Products

Showing 1 associated CPE
Vendor Product Version / Range
pgadmin pgadmin_4 to 9.17 (exc)

Helpful Resources

Exploitability

CWE
CWE Icon
KEV
KEV Icon
CWE ID Description
CWE-115 The product misinterprets an input, whether from an attacker or another product, in a security-relevant fashion.
CWE-89 The product constructs all or part of an SQL command using externally-influenced input from an upstream component, but it does not neutralize or incorrectly neutralizes special elements that could modify the intended SQL command when it is sent to a downstream component. Without sufficient removal or quoting of SQL syntax in user-controllable inputs, the generated SQL query can cause those inputs to be interpreted as SQL instead of ordinary user data.

Attack-Flow Graph

AI Quick Actions

Instant insights powered by AI
Executive Summary

This vulnerability involves a bypass of a previous security fix in pgAdmin 4. The issue occurs when sqlparse, a library used to validate SQL queries, incorrectly parses queries containing backslashes before quotes. This allows an attacker to smuggle additional SQL commands like COMMIT or CREATE TABLE into a query that appears valid to sqlparse but executes multiple statements in PostgreSQL. The vulnerability affects pgAdmin 4 versions from 9.13 to 9.16.

Detection Guidance

This vulnerability is specific to pgAdmin 4 versions 9.13 through 9.16 and involves SQL injection via the AI Assistant tool. Detection requires checking pgAdmin version and reviewing AI Assistant tool usage logs for suspicious SQL queries containing payloads like SELECT '\';COMMIT;CREATE TABLE pwn(x int);SELECT 1 --'.

Impact Analysis

This vulnerability allows an attacker to bypass read-only transaction restrictions and execute unauthorized SQL commands such as COMMIT, CREATE TABLE, or other write operations. This could lead to data tampering, unauthorized data access, or remote code execution if combined with other vulnerabilities. It is reachable through indirect prompt injection where an attacker plants malicious payloads in objects the AI Assistant may read.

Compliance Impact

This vulnerability could lead to unauthorized data modifications or access, violating integrity and confidentiality requirements under GDPR and HIPAA. Unauthorized write operations or data tampering could result in non-compliance with data protection principles, potentially leading to legal penalties, loss of trust, and regulatory fines.

Mitigation Strategies

Upgrade pgAdmin 4 to version 9.17 or later. If immediate upgrade is not possible, disable the AI Assistant tool in pgAdmin or restrict its access to untrusted objects. Ensure the 'Prepare threshold' server setting is explicitly configured to a non-None value.

Chat Assistant

Ask questions about this CVE
Hi! I’m here to help you understand CVE-2026-17351. Ask me anything about the vulnerability, its impact, or mitigation strategies.
0/70

EPSS Chart