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.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

它会:

  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 提醒。

相关推荐
vx_Biye_Design8 小时前
springboot宠物领养与救助平台64334-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·mysql·课程设计·宠物
泡茶喝茶写代码8 小时前
A股量化数据工程:从 REST 接口到策略信号(第 5 篇):板块成分股映射与对齐
java·python·股票数据api·股票数据·股票数据api接口·股票api数据接口·股票量化数据接口
vx_Biye_Design8 小时前
django就业信息推荐系统61953-计算机课程设计、毕业设计
java·vue.js·spring boot·python·架构·django·课程设计
迪康coolmu8 小时前
屏幕水印与防拍照落地:从水印类型到泄密溯源的完整配置
运维·网络·安全·网络安全·数据安全
知守观8 小时前
HTML 转 PDF 方案实战:iTextPDF 与 wkhtmltopdf 踩坑复盘,附 Flying Saucer / openhtmltopdf 选型对比
java·后端
2601_962071578 小时前
类变量和全局变量的隔离性有什么区别?
java·开发语言·jvm
海绵宝宝转agent8 小时前
LeetCode100 LRU缓存思路讲解
java·开发语言·缓存
专业程序开发源8 小时前
springboot高校学生社团管理系统74810-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·spring·php·课程设计
youdexiang8 小时前
AI 生成会议纪要好用吗?多款 APP 功能分析
java·人工智能·音视频
通信瓦工9 小时前
OCP 冷却环境与冷却剂分配单元(CDU)子项目
java·开发语言