30秒で判断
対応すべき人:
- pgAdmin 4 バージョン 9.13〜9.15 をサーバーモードで使用している
- AI Assistantが有効な環境で稼働させている
対応不要な人:
- pgAdmin 4 9.16以降にアップグレード済み
- pgAdmin 4 を使用していない
- デスクトップモードのみで使用しており、AI Assistantが外部からアクセスされない環境
- AI Assistant機能(pgai)が無効または未設定
確認コマンド:
# バージョン確認(インストール方法による)
pip show pgadmin4 | grep Version
# または pip3 show pgadmin4
概要
pgAdmin 4 のAI Assistant(pgai)が内部で使用する execute_sql_query ツールにおいて、SQLインジェクションが可能な脆弱性です。
AI Assistantは生成したSQLを BEGIN TRANSACTION READ ONLY ... ROLLBACK ラッパーで囲んで実行することで、データ変更を防ぐ設計になっています。しかし、ラッパー内に COMMIT、END、ROLLBACK、ABORT といったトランザクション制御キーワードを含む複数ステートメントを注入すると、読み取り専用トランザクションを途中で終了させ、後続のステートメントを通常モードで実行できます。
攻撃者がデータベース内のAI Assistantが参照しうる任意のオブジェクト(行データ、カラム値、コメント等)に悪意あるペイロードを書き込んでいる場合、LLMがそれを処理してSQLとして出力させることができます(プロンプトインジェクション)。接続しているPostgreSQLロールがスーパーユーザーや pg_execute_server_program 権限を持つ場合、COPY ... TO PROGRAM 等を通じてデータベースサーバーホスト上でのOS コマンド実行まで繋がる可能性があります。
修正版(9.16)では、LLMが生成したSQLを事前にパースし、先頭の実トークンが SELECT、WITH、EXPLAIN、SHOW、VALUES、TABLE のいずれかのみを受け入れる検証が追加されています。
CVSSベクトル
| 項目 | 値 |
|---|---|
| CVSSスコア | 9.0(Critical) |
| CWE | CWE-77(コマンドインジェクション)、CWE-89(SQLインジェクション) |
| 攻撃元区分 (AV) | ネットワーク (N) |
| 攻撃条件の複雑さ (AC) | 低 (L) |
| 必要な特権 (PR) | 低 (L)(pgAdminへの認証必要) |
| ユーザーの関与 (UI) | 不要 (N) |
| スコープ (S) | 変更 (C) |
| 機密性への影響 (C) | 高 (H) |
| 完全性への影響 (I) | 高 (H) |
| 可用性への影響 (A) | 高 (H) |
影響を受けるソフトウェア
| 製品 | 影響バージョン |
|---|---|
| pgAdmin 4 | 9.13 〜 9.15 |
修正バージョンと回避策
修正バージョン: pgAdmin 4 9.16
アップグレード手順(pip経由):
pip install --upgrade pgadmin4
# または
pip3 install --upgrade pgadmin4
回避策(アップグレードが困難な場合):
- AI Assistant(pgai)機能を無効化する
- pgAdmin 4のアクセスを信頼できるネットワーク・ユーザーのみに制限する
- 接続するPostgreSQLロールの権限を最小限にする(スーパーユーザーロールを使用しない)
関連リンク
データソース: NVD (NIST), GitHub Advisory Database AI解説は Claude API により自動生成されています。正確性については原文をご確認ください。
