jackson-databind 又出 4 条,Dependabot 一条都不报:2.21.5 还差 3 条

先说结论

截至 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.DurationXMLGregorianCalendar 字段。

为什么扫描器不报

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.DurationXMLGregorianCalendar 字段,并且会接收外部 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

它会:

  1. 从构建产物里读出实际装的 jackson-databind 版本和 groupId(2.x 是 com.fasterxml.jackson.core,3.x 是 tools.jackson.core);
  2. 标出哪些条目 GitHub 全局漏洞库还没收录;
  3. 扫源码里有没有上面那些字段类型,扫依赖 jar 里有没有注册第三方 FileSystemProvider;
  4. 逐条求交集,给出一次修完的版本。

一个停在 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 提醒。

相关推荐
無限進步D1 小时前
VSCode 简介+安装+JavaWeb前端常用插件+简单配置
java·开发语言·css·vscode·html·css3·插件
xiaoqiMikko1 小时前
Central 上的 Spring 5.3.41 不是官方发的:逐字节比对,官方修两条它少一条
java·安全
用户094248568031 小时前
第8章:Java 内存模型(JMM)入门——可见性、有序性、原子性
java·jvm
AI深栈1 小时前
第 9 章 · Model Context Protocol(MCP)
java·人工智能
雨辰AI1 小时前
信创多租户项目 9 大踩坑|数据隔离失效、权限越权终极解决(金仓 / 达梦 / 高斯全库适配)
java·大数据·数据库·后端
captain3761 小时前
网络原理(4)-TCP ▲▲▲
java·服务器·网络·网络协议·tcp/ip
橙子圆1231 小时前
JUC之线程和进程
java
Bs_MoneyMagnet1 小时前
基于springboot+vue的旅游行程分享与推荐小程序的设计与实现 源码+文档
java·vue.js·spring boot·后端·微信小程序·毕业设计·计算机毕业设计
一技安身1 小时前
【信创】统信UOS 银河麒麟离线部署Python3.11完整方案
android·java·python3.11