JVNDB-2026-027066 | |
pgAdmin ProjectのpgAdmin 4におけるSQL インジェクションの脆弱性 | |
| 概要 | |
pgAdmin 4 バージョン9.16におけるCVE-2026-12044の修正は、qtLiteralの強化および16個のCOMMENT ON / pgstattuple / pgstatindexテンプレートへの切り替えを行いましたが、test_sql_string_literal_lint.pyのALLOWLISTに誤って含まれていたいくつかのシンクを見落としていました。その誤った前提とは、ブラウザツリーを介してpg_catalogから取得されるスキーマ名、テーブル名、パブリケーション名、およびサブスクリプション名にアポストロフィが含まれないというものでした。PostgreSQLは引用識別子に任意の文字を許可しているため、CREATE TABLE、CREATE PUBLICATION、CREATE SUBSCRIPTION権限を持つ低権限ユーザーがアポストロフィを含むオブジェクト名を作成可能です。その結果、任意のユーザー(より高権限のユーザーを含む)が当該オブジェクトのStatisticsまたはDependenciesタブを開いた瞬間に、エスケープされていない'{{ name }}'テンプレート補間を突破し、閲覧ユーザーのデータベースセッション内で任意のSQL文をインジェクションできてしまいます。影響を受けるシンクは、すべてのインデックス統計一覧のためのIndex Statisticsクエリ(coll_stats.sqlの16_plusおよびデフォルトのPostgreSQLバージョンテンプレートの両変種。これはCVE-2026-12044で既に修正された単一インデックスstats.sqlパスとは異なります)およびパブリケーションとサブスクリプションのdependencies.sql / get_position.sqlテンプレート(パブリケーション用のpgおよびppas/EPAS方言の両方)です。修正では、これらすべてのテンプレートを名前補間のためにqtLiteral(conn)に切り替え、publications/__init__.pyとsubscriptions/__init__.pyを更新してdependencies.sqlのrender_template呼び出し時にconn=self.connを渡し、qtLiteralフィルターが引用対象の接続情報を持つようにしました。これにより、これらのシンクは適切にエスケープされるため、test_sql_string_literal_lint.py内の対応するALLOWLISTエントリは削除されています。動作回帰テストでは、各修正テンプレートをスタック文アポストロフィペイロードでレンダリングし、オブジェクト名がqtLiteralで正確にエスケープされて表示され、かつレンダリングされたSQLが正確に1つの文として解析可能であることをアサートしています。パッチ適用前の生の補間形式ではこのアサートが実際に失敗することも検証しています。本問題はpgAdmin 4のIndex Statisticsシンク(バージョン1.0から)およびPublications/Subscriptionsシンク(バージョン5.0から)に影響し、両者ともバージョン9.17より前に存在しています。 | |
| CVSS による深刻度 (CVSS とは?) | |
|
CVSS v3 による深刻度
基本値: 8.8 (重要) [その他]
| |
| 影響を受けるシステム | |
|
| |
pgAdmin Project | |
本脆弱性の影響を受ける製品の詳細については、ベンダ情報および参考情報をご確認ください。 | |
| 想定される影響 | |
・当該ソフトウェアが扱う全ての情報が外部に漏れる可能性があります。 | |
| 対策 | |
ベンダ情報を参照して適切な対策を実施してください。 | |
| ベンダ情報 | |
GitHub | |
| CWEによる脆弱性タイプ一覧 CWEとは? | |
| |
| 共通脆弱性識別子(CVE) CVEとは? | |
|
| |
| 参考情報 | |
|
| |
| 更新履歴 | |
|
| 公表日 | 2026/07/31 |
| 登録日 | 2026/08/06 |
| 最終更新日 | 2026/08/06 |



