Skip to content

Releases: xiaoqiMikko/fastjson-check

v0.3.2

Choose a tag to compare

@xiaoqiMikko xiaoqiMikko released this 14 Oct 13:57

0.3.2

  • 处置建议里「升级到 1.2.84」补上前提:需要 JDK 8 及以上。1.2.84 的 class 是 Java 8 字节码(major 52),在 JDK 7 上运行会抛 UnsupportedClassVersionError(2026-10-14 在 Zulu 7u352 上实测)。
  • README 补充:1.2.84 里的 JSON.VERSION 常量仍是 "1.2.83"。本工具读的是 pom.properties,不受影响。
  • README 英文段更正:旧版写 1.2.84 的 release「never mentions security」,与原文不符(正文有 Security Fixes 章节)。中文段 08-14 已更正,英文段这次补上。
  • 判定规则没变。Maven 插件坐标仍为 Central 上的 0.3.1。

v0.3.1 —— 读不动的文件不再静默返回 0

Choose a tag to compare

@xiaoqiMikko xiaoqiMikko released this 10 Sep 06:38

读不动的文件不再静默返回 0

在此之前,一个损坏、加密或下载不全的 jar 会被安静跳过,报告末尾照旧印出

未发现 fastjson。

而退出码是 0 —— 留痕是给人看的,CI 和脚本看的是退出码,于是「我没能读它」在自动化里等于「通过」。

本版新增退出码 4 = 有文件读不动。 0 从此意味着「扫完了,并且每个文件都真的读进去了」。

  • 🔴 发现真问题时不降级:1(CRITICAL/HIGH)仍然优先,4 只在「没有需处理项、但有文件没能读进去」时出现
  • ⚠️ 合法的空 jar 不算读不动,不会误报 4 —— 假告警多了真告警就没人看
  • 「我读不动它」和「你是安全的」必须是两句话

GitHub 上没有 v0.3.0 —— 那个版本号只发到了 Maven Central(插件形态)。

v0.2.0 — 官方补丁 1.2.84 已发布(修正误判) / Official patch 1.2.84 exists

Choose a tag to compare

@xiaoqiMikko xiaoqiMikko released this 03 Aug 18:45

fastjson 1.2.84 exists, and it fixes CVE-2026-16723

Most advisories still say fastjson 1.x is EOL and no patch will ever ship.
That stopped being true on 2026-07-29. Verify it yourself:

Evidence Where
com.alibaba:fastjson:1.2.84 on Maven Central, jar uploaded 2026-07-29 https://repo1.maven.org/maven2/com/alibaba/fastjson/1.2.84/
GitHub release 1.2.84, published 2026-07-29T08:24:51Z https://github.com/alibaba/fastjson/releases/tag/1.2.84
Commit fix: strengthen autoType type name validation and whitelist verification 2026-07-29T07:02:55Z

1.2.83 shipped in May 2022; the 1.x branch then had no commits for four years.
1.2.84 was cut specifically for this vulnerability.

Why nobody noticed: it was a silent release. The 1.2.83 release is titled
"(安全修复)" — security fix. 1.2.84 is titled merely "1.2.84版本发布",
never mentioning security, so trackers and media did not pick it up.

What it means: upgrading to 1.2.84 is a patch-level bump on the same branch,
usually with no code changes. You are not forced into an immediate fastjson2 major migration.


中文说明

官方补丁 1.2.84 已于 2026-07-29 发布,但采用静默发布(release 标题只写
「1.2.84版本发布」,未提安全修复),因此至今大量安全通告仍称「1.x 无补丁、只能迁 fastjson2」——
该说法已过时。证据链见上表,均可自行核验。

对 1.x 用户的实际影响:升级到 1.2.84 是成本最低的处置(同分支小版本,通常无需改代码),
不必被迫立刻做 fastjson2 大版本迁移。

本次变更

  • 🔴 修复误判:此前 CVE 上界写死 1.2.83 且假设「1.2.83 是 1.x 最终版本」,
    导致 1.2.84 被误报为 HIGH,并给出「官方不会有修复版本」的过时建议
  • ✅ >= 1.2.84 现判定为 OK
  • ✅ 受影响版本(1.2.68~1.2.83)的处置建议改为按成本排序:先推 1.2.84,再推 fastjson2,最后 SafeMode
  • ✅ README 中英双语补充完整可核验证据链
  • ✅ 新增 5 个回归测试(共 31 个全绿);真实 1.2.83 / 1.2.84 / fastjson2-2.0.64 包端到端复验通过

