Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
fastjson-check — Zero-dependency, offline CLI scanner that finds fastjson inside JARs and Spring Boot fat-JARs, flags CVE-2026-16723 exposure, and detects shaded dependencies for CI gating. | Kitploit
ツール/GitHubGitHub/xiaoqimikko/fastjson-check
Vulnerability ScannersVulnerability AnalysisDevSecOpsSupply Chain Security
GitHubxiaoqimikko/fastjson-check

fastjson-check

Zero-dependency, offline CLI scanner that finds fastjson inside JARs and Spring Boot fat-JARs, flags CVE-2026-16723 exposure, and detects shaded dependencies for CI gating.

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

人気

すべて見る →

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

すべてのツールを探索

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

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

fastjson-check

Release Downloads License Java

1つのコマンドで、あなたの Java アプリケーションに fastjson が存在するか、どこに隠れているか、CVE-2026-16723 の影響を受けるかを明らかにします。

依存ゼロ · 完全オフライン · 単一の 23KB の jar · Java 8+ 対応

English | ダウンロード


なぜこれが必要なのか

2026年7月21日、fastjson 公式は CVE-2026-16723(CVSS 9.0、リモートコード実行)を公表しました:

  • fastjson 1.2.68 ~ 1.2.83 に影響
  • デフォルト設定のまま悪用可能 —— AutoType を有効にする必要も、classpath gadget も、認証も不要
  • 公表から数日以内に野生での悪用が確認され、主に Spring Boot fat-JAR デプロイを標的にしている

⚠️ 公式パッチ 1.2.84 は公開済みだが、ほとんど誰も知らない

多くのセキュリティアドバイザリ(複数の英語セキュリティメディアを含む)は今なお「1.x は EOL、パッチは永遠に出ない、fastjson2 への移行しかない」と述べています。 この主張は 2026-07-29 以降、成立しません。 ご自身で検証できます:

証拠リンク
Maven セントラルリポジトリに com.alibaba:fastjson:1.2.84 があり、jar は 2026-07-29 にアップロードrepo1
GitHub release 1.2.84、公開日時 2026-07-29T08:24:51Zrelease
重要なコミット fix: strengthen autoType type name validation and whitelist verification2026-07-29T07:02:55Z

1.2.83 は 2022年5月に公開され、その後 1.x ブランチは4年間コミットなし —— 1.2.84 は今回の脆弱性のために特別に例外として公開されたものです。

その release タイトルにはセキュリティ修正の記載がありません:1.2.83 のタイトルには「(セキュリティ修正)」と書かれていますが、1.2.84 には 「1.2.84版本发布」とだけ書かれています。しかし本文には書かれています —— 完全な Security Fixes セクションがあり、4項目の AutoType 強化が逐条列挙されており、しかも公開当日(2026-07-29)からその状態でした(Wayback のアーカイブ 20260729094935 で確認可能)。

なぜパッチ公開後もセキュリティアドバイザリやスキャナの多くが追随していないのかについては、私は調査しきれていないため、ここでは推測しません。

📌 2026-08-14 訂正:ここには元々「全文にセキュリティの記載がなく、そのため追随されなかった」と書かれていました。前半は release 本文と Wayback の当日アーカイブを実測した結果誤りであり(タイトルのみ記載なし)、後半もそれにより根拠を失うため、併せて削除しました。

👉 1.x ユーザーへの実際の影響:1.2.84 へのアップグレードが最も低コストな対応です(同一ブランチのマイナーバージョンで、通常コード変更は不要)。 fastjson2 への大規模なバージョン移行を直ちに強いられる必要はありません。本ツールはこれに基づいた推奨を提示します。

⚠️ 前提は JDK 8 以上(2026-10-14 実測):1.2.84 の 274 個の class はすべて Java 8 バイトコード(major 52)で、 1.2.83 は Java 5(major 49)です。JDK 7(Zulu 7u352)では javac は警告のみで終了コード 0 ですが、実行時には直接 UnsupportedClassVersionError: com/alibaba/fastjson/JSON : Unsupported major.minor version 52.0 をスローします。 また、1.2.84 内の JSON.VERSION 定数は依然として "1.2.83" であり、これでバージョンを判定すると誤ります。本ツールは pom.properties を読むため、影響を受けません。

そして最も厄介な点は:

fastjson は通常推移的依存です —— 誰も積極的にインストールしたわけではなく、他のライブラリに付随して入り込んでいます。 多くのチームは自分が使っていることすら知りません。

