<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title>Most recent entries from all</title>
    <link>https://cve.radiocsirt.org</link>
    <description>Contains only the most 10 recent entries.</description>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>python-feedgen</generator>
    <language>en</language>
    <lastBuildDate>Fri, 02 Oct 2026 11:20:44 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-17351 — pgAdmin 4: AI Assistant read-only transaction bypass via sqlparse/PostgreSQL lexer disagreement (incomplete fix for CVE…</title>
      <link>https://cve.radiocsirt.org/vuln/cve-2026-17351</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; pgadmin.org pgAdmin 4&lt;/p&gt;
&lt;p&gt;The fix for CVE-2026-12045 in pgAdmin 4 9.16 required the LLM-supplied query passed to the AI Assistant&amp;#39;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&amp;#39;s string-literal lexing can disagree with PostgreSQL&amp;#39;s own parser: under standard_conforming_strings = on (PostgreSQL&amp;#39;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 &amp;#39;\&amp;#39;;COMMIT;CREATE TABLE pwn(x int);SELECT 1 --&amp;#39; therefore parses as a single SELECT to sqlparse&amp;#39;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).&lt;/p&gt;
&lt;p&gt;An initial candidate fix ran the query with psycopg&amp;#39;s execute(..., prepare=True), intending to force PostgreSQL&amp;#39;s own Parse step (extended query protocol) to reject multi-statement text regardless of sqlparse&amp;#39;s classification. This candidate fix does not work as submitted: psycopg3&amp;#39;s PrepareManager silently ignores the prepare argument whenever the connection&amp;#39;s prepare_threshold is None, which is pgAdmin&amp;#39;s default for every…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; pgadmin.org pgAdmin 4&lt;/p&gt;
&lt;p&gt;The fix for CVE-2026-12045 in pgAdmin 4 9.16 required the LLM-supplied query passed to the AI Assistant&amp;#39;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&amp;#39;s string-literal lexing can disagree with PostgreSQL&amp;#39;s own parser: under standard_conforming_strings = on (PostgreSQL&amp;#39;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 &amp;#39;\&amp;#39;;COMMIT;CREATE TABLE pwn(x int);SELECT 1 --&amp;#39; therefore parses as a single SELECT to sqlparse&amp;#39;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).&lt;/p&gt;
&lt;p&gt;An initial candidate fix ran the query with psycopg&amp;#39;s execute(..., prepare=True), intending to force PostgreSQL&amp;#39;s own Parse step (extended query protocol) to reject multi-statement text regardless of sqlparse&amp;#39;s classification. This candidate fix does not work as submitted: psycopg3&amp;#39;s PrepareManager silently ignores the prepare argument whenever the connection&amp;#39;s prepare_threshold is None, which is pgAdmin&amp;#39;s default for every…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/cve-2026-17351</guid>
    </item>
  </channel>
</rss>