建议所有 v0.1.0 用户升级 —— 旧版会把已修复的 1.2.84 报成高危。

v0.1.0 — 查清你的 JAR 里有没有 fastjson

Choose a tag to compare

@xiaoqiMikko xiaoqiMikko released this 03 Aug 13:11

一条命令,查清你的 Java 应用里到底有没有 fastjson、藏在哪、是否受 CVE-2026-16723 影响。

零依赖 · 完全离线 · 23KB 单 jar · Java 8+

快速开始

下载下方的 fastjson-check.jar,然后:

java -jar fastjson-check.jar ./myapp.jar     # 扫一个 jar(fat-JAR 自动逐层展开)
java -jar fastjson-check.jar /opt/apps       # 扫一整个目录
java -jar fastjson-check.jar /opt/apps --json

不需要安装、不需要账号、不联网、不上传任何数据。

它能查出 mvn dependency:tree 查不到的东西

fastjson 通常是传递依赖 —— 没人主动装它,它是被别的库捎带进来的,很多团队根本不知道自己在用。两种最难查的情况本工具都覆盖:

  1. 手上只有打包好的 Spring Boot fat-JAR,没有源码和构建环境(线上应急最常见)
  2. fastjson 被 shade 进了某个 SDK 内部,依赖树上完全看不见

输出精确到嵌套路径:

[CRITICAL] fastjson 1.2.83
  位置    :myapp.jar!/BOOT-INF/lib/fastjson-1.2.83.jar
  场景    :Spring Boot fat-JAR  ← CVE-2026-16723 的主要在野利用场景
  结论    :命中 CVE-2026-16723(CVSS 9.0 远程代码执行),且官方无补丁

判定规则

版本 判定
fastjson 1.2.68 ~ 1.2.83 🔴 CRITICAL — 命中 CVE-2026-16723(CVSS 9.0),官方无补丁
fastjson 1.x 其他版本 🟠 HIGH — 已 EOL,有历史 AutoType RCE 系列漏洞
fastjson2 ≤ 2.0.62 🔴 CRITICAL — 多态反序列化 RCE,默认配置即可触发
fastjson2 ≥ 2.0.63 🟢 OK

⚠️ 官方推荐的迁移目标 fastjson2 自身在 ≤2.0.62 时也有 RCE。「已经迁到 fastjson2」不等于安全,必须同时看版本号。

CI 门禁

退出码:0 = 未发现需处理项 · 1 = 发现 CRITICAL/HIGH · 2 = 用法错误。

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

已知边界

  • 只查 fastjson 一个库,不是通用 SCA 工具
  • 改了包名的 relocate 打包检测不到(检测依据是 com/alibaba/fastjson(2)/JSON.class 路径)
  • 只报告依赖是否存在,不判断可达性
  • 不修改任何文件,只读

本版已用 Maven 中央仓库的真实 fastjson 1.2.62 / 1.2.83 与 fastjson2 2.0.62 / 2.0.63 验证通过,26 个单元测试全绿。


English

One command to find out whether your Java application ships fastjson, where it hides, and whether you are exposed to CVE-2026-16723 (CVSS 9.0 RCE, disclosed 2026-07-21, no patch will ever ship — fastjson 1.x is EOL and archived).

Zero dependencies · fully offline · single 23KB jar · Java 8+

java -jar fastjson-check.jar ./myapp.jar
java -jar fastjson-check.jar /opt/apps --json

fastjson usually arrives as a transitive dependency — nobody installed it on purpose, so many teams do not even realise they are running it. This tool recursively unpacks Spring Boot fat-JARs in memory and flags fastjson that has been shaded into vendor SDKs — exactly the cases mvn dependency:tree cannot see.

Version Verdict
fastjson 1.2.68 – 1.2.83 CRITICAL — CVE-2026-16723, no patch available
fastjson 1.x, others HIGH — EOL, historic AutoType RCE issues
fastjson2 ≤ 2.0.62 CRITICAL — polymorphic deserialization RCE
fastjson2 ≥ 2.0.63 OK

⚠️ Migrating to fastjson2 is not sufficient on its own: releases up to 2.0.62 carry their own RCE.

Exit code 0 = nothing actionable, 1 = CRITICAL/HIGH found, 2 = usage error — ready for CI gating.