mvn dependency:tree は依存関係を一覧できますが、2つのケースには対応できません:

  1. 手元にあるのがパッケージ済みの fat-JAR だけで、ソースコードもビルド環境もない場合(オンラインでの緊急調査で最もよくあるシナリオ)
  2. fastjson がある SDK の jar に shade されている場合、依存ツリー上には全く見えません

本ツールはこの2つのケースのために書かれました。

クイックスタート

Releases から fastjson-check.jar をダウンロードし、次に:

# 扫一个 jar(Spring Boot fat-JAR 会自动逐层展开)
java -jar fastjson-check.jar ./myapp.jar

# 扫一整个目录(递归查找所有 jar/war)
java -jar fastjson-check.jar /opt/apps

# 输出 JSON,接入流水线
java -jar fastjson-check.jar /opt/apps --json

インストール不要、アカウント不要、ネットワーク接続不要、データのアップロードも一切不要です。

Maven プラグインとして実行する(0.3.0 以降)

同じアーティファクトが CLI と Maven プラグインの両方として機能します。この使い方では事前に jar をダウンロードする必要はありません:

# 在你的项目目录下直接跑,扫的是 Maven 解析后的依赖
mvn io.github.xiaoqimikko:fastjson-check:0.3.1:check

またはビルドライフサイクル(verify フェーズ)にバインドします:

<plugin>
  <groupId>io.github.xiaoqimikko</groupId>
  <artifactId>fastjson-check</artifactId>
  <version>0.3.1</version>
  <executions>
    <execution>
      <goals><goal>check</goal></goals>
    </execution>
  </executions>
</plugin>

なぜプラグインモードのほうが CLI に pom.xml をスキャンさせるより正確なのか

CLI が pom.xml をスキャンするときに読むのはテキストであり、実際のプロジェクトでは fastjson のバージョンがそのテキストの中にないことがよくあります:

  • プロパティとして書かれている:<version>${fastjson.version}</version>
  • <parent> から継承しており、自分の pom にはこの行がない
  • 最もよくあるケース:他のライブラリが持ち込んだ推移的依存であり、自分の pom には fastjson が一切書かれていない

プラグインが取得するのは Maven が解決を完了した後の依存集合であり、各依存はローカルリポジトリ内の実際の jar パスを伴っています。 したがって通るのはまさにこのツールが最も得意とする道です:実際の jar 内の com/alibaba/fastjson(2)/JSON.class をスキャンするのであり、 pom に何が書かれているかを信じるのではありません。

⚠️ ただし識別の境界はこれによって変わりません:判定キーは依然としてその class パスであるため、 relocate / パッケージ名変更で再パッケージされた依存は依然として識別できません(下記「それが何ではないか」を参照)。 プラグインが解決するのは「バージョンがどこに書かれているか」であり、「パッケージ名が変更されたか」ではありません。

パラメータ

パラメータデフォルト説明
-Dfastjson-check.failOnFoundfalseCRITICAL / HIGH が見つかった場合にビルドを失敗させる
-Dfastjson-check.path未設定依存関係ツリーをスキャンせず、このパス(ディレクトリ / jar / war / fat-jar)をスキャンする
-Dfastjson-check.skipfalse実行をスキップする

🔴 デフォルトではビルドを失敗させません。これは意図的なものであり、CLI の終了コードの意味とは異なります: コマンドラインは自分で叩くものなので、終了コード 1 はまさに望むところです。一方プラグインはパイプラインに組み込まれるものであり、 自己チェックツールが何の準備もないときにビルドを赤くするべきではありません。CI ゲートとして使うには、明示的に -Dfastjson-check.failOnFound=true を追加してください。

💡 Windows でレポートが文字化けする場合は、コンソールを GBK に戻してください(chcp 936)—— プラグインモードの出力エンコーディングは Maven が決定するため、CLI の --utf8 / --gbk スイッチはここでは届きません。

出力はこんな感じ

fastjson-check 0.1.0  —— fastjson 应急排查(离线,不外传任何数据)

扫描目标:myapp.jar
已展开归档:3 个

发现 2 处 fastjson:

[CRITICAL] fastjson 1.2.83
  位置  :myapp.jar!/BOOT-INF/lib/fastjson-1.2.83.jar
  版本来源:pom.properties
  场景  :Spring Boot fat-JAR  ← CVE-2026-16723 的主要在野利用场景
  结论  :命中 CVE-2026-16723(CVSS 9.0 远程代码执行),默认配置即可利用
  处置  :1.x 已停止维护,不会有修复版本。应急处置二选一:①(推荐)迁移至
            fastjson2 2.0.63 或更高版本;② 无法立即迁移时,先启用 SafeMode
            彻底关闭 AutoType 以缓解,但这不是长期方案。

