CVE-2026-17351: CWE-89 Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection') in pgadmin.org pgAdmin 4
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.
AI Analysis
Technical Summary
This vulnerability in pgAdmin 4 involves improper neutralization of special elements in SQL commands used by the AI Assistant's execute_sql_query tool. The tool relies on sqlparse to validate that the LLM-supplied query contains exactly one non-transaction-control statement before wrapping it in a read-only transaction. However, sqlparse's handling of string literals differs from PostgreSQL's, allowing crafted payloads to be parsed as a single statement by sqlparse but executed as multiple statements by PostgreSQL. This discrepancy enables an attacker to smuggle additional commands, such as COMMIT and CREATE TABLE, bypassing the read-only transaction and enabling write or remote code execution. An initial attempted fix using psycopg's prepare=True parameter failed due to default connection settings ignoring this parameter. The corrected fix involves explicitly setting conn.prepare_threshold=0 on the dedicated connection to enforce the extended query protocol and reject multi-statement queries. The vulnerability affects pgAdmin 4 versions from 9.13 before 9.17.
Potential Impact
Successful exploitation allows an attacker to bypass read-only transaction restrictions in the AI Assistant's SQL execution context, enabling execution of arbitrary SQL commands including write operations and potentially remote code execution. This compromises the confidentiality, integrity, and availability of the affected PostgreSQL database managed via pgAdmin 4.
Mitigation Recommendations
Patch status is not yet confirmed — check the vendor advisory for current remediation guidance. The initial fix attempt was ineffective due to default psycopg3 connection settings. The corrected fix requires setting conn.prepare_threshold=0 on the AI Assistant's dedicated database connection to enforce the extended query protocol and prevent multi-statement execution. Administrators should monitor pgAdmin 4 updates and apply official patches once released. Until then, consider restricting or disabling the AI Assistant's execute_sql_query tool if feasible.
CVE-2026-17351: CWE-89 Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection') in pgadmin.org pgAdmin 4
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 v3.1
Score 9.0critical
Affected software
pgadmin.org
pgAdmin 4
Run on your own infrastructure? Check whether these packages are installed with threat-finder — our free open-source scanner.
Weaknesses
AI-Powered Analysis
Machine-generated threat intelligence
Technical Analysis
This vulnerability in pgAdmin 4 involves improper neutralization of special elements in SQL commands used by the AI Assistant's execute_sql_query tool. The tool relies on sqlparse to validate that the LLM-supplied query contains exactly one non-transaction-control statement before wrapping it in a read-only transaction. However, sqlparse's handling of string literals differs from PostgreSQL's, allowing crafted payloads to be parsed as a single statement by sqlparse but executed as multiple statements by PostgreSQL. This discrepancy enables an attacker to smuggle additional commands, such as COMMIT and CREATE TABLE, bypassing the read-only transaction and enabling write or remote code execution. An initial attempted fix using psycopg's prepare=True parameter failed due to default connection settings ignoring this parameter. The corrected fix involves explicitly setting conn.prepare_threshold=0 on the dedicated connection to enforce the extended query protocol and reject multi-statement queries. The vulnerability affects pgAdmin 4 versions from 9.13 before 9.17.
Potential Impact
Successful exploitation allows an attacker to bypass read-only transaction restrictions in the AI Assistant's SQL execution context, enabling execution of arbitrary SQL commands including write operations and potentially remote code execution. This compromises the confidentiality, integrity, and availability of the affected PostgreSQL database managed via pgAdmin 4.
Mitigation Recommendations
Patch status is not yet confirmed — check the vendor advisory for current remediation guidance. The initial fix attempt was ineffective due to default psycopg3 connection settings. The corrected fix requires setting conn.prepare_threshold=0 on the AI Assistant's dedicated database connection to enforce the extended query protocol and prevent multi-statement execution. Administrators should monitor pgAdmin 4 updates and apply official patches once released. Until then, consider restricting or disabling the AI Assistant's execute_sql_query tool if feasible.
Technical Details
- Data Version
- 5.2
- Assigner Short Name
- PostgreSQL
- Date Reserved
- 2026-07-25T02:52:57.350Z
- Cvss Version
- 3.1
- State
- PUBLISHED
Threat ID: 6a6cf74ebf32cb7a34294bc2
Added to database: 07/31/2026, 19:28:14 UTC
Last enriched: 07/31/2026, 19:40:40 UTC
Last updated: 09/14/2026, 22:01:32 UTC
Views: 54
Community Reviews
0 reviewsCrowdsource mitigation strategies, share intel context, and vote on the most helpful responses. Sign in to add your voice and help keep defenders ahead.
Want to contribute mitigation steps or threat intel context? Sign in or create an account to join the community discussion.
Actions
Updates to AI analysis require Pro Console access. Upgrade inside Console → Billing.
Need more coverage?
Upgrade to Pro Console for AI refresh and higher limits.
For incident response and remediation, OffSeq services can help resolve threats faster.
Latest Threats
Check if your credentials are on the dark web
Instant breach scanning across billions of leaked records. Free tier available.