CVE-2026-17351
pgAdmin 4: sqlparse/PostgreSQL レクサーの不一致による AI アシスタントの読み取り専用トランザクション回避(CVE-2026-12045 の不完全な修正)
- 公開済み
- 2026/07/31
- 更新済み
- 2026/08/01
- CNA の割り当て
- PostgreSQL
- 観察された証拠
- 2026/08/08
プライマリ 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:X低 · 今後 30 日間
- パーセンタイル
- 40.2%
- モデルの日付
- 2026/10/17
EPSS は統計的な推定値であり、確実性や影響の尺度ではありません。 CVSS、KEV ステータス、暴露、環境と組み合わせます。
概要
CVE-2026-12045 の pgAdmin 4 9.16 における修正では、AI アシスタントの execute_sql_query ツールに渡される LLM 提供のクエリが、BEGIN TRANSACTION READ ONLY ラッパー内で実行される前に、sqlparse を介して、トランザクション制御以外のステートメントが正確に 1 つだけとしてパースされることが必須でした。sqlparse の文字列リテラルの字句解析は、PostgreSQL 自身のパーサーと一致しない場合があります。standard_conforming_strings = on(PostgreSQL の 9.1 以降のデフォルト)では、引用符の直前のバックスラッシュは PostgreSQL にとっては通常の文字ですが、sqlparse はそれを引用符のエスケープとして扱います。したがって、SELECT '\';COMMIT;CREATE TABLE pwn(x int);SELECT 1 --' のようなペイロードは、sqlparse のバリデータには単一の SELECT としてパースされますが、PostgreSQL はそれを 4 つのステートメントとして実行します。密輸された COMMIT はラッピングされた読み取り専用トランザクションを終了させ、後続の ROLLBACK は no-op になります。これにより、CVE-2026-12045 が塞ぐことを意図していたものと同じ書き込み/RCE バイパスが再発し、同じ間接的なプロンプトインジェクション配信(攻撃者は AI アシスタントが読み取る可能性のある任意のオブジェクトにペイロードを仕込み、LLM がそれをツール呼び出しとして出力する)を介して到達可能です。最初の候補修正は、psycopg の execute(..., prepare=True) でクエリを実行し、sqlparse の分類に関係なく、マルチステートメントテキストを拒否するように PostgreSQL 自身の Parse ステップ(拡張クエリプロトコル)を強制することを意図していました。この候補修正は、提出されたままでは機能しません。psycopg3 の PrepareManager は、接続の prepare_threshold が None の場合(これはすべてのサーバー接続における pgAdmin のデフォルトであり、管理者が明示的に設定しない限り、サーバーごとの「Prepare threshold」フィールドは空白です)、prepare 引数を黙って無視します。psycopg3 は単純クエリプロトコルにフォールバックし、これはバイパスが悪用するのと同じマルチステートメント対応パスであるため、候補修正は実際のデフォルト構成では何も塞ぎません。修正された修正は、AI アシスタントツールが開く専用の単回使用の読み取り専用接続に conn.prepare_threshold = 0 を直接設定し、サーバーレベルの構成に依存せずに構造的に拡張クエリプロトコルを強制します。稼働中の PostgreSQL 18 インスタンスに対して検証済みです。ペイロードは prepare_threshold=None(デフォルト)の動作では正常に実行されますが、その接続で prepare_threshold=0 が設定されると、「cannot insert multiple commands into a prepared statement」で拒否されます。この問題は pgAdmin 4 に影響します。9.13 から 9.17 未満です。
ソース
pgAdmin 4のAIアシスタントにおける、sqlparse/PostgreSQLレキサーの差分を介したCVE-2026-17351 SQLインジェクション回避を実証する概念実証。間接的なプロンプトインジェクションの配信を含みます。
責任ある使用
脆弱性情報は、自分が所有しているシステム、またはテストを許可されているシステムでのみ使用してください。 Kitploit は公開研究メタデータにリンクしており、エクスプロイト コードや悪意のあるペイロードは保存しません。