[UNKNOWN] fastjson 版本未知
  位置  :myapp.jar!/BOOT-INF/lib/some-sdk-3.1.0.jar
  版本来源:未知
  场景  :Spring Boot fat-JAR  ← CVE-2026-16723 的主要在野利用场景
  注意  :疑似被 shade 进宿主 jar(有 class 但无 Maven 元数据),mvn dependency:tree 查不到它
  结论  :无法确定 fastjson 版本

汇总:CRITICAL 1 UNKNOWN 1

注意点2 —— その some-sdk-3.1.0.jar は fastjson を自身の内部にパッケージ化しており、依存関係ツリー上では全く見えません。

判定ルール

バージョン判定説明
fastjson 1.2.68 ~ 1.2.83🔴 CRITICALCVE-2026-16723 に該当、1.2.84 にアップグレードすれば修正可能
fastjson ≥ 1.2.84🟢 OK公式修正を含む(2026-07-29 リリース)
fastjson < 1.2.68🟠 HIGH今回の CVE には該当しないが、過去の AutoType RCE 系脆弱性あり
fastjson2 ≤ 2.0.62🔴 CRITICALポリモーフィックデシリアライズ RCE(seeAlso パス)、デフォルト設定で発動可能
fastjson2 ≥ 2.0.63🟢 OK現在推奨バージョン

⚠️ 特に注意:公式推奨の移行先である fastjson2 自体も ≤2.0.62 では RCE が存在します。 「すでに fastjson2 に移行済み」は安全ではありません。バージョン番号も同時に確認する必要があります。

オプション

--json        输出 JSON,便于接入流水线(恒为 UTF-8)
--utf8        强制以 UTF-8 输出(控制台中文乱码时用)
--gbk         强制以 GBK 输出(控制台中文乱码时用)
--no-color    关闭彩色输出
-h, --help    显示帮助
-v, --version 显示版本

終了コード:0 = 対応が必要な項目は未検出(かつ各ファイルが実際に読み込まれた);1 = CRITICAL/HIGH を検出;2 = 使用方法の誤り;4 = 読み込めないファイルがある(末尾の「終了コード」セクションを参照)。 CI ゲートとしてそのまま利用可能:

java -jar fastjson-check.jar ./build/libs --json || echo "发现高危依赖,阻断发布"

これは何ではないか

誤解を避けるため、境界を正直に説明します:

  • 汎用 SCA ツールではありません。fastjson という 1 つのライブラリのみを検査し、他の CVE は検査しません。包括的な依存関係セキュリティスキャンには、Snyk / OWASP Dependency-Check などをご利用ください
  • パッケージ名を変更した relocate パッケージングは検出できません。本ツールは com/alibaba/fastjson(2)/JSON.class というパスで識別しています。あるライブラリが shade 時にパッケージ名を com.foo.shaded.fastjson に変更している場合、検出できません
  • 到達可能性は判定しません。依存関係が存在する ≠ 必ず攻撃可能である、実際に悪用可能かどうかは外部から制御可能な JSON 入力パスがあるかどうかに依存します。ただしインシデント対応段階では、まず「あるかどうか」を明確にすることが第一歩です
  • コードを変更しません。報告するだけで、手を加えません

ビルド

mvn clean package
# 产物:target/fastjson-check.jar

コンパイルターゲットは Java 8 なので、生成された jar はそのまま JRE 8 が動いている古いマシンに置いて実行できます。 実行時の依存はゼロ —— 調査ツールが対象環境に何かを追加すべきではありません(特に JSON ライブラリを入れるべきではありません。私たちが調べているのはまさにそれです)。

フィードバック

誤検知や検出漏れを見つけた場合は、Issue を開いてください。 セキュリティツールで最も恐ろしいのは、安全だと誤解させることです。どんな誤判定でも報告する価値があります。

issue を提出する際に以下の情報を添えていただけると、原因特定がずっと早くなります:

  • 使用している JDK のバージョン、OS
  • java -jar fastjson-check.jar <ターゲット> --json の出力(JSON にはパス以外の機密情報は含まれません)
  • 可能であれば、その jar がどのようにパッケージングされたか(Spring Boot fat-JAR / shade / 通常の jar)

機能提案、新しい fastjson 関連の CVE、企業での一括調査シナリオの要望も、同様に issue で議論することを歓迎します。


ツールをダウンロード