PostgreSQL 用の代表的な管理ツール「pgAdmin」に、サーバー乗っ取りにつながりかねない深刻なリモートコード実行(RCE)脆弱性が見つかりました。
この脆弱性は CVE-2025-13780 として登録され、CVSSスコアは 9.1(Critical)。
pgAdmin をサーバーモードで動かしている環境が対象です。
脆弱性の対象バージョン
今回の脆弱性の対象となるのは、サーバーモードで動作する pgAdmin 9.10 までの全バージョンです。
-
対象:
-
pgAdmin 〜 9.10
-
特に「サーバーモード」での運用時(複数ユーザーがブラウザ経由で利用する構成)
-
-
前提条件:
-
管理者またはユーザーが「Plain SQL」のバックアップファイルからリストアを実行
-
そのファイルが、攻撃者により改ざん・差し替えられている
-
デスクトップ版のみ・ローカル利用のみの場合でも、危険なダンプファイルを自分で読み込めば実害はあり得るため、「サーバーモードでなければ完全に安全」とは言い切れませんが、特にインターネットや社内の他ユーザーに開かれたサーバーモード環境でリスクが高くなります。
脆弱性の対策バージョン
バージョン 9.11以上
概要
もともと pgAdmin は、過去の脆弱性 CVE-2025-12762 に対応するため、バックアップの復元時に \! などの危険な psql メタコマンドを検出してブロックするフィルタ(has_meta_commands())を組み込んでいました。
仕組みとしては、SQLダンプファイルの中身を正規表現でスキャンし、「怪しいメタコマンドが含まれていないか」をチェックする、というものです。
ところが今回の CVE-2025-13780 では、このフィルタの想定の甘さを突かれています。攻撃者は、ファイルの先頭に UTF-8 の BOM(EF BB BF) を付けた PLAIN 形式の SQL ダンプを用意し、そのすぐ後ろに \! を含む悪意あるコマンドを書き込みます。
-
pgAdmin 側のフィルタは「生のバイト列」をそのまま正規表現で見ているため、先頭の BOM につまずき、その後ろの
\!を正しく検知できない -
一方で、実際に実行を行う
psqlはテキストエンコーディングを理解しており、BOM を取り除いたうえで内容を解釈するため、\!をそのままメタコマンドとして実行してしまう
という見る側と実行する側の挙動の差異が発生していました。
結果として、「危険なメタコマンドを除去したつもり」の旧対策が、BOM 付きのファイルという少し工夫された入力を与えられることで事実上無効化され、攻撃者に再びリモートコード実行の余地を与えてしまった、というのが今回の経緯です。








