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
漏洞扫描器漏洞分析DevSecOps供应链安全
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.

查看仓库
7天前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

fastjson-check

Release Downloads License Java

一条命令,查清你的 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-29repo1
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 分支四年无提交 —— 1.2.84 是为本次漏洞专门破例发布的。

它的 release 标题没有标注安全修复:1.2.83 的标题写了「(安全修复)」,而 1.2.84 只写 「1.2.84版本发布」。但正文是写了的 —— 有完整的 Security Fixes 章节,逐条列出四项 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 能列出依赖,但对两种情况无能为力:

  1. 你手上只有一个打包好的 fat-JAR,没有源码和构建环境(线上应急排查最常见的场景)
  2. fastjson 被 shade 进了某个 SDK 的 jar 里,依赖树上根本看不到它

本工具就是为这两种情况写的。

快速开始

从 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.failOnFoundfalse发现 CRITICAL / 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

注意第二条 —— 那个 some-sdk-3.1.0.jar 把 fastjson 打包进了自己内部,依赖树上完全看不见。

判定规则

版本判定说明
fastjson 1.2.68 ~ 1.2.83🔴 CRITICAL命中 CVE-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 一个库,不查其他 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 版本、什么操作系统
  • java -jar fastjson-check.jar <目标> --json 的输出(JSON 里不含任何路径以外的敏感信息)
  • 如果方便,说明那个 jar 是怎么打包的(Spring Boot fat-JAR / shade / 普通 jar)

功能建议、新的 fastjson 相关 CVE、企业批量排查场景的需求,同样欢迎开 issue 讨论。


需要更进一步的排查?

这个工具回答的是「我中没中」。下面这些它答不了,可以找我做:

  • 依赖被 shade / relocate 过,或者构建产物根本拿不到
  • 要判的是「这条 CVE 在我们的调用链上到底会不会触发」,而不只是版本命中
  • 要按你们自己的构建流程或内网环境做定制、接进现有流水线
  • 手上是另一个组件的同类问题,还没有现成工具

📮 [email protected] —— 说清情况,我 24 小时内给你一页书面答复: 能不能做、难在哪、大概多久。这一步免费,也不用你先承诺什么。

许可证

Apache License 2.0


fastjson-check (English)

One command to find out whether your Java application ships fastjson, where it hides, and whether you are exposed to CVE-2026-16723.

Zero dependencies · fully offline · a single 22KB jar · Java 8+

Why

On 2026-07-21 a remote code execution flaw in fastjson was disclosed as CVE-2026-16723 (CVSS 9.0):

  • Affects fastjson 1.2.68 – 1.2.83
  • Exploitable under stock default configuration — no AutoType, no classpath gadget, no authentication needed
  • Exploited in the wild within days, primarily against Spring Boot fat-JAR deployments

⚠️ A patch does exist: 1.2.84. Almost nobody knows.

Most advisories — including major security outlets — still state that fastjson 1.x is EOL, that no patch will ever ship, and that migrating to fastjson2 is the only option. That has been untrue since 2026-07-29. Verify it yourself:

下载工具