本文へ移動
English version →
重大 9.9 急ぎ度: 早めに

pgAdmin 4にOSコマンド実行の脆弱性、9.19で修正

pgAdmin 4のImport/Export Dataに、一般的なDBロールでもpgAdminを動かすホスト上でOSコマンドを実行できる脆弱性が見つかり、修正版が出ました。pgAdminを複数人で使っている組織は、版を確認して更新し、非管理者の権限も見直してください。

CVE-2026-116241 公開 生成 AI で作成
画像は生成 AI で作成したイメージです

急ぎ度: 早めに

CVSS v3は9.9で、ログインできる一般ユーザーの権限だけでpgAdminホスト上のコマンド実行に届き、修正版が出ているため、早めの更新が必要です。

関係があるか

pgAdmin 4を自社のサーバーで動かし、管理者以外のユーザーにも使わせている組織が対象です。Import/Export Dataの権限は、非管理者にも初期設定で付与されます。

製品影響を受ける版修正版
pgAdmin 4 9.19より前のすべての版 9.19

確かめ方

  1. 1pgAdminのヘルプメニューにあるAbout pgAdmin 4で、版が9.19より前かどうかを確認します。pipで導入した環境なら、pip show pgadmin4 でも版を確認できます。
  2. 2コンテナイメージやOSのパッケージで配布している場合は、イメージやパッケージの版も確認します。
  3. 3pgAdminにログインできるユーザーに管理者以外が含まれるか、その人たちにImport/Export Dataの権限が付いているかを確認します。
  4. 4CVE-2026-17566の修正を適用済みでも、9.19より前なら今回の影響を受けます。

何が起きたか

pgAdmin 4のImport/Export Dataで問い合わせ結果を書き出す機能に、OSコマンドを実行されてしまう脆弱性があります。実行されるのはpgAdminを動かしているホスト上で、権限はpgAdminを起動しているOSアカウントのものです。

この機能は、利用者のクエリをpsqlの \copy (...) TO コマンドで包み、括弧の対応を検査して、クエリが包みの外に出ないようにしています。ところが、ダブルクォートで囲まれた識別子の中にあるバックスラッシュの扱いが、pgAdminとpsqlで食い違っていました。検査をすり抜けた括弧で包みが閉じられ、後ろに続く TO PROGRAM が、サーバーに文を拒否される前に、psqlによってpgAdminホスト上で実行されます。

これは、CVE-2026-17566の修正を回避する形の脆弱性です。シングルクォートの文字列内のバックスラッシュは前回の修正で拒否されていましたが、ダブルクォートの識別子は漏れていました。9.19では、識別子の中のバックスラッシュもすべて拒否するように改めています。バックスラッシュの意味はサーバーの設定に左右され、検証の時点では確実に分からないためです。

攻撃の流れ

  1. 1

    一般ロールで接続

    管理者ではないデータベースのロールで、pgAdminを通じて接続します。

  2. 2

    引用の解釈を変更

    ロール自身が変更できるサーバー設定を切り替え、バックスラッシュの意味を変えます。

  3. 3

    細工した書き出し

    Import/Export Dataでクエリの書き出しを実行し、pgAdminの括弧検査をすり抜けます。

  4. 4

    psqlが命令を実行

    包みが途中で閉じられ、後ろの命令がpgAdminホスト上で実行されます。

公開されている情報をもとにした流れの例です。

どう悪用されるか

悪用には、pgAdminを通じてデータベースに接続できる認証済みのロールが必要です。管理者権限は要らず、一般的なロールで足ります。Import/Export Dataの権限が非管理者に初期設定で付与されるので、権限を変えていなければ条件を満たします。

さらに、ロール自身がstandard_conforming_stringsを自分のセッションでオフにできることが前提になります。この設定は一般のロールでも変えられます。ネットワーク経由で届き、ほかの利用者の操作は要りません。

成功すると、pgAdminを動かすOSアカウントの権限で、ホスト上のコマンドが動きます。DBサーバーではなくpgAdminのホストに影響が及ぶので、そのアカウントが読み書きできるファイルや、そのホストから届く社内の接続先まで被害が広がりかねません。CVSSのスコープが変更ありとされているのも、そのためです。

