30秒で判断
対応すべき人:
- pgAdmin 4 バージョン 1.0〜9.15 を使用している認証済みユーザー
- Domain、Foreign Table、Language、Event Trigger等のオブジェクトを管理している
対応不要な人:
- pgAdmin 4 9.16以降にアップグレード済み
- pgAdmin 4 を使用していない
確認コマンド:
pip show pgadmin4 | grep Version
概要
pgAdmin 4 の複数のJinja2テンプレートにおいて、ユーザーが入力する description(説明)フィールドが {{ data.description }} として直接SQL文字列に展開され、シングルクォートのエスケープ(qtLiteral フィルター)が適用されていなかった問題です。
コードウィアーの監査では16箇所の同一パターンが発見されました。対象テンプレート: Domain(およびその制約)、Foreign Table、Language、Event Trigger、Views OIDルックアップクエリなど。
影響範囲としては、接続PostgreSQLロールが持つ権限の範囲内での任意SQL実行となります。この脆弱性単独で直接的な権限昇格は発生しませんが、スーパーユーザーロールを使用している環境では COPY ... TO PROGRAM 等を通じたOSコマンド実行まで繋がる可能性があります。
修正は {{ data.description }} を {{ data.description|qtLiteral(conn) }} に置き換える形です。また、qtLiteral 関数自体も conn 引数がない場合に生の値を返していた問題が修正され、ValueError を送出するように変更されました。
CVSSベクトル
| 項目 | 値 |
|---|---|
| CVSSスコア | 8.8(High) |
| CWE | CWE-89(SQLインジェクション)、CWE-116(エンコード/エスケープ不備) |
| 攻撃元区分 (AV) | ネットワーク (N) |
| 必要な特権 (PR) | 低 (L)(pgAdmin認証必要) |
| ユーザーの関与 (UI) | 不要 (N) |
影響を受けるソフトウェア
| 製品 | 影響バージョン |
|---|---|
| pgAdmin 4 | 1.0 〜 9.15 |
修正バージョンと回避策
修正バージョン: pgAdmin 4 9.16
pip install --upgrade pgadmin4
回避策:
- pgAdmin 4へのアクセスを信頼できるユーザーのみに制限する
- 接続PostgreSQLロールのDDL権限を最小限にする
関連リンク
データソース: NVD (NIST) AI解説は Claude API により自動生成されています。正確性については原文をご確認ください。
