CVE-2026-17351
pgAdmin 4: Umgehung der Nur-Lese-Transaktion des KI-Assistenten durch Uneinigkeit zwischen sqlparse/PostgreSQL-Lexer (unvollständiger Fix für CVE-2026-12045)
- Veröffentlicht
- 31.07.2026
- Aktualisiert
- 01.08.2026
- CNA zuweisen
- PostgreSQL
- Beweise beobachtet
- 08.08.2026
Primäres CVSS
nvd · CVSS 4.0
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:XNiedrig · nächste 30 Tage
- Perzentil
- 40,2 %
- Modelldatum
- 15.10.2026
EPSS ist eine statistische Schätzung, keine Gewissheit oder ein Maß für die Auswirkung. Kombinieren Sie es mit CVSS, KEV-Status, Belichtung und Ihrer Umgebung.
Zusammenfassung
Die Behebung für CVE-2026-12045 in pgAdmin 4 9.16 erforderte, dass die vom LLM gelieferte Abfrage, die an das execute_sql_query-Tool des KI-Assistenten übergeben wird, über sqlparse als genau eine Nicht-Transaktionskontroll-Anweisung geparst wird, bevor sie innerhalb eines BEGIN TRANSACTION READ ONLY-Wrappers ausgeführt wird. Die String-Literal-Lexik von sqlparse kann mit dem eigenen Parser von PostgreSQL kollidieren: bei standard_conforming_strings = on (PostgreSQL-Standard seit 9.1) ist ein Backslash unmittelbar vor einem Anführungszeichen für PostgreSQL ein gewöhnliches Zeichen, aber sqlparse behandelt ihn als Escape des Anführungszeichens. Ein Payload wie SELECT '\';COMMIT;CREATE TABLE pwn(x int);SELECT 1 --' wird daher vom sqlparse-Validator als einzelnes SELECT geparst, während PostgreSQL ihn als vier Anweisungen ausführt: das eingeschmuggelte COMMIT beendet die umschließende Read-Only-Transaktion, und das nachfolgende ROLLBACK wird zu einem No-op. Dies führt denselben Write/RCE-Bypass wieder ein, den CVE-2026-12045 schließen sollte, erreichbar über dieselbe indirekte Prompt-Injection-Zustellung (ein Angreifer platziert den Payload in einem beliebigen Objekt, das der KI-Assistent lesen kann; das LLM gibt ihn als Tool-Aufruf aus). Ein erster Kandidat für die Behebung führte die Abfrage mit psycopgs execute(..., prepare=True) aus, in der Absicht, PostgresQLs eigenen Parse-Schritt (erweitertes Abfrageprotokoll) zu erzwingen, um Mehrfachanweisungstext unabhängig von der sqlparse-Klassifizierung abzulehnen. Dieser Kandidat für die Behebung funktioniert wie eingereicht nicht: psycopg3s PrepareManager ignoriert das prepare-Argument stillschweigend, wenn das prepare_threshold der Verbindung None ist, was pgAdmins Standard für jede Serververbindung ist (das serverseitige Feld „Prepare threshold" ist leer, sofern ein Administrator es nicht explizit setzt) – psycopg3 fällt auf das einfache Abfrageprotokoll zurück, denselben Mehrfachanweisungs-fähigen Pfad, den der Bypass ausnutzt, sodass der Kandidat für die Behebung bei keiner realen Standardkonfiguration etwas schließt. Die korrigierte Behebung setzt conn.prepare_threshold = 0 direkt auf der dedizierten, einmalig verwendeten Read-Only-Verbindung, die das KI-Assistenten-Tool öffnet, und erzwingt strukturell das erweiterte Abfrageprotokoll unabhängig von jeder Serverkonfiguration. Verifiziert gegen eine Live-PostgreSQL-18-Instanz: der Payload wird unter dem prepare_threshold=None-Verhalten (Standard) erfolgreich ausgeführt und wird mit „cannot insert multiple commands into a prepared statement" abgelehnt, sobald prepare_threshold=0 auf dieser Verbindung gesetzt ist. Dieses Problem betrifft pgAdmin 4: von 9.13 vor 9.17.
Quellen
Proof-of-Concept, der den SQL-Injection-Bypass CVE-2026-17351 im KI-Assistenten von pgAdmin 4 über die sqlparse/PostgreSQL-Lexerdifferenz demonstriert, einschließlich der Zustellung indirekter Prompt-Injection.
Verantwortungsvoller Umgang
Verwenden Sie Schwachstelleninformationen nur auf Systemen, die Sie besitzen oder zu deren Testen Sie berechtigt sind. Kitploit verlinkt auf öffentliche Forschungsmetadaten und speichert keinen Exploit-Code oder bösartige Payloads.