今すぐやること

  1. 1

    pgAdminを9.19以上に更新する

    共有で使っている環境、とくに外部委託先や部門外のユーザーがログインできる環境から先に更新します。コンテナやパッケージで配布している場合は、配布元が9.19以上を出しているか確認してから入れ替えます。

  2. 2

    非管理者の権限を見直す

    Import/Export Dataの権限が不要なユーザーから外し、pgAdminにログインできるユーザー自体も棚卸しします。更新後も、最小限の権限という運用に戻しておくと安全です。

  3. 3

    侵害の跡がないか調べる

    公表されたばかりですが、9.19より前の版を動かしていた期間があれば、pgAdminホストで見覚えのないプロセスの起動や外部への通信がないかを確認します。DBサーバーのログに、書き出し操作が拒否された記録が不自然に残っていないかも見ます。

  4. 4

    ベンダーの告知を確認する

    pgAdminの開発元の告知で、配布形態ごとの更新方法や回避策の追記がないかを確認します。

すぐ更新できないとき

すぐに更新できないときは、管理者以外のユーザーのImport/Export Data権限を外し、信頼できないユーザーのログインを止めます。あわせて、pgAdminを動かすOSアカウントの権限を最小限にし、そのホストから出る通信を絞ると、万一のときの被害を抑えられます。いずれも根本的な対策ではないので、更新までのつなぎです。

背景

pgAdminはPostgreSQLの代表的な管理ツールで、Webアプリとしてサーバーに置き、複数の担当者がブラウザーから複数のデータベースを操作する使い方が広く行われています。DBサーバーとは別のホストで動くことが多く、データベースへの接続情報も扱います。ここが乗っ取られると、被害は一つのデータベースにとどまりません。

今回の脆弱性が生じたのは、pgAdminがデータの書き出しに、自分では解釈しきれないpsqlのコマンドを使っているためです。実行する側(psql)と検査する側(pgAdmin)で引用符の読み方がずれると、DBサーバーが文を拒否する前に、クライアント側のホストで命令が動いてしまいます。データベース側の権限設定だけでは防げない構造であり、だからこそ今回の修正は、サーバー設定に依存する解釈をやめ、バックスラッシュを拒否する方針をとっています。

よくある質問

Q.PostgreSQL本体も更新する必要がありますか。
A.修正の対象はpgAdmin 4です。pgAdminを9.19以上に更新してください。PostgreSQL本体の更新は、この脆弱性への対策としては案内されていません。
Q.Import/Export Dataを普段使っていなければ影響しませんか。
A.使っていなくても、権限が付いていれば機能に到達できます。権限の有無で確認し、9.19未満なら更新してください。

まだ分かっていないこと

  • 公表直後のため、実際の攻撃で悪用されているかどうかは分かっていません。

この記事は、取得元の公開情報をもとに生成 AI で作成しています。誤りを含むことがあります。対応を決める前に、下の原文と参照先を確認してください。

影響パッケージ

種類パッケージ影響を受ける版修正版
pgadmin.org pgAdmin 4
9.19 未満
9.19
原文の説明 取得元が公開している説明をそのまま載せています (多くは英語)。

pgAdmin 4's Import/Export Data tool wraps a user's query export in a psql \copy (...) TO command and checks that the query's parentheses are balanced so that nothing can escape the wrapper. The check rejected a backslash inside a single-quoted string, but not inside a double-quoted identifier, where it treated the next double quote as closing the identifier. psql's \copy parser applies the connection's escape character to whichever quote opened a token, so with standard_conforming_strings off a backslash-escaped double quote does not close the identifier. pgAdmin's and psql's view of the quoting then diverged, a closing parenthesis hidden from the check ended the \copy (...) wrapper, and a following TO PROGRAM clause was executed by psql on the pgAdmin host, as the operating-system account running pgAdmin, before the server rejected the statement. An ordinary database role can turn standard_conforming_strings off for itself, and the Import/Export Data permission is granted to non-administrators by default.

This is a bypass of the fix for CVE-2026-17566. The fix rejects any backslash inside a double-quoted identifier, as was already done for single-quoted strings, since its meaning depends on a server setting that cannot be known reliably when the query is validated.

This issue affects pgAdmin 4: before 9.19.

出典: CVE.org (CVE Program・cvelistV5) NVD GitHub Advisory

参照URL

当サイトでは、アクセス解析と広告の効果測定のために Cookie を使います。株式会社Game のサイト共通の設定です。 詳しく