先说结论
截至 2026-09-14:
| 你现在的版本线 | 一次修完的版本 |
|---|---|
| 2.18.x | 2.18.10 |
| 2.21.x | 2.21.6 |
| 2.22.x | 2.22.2 |
3.1.x(tools.jackson.core) |
3.1.6 |
3.2.x(tools.jackson.core) |
3.2.2 |
这几个版本在 Maven Central 上都能下载。
如果你是照我 08-07 那篇(jackson-databind 升到 2.21.4 就安全了吗?)升到了 2.21.5,那个答案现在不够了:2.21.5 还中 3 条,而这 3 条 Dependabot 不会报。
这 4 条是什么
FasterXML 在自己仓库的 Security 页上发了 4 条:
| 编号 | 发布 | 严重度 | 内容 | 修复版 |
|---|---|---|---|---|
| CVE-2026-68497 | 08-21 | high 7.5 | JSON 字符串绑定到 javax.xml.datatype.Duration / XMLGregorianCalendar 时,数字长度没有上限,可耗尽 CPU |
2.18.10 / 2.21.6 / 2.22.2 / 3.1.6 / 3.2.2 |
| CVE-2026-19032 | 08-21 | medium 5.3 | 反序列化 java.nio.file.Path 时不限制 URI scheme,可驱动已注册的 FileSystemProvider |
同上 |
| CVE-2026-77310 | 08-21 | medium 5.3 | CVE-2026-54514 修得不完整:InetAddress 分支仍会立即做 DNS 解析 |
2.18.9 / 2.21.5 / 2.22.1 / 3.1.5 / 3.2.1 |
| CVE-2026-83557 | 09-01 | medium 5.6 | 默认 PolymorphicTypeValidator 的拒绝列表漏了 Comparable |
2.18.10 / 2.21.6 / 2.22.2 / 3.1.6 / 3.2.2 |
最值得先看的是 68497。advisory 原文说,默认的 JsonMapper.builder().build() 就能触发,不需要开多态,也不需要特殊配置,只要你的 DTO 里有 javax.xml.datatype.Duration 或 XMLGregorianCalendar 字段。
为什么扫描器不报
GitHub 全局漏洞库查不到。 这 4 条是 FasterXML 在自己仓库里发布的 advisory。按 GHSA 编号去 GitHub 全局漏洞库查:
bash
gh api advisories/GHSA-q4xh-88c3-wmh7 # 68497 → 404
gh api advisories/GHSA-wjgm-6hv5-3cvf # 19032 → 404
gh api advisories/GHSA-vvgp-rfg2-7rr6 # 77310 → 404
gh api advisories/GHSA-gx83-3vf8-gh7j # 83557 → 404
gh api advisories/GHSA-5gvw-p9qm-jgwh # 对照:07-10 发的那条 → 查得到
GitHub 官方文档写的是:「Only advisories reviewed by GitHub trigger alerts.」没被 GitHub 审核收录的 advisory,不会触发 Dependabot 告警。
这不是说 GitHub 永远不收。拿之前几条做对照:
| advisory | 仓库发布 | 进全局库 | 间隔 |
|---|---|---|---|
| GHSA-j3rv-43j4-c7qm | 06-16 | 06-23 | 7 天 |
| GHSA-5gvw-p9qm-jgwh | 07-10 | 07-21 | 11 天 |
| 这 4 条 | 08-21 / 09-01 | 截至 09-14 未收录 | 13~24 天 |
OSV 按 Maven 坐标也查不到。 OSV 里有这几条 CVE 的记录,但只写了 Git 提交区间,没有 Maven 包的版本区间。于是按坐标查:
bash
curl -X POST https://api.osv.dev/v1/query -d '{"package":{"name":"com.fasterxml.jackson.core:jackson-databind","ecosystem":"Maven"},"version":"2.21.5"}'
# → 空,这 4 条一条都没有
# 对照:同样查 2.21.4,能查出 GHSA-5gvw-p9qm-jgwh
按 Maven 坐标查 OSV 的工具,同样看不到这 4 条。
2.21.5 为什么不够了
08-07 那批 11 条逐条求交集,2.21 线的答案是 2.21.5。新发的 4 条里,77310 在 2.21.5 就修了,另外 3 条(68497 / 19032 / 83557)要 2.21.6。
所以停在 2.21.5 的项目:
- 版本落在受影响区间内的:3 条
- 其中 Dependabot 会报的:0 条
2.18 线同理,2.18.9 还差 3 条,要 2.18.10;3.1 线 3.1.5 还差 3 条,要 3.1.6。
不等漏洞库:补丁在 jar 里能直接看到
漏洞库什么时候收录不由你决定,但修复版里的补丁是看得见的。拿相邻两个版本的 jar,比较类文件里的字符串:
| CVE | 补丁标记 | 修复版里 | 前一版里 |
|---|---|---|---|
| 19032 | _isSchemeAllowed(新加的 scheme 白名单检查) |
2.21.6、3.1.6 有 | 2.21.5、3.1.5 没有 |
| 68497 | _validateTimestampLength(新加的长度校验) |
2.21.6 有 | 2.21.5 没有 |
| 83557 | 拒绝列表类里多了 java/lang/Comparable |
2.21.6 有 | 2.21.5 没有 |
| 77310 | 新增类 InetAddressValidator |
2.21.5 有 | 2.21.4 没有 |
每一行都是双向核的:修复版里必须有,前一版里必须没有。只看一个方向的话,「本来就有」和「补丁加的」分不开。
你真的中了吗
版本落在区间里不等于一定中招,每条都有前提:
- 68497 :DTO 里有
javax.xml.datatype.Duration或XMLGregorianCalendar字段,并且会接收外部 JSON。注意java.time.Duration不是这一条。 - 19032 :DTO 里有
java.nio.file.Path字段并接收外部 JSON。原文明说:只有 JDK 自带的文件系统时,解析出来的路径无害;要产生挂载、网络访问之类的副作用,classpath 上得有第三方FileSystemProvider(比如 jimfs、各种云存储的 NIO 实现)。 - 77310 :DTO 里有
InetAddress字段并接收外部 JSON,绑定时会发起 DNS 查询。 - 83557 :
@JsonTypeInfo标在Comparable类型的属性上,并且没配自定义的PolymorphicTypeValidator。原文说activateDefaultTyping()必须传 validator,不受影响。
advisory 里的一个笔误
77310 的 advisory 在 2.22 线写的是区间 >= 2.22.0, < 2.22.1,修复版却填了 2.21.1,比区间下限还低。照抄会让 2.22.0 的用户去「升」到 2.21.1。按区间看,正确的修复版是 2.22.1,在 Central 上存在。
一个把这些做完的工具
jackson-check v0.2.0 把这 4 条并进了判定表,现在一共 15 条:
bash
java -jar jackson-check.jar ./target ./src
它会:
- 从构建产物里读出实际装的 jackson-databind 版本和 groupId(2.x 是
com.fasterxml.jackson.core,3.x 是tools.jackson.core); - 标出哪些条目 GitHub 全局漏洞库还没收录;
- 扫源码里有没有上面那些字段类型,扫依赖 jar 里有没有注册第三方
FileSystemProvider; - 逐条求交集,给出一次修完的版本。
一个停在 2.21.5 的项目,扫出来是这样:
markdown
你的版本落在受影响区间内的:3 条
其中 Dependabot 会报的:0 条(GitHub 全局漏洞库已收录)
🔴 其中 Dependabot 看不见的:3 条(GitHub 全局漏洞库还没收录,按 GHSA 号查 404)
...
现在 2.21.5 → 升到 2.21.6
判定表由脚本从一手数据生成:它会逐个按 GHSA 编号去全局库复核「查不到」,并用一条查得到的做对照。GitHub 哪天收录了,重新生成一次,这个数字就会自己变回 0。
纯 Java,零依赖,不联网。
这篇能证明什么、不能证明什么
能证明的:
- 这 4 条 advisory 在 FasterXML 仓库已发布,截至 09-14 在 GitHub 全局漏洞库按编号查是 404;
- OSV 按 Maven 坐标查 2.21.5,查不出这 4 条;
- 2.21.5 / 2.18.9 / 3.1.5 还差 3 条,补丁标记在修复版 jar 里双向可见。
不能证明的:
- 不是说 GitHub 不会收录。之前的条目都收了,只是这次慢;
- 不是说商业 SCA 也查不到,那些我没有查;
- 不是说版本落在区间里就一定中招,每条都有触发前提;
- 19032 在只有 JDK 自带文件系统时是无害的,不是高危。
实际建议:升到 2.21.6 / 2.18.10 / 3.1.6(或同线最新版),别等 Dependabot 提醒。