pgAdmin 4 における新たな重大な脆弱性により、リモートの攻撃者がセキュリティフィルタを回避し、ホストサーバー上で任意のシェルコマンドを実行できる可能性があります。
この欠陥は CVE-2025-13780 として追跡されており、一般的な PostgreSQL 管理ツールがデータベース復元ファイルを処理する方法の弱点を悪用するものです。
| CVE ID | CVE-2025-13780 |
|---|---|
| 重大度 | Critical(クリティカル) |
| 脆弱性の種類 | リモートコード実行(RCE) |
| 影響を受けるコンポーネント | pgAdmin 4(復元機能) |
セキュリティ研究者は、アプリケーションの「正規表現ファイアウォール」が特定の空白文字を考慮しておらず、リモートコード実行(RCE)への直接的な経路が残されていたことを発見しました。
問題の核心は、pgAdmin 4 のプレーンテキスト復元機能にあります。ユーザーが SQL ファイルからデータベースを復元する際、アプリケーションはデータを処理するために psql コマンドラインユーティリティを起動します。
psql は OS コマンドを実行できる強力なメタコマンドをサポートしているため、pgAdmin は正規表現(regex)チェックを用いて、これらの危険なコマンドをブロックしようとします。
このチェックは、シェルスクリプトを実行するメタコマンドである「!」などを含むファイルを拒否するよう設計されていました。
しかしセキュリティ上の失敗は、この正規表現フィルタがあまりに硬直的だったことに起因します。フィルタは、行頭または標準的な改行文字の直後にあるバックスラッシュのみを検出対象としていました。
研究者らは、キャリッジリターン(\r)などの別種の空白文字を改行とコマンドの間に挿入することで、フィルタから悪意あるコードを隠せることを突き止めました。
Python ベースの正規表現はテキストを安全なものとして認識する一方で、基盤となる psql インタプリタはその並びを有効な改行として扱い、コマンドを実行してしまいます。
Endor Labsによると、この不一致により、pgAdmin からは無害に見えるものの、処理時にコード実行を引き起こす SQL ファイルを攻撃者が作成できてしまう状況が生まれていました。
概念実証(PoC)のデモでは、研究者らは crlf_attack.sql というファイルを作成し、復元が行われた瞬間に pgAdmin ホストサーバー上でシェルコマンドを実行させることに成功しました。
開発チームは pgAdmin 4 バージョン 9.11 において、この問題に対処するためアプローチ自体を全面的に変更しました。
複雑なテキストマッチングで入力ファイルをフィルタリングする代わりに、アプリケーションは復元プロセスを restrict オプション付きで起動するようになりました。
この指示により、psql インタプリタ自身が実行中に潜在的に危険なメタコマンドを無効化するよう強制されます。
この方法は、外部のテキストスキャナではなく、データベースツール自身の内部セキュリティ制御に依存するため、はるかに強固な防御を提供します。
管理者は、このリスクを軽減するため、直ちにバージョン 9.11 へアップグレードすることが強く推奨されています。複雑なパーサーに対する正規表現ベースのパッチは、攻撃者に悪用されうる残存の抜け穴を残すことが少なくないためです。
翻訳元: https://gbhackers.com/critical-pgadmin-flaw-execute-shell-commands-on-host/