尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
jackson-databind 升到 2.21.4 就安全了吗?不够,2.21.5 也不够了:现在要 2.21.7 / 2.18.11(2026-10-12 更正)
2026-10-12 更正本文写于 2026-08-07,当时官方一共 11 条公告,结论是升到 2.18.9 / 2.21.5 / 3.1.5。**这组版本号已经过时。**之后官方又发了几批公告,截至 2026-10-12,jackson-databind 与 jackson-core 合计 26 条,一次修完要升到2.18.11 / 2.21.7 / 2.22.3 / 3.1.7 / 3.2.3(五个版本在 Maven Central 上都拉得到)。没变的:advisory 上写的修复版不是你该升的版本,交集得自己求;GHSA-mhm7-754m-9p8w至今没有 CVE 编号;两个 groupId 的区间仍然贴串,那两个修复版在 Central 上仍然拉不到。变了的:第四节说「没有 Dependabot 盲区」只对当时那 11 条成立。现在 26 条里有 1 条(CVE-2026-68498,jackson-core)GitHub 全局漏洞库没有收录,Dependabot 不会报它。正文其余数字(11 条、37 条规则、56 个测试)是 2026-08-07 的原貌;工具现在是 v0.4.0,判定表已跟到 26 条。2026 年 jackson-databind 出了 11 条安全公告。如果你按 Dependabot 的提示、或者照着其中某一条 advisory 把版本升到了2.21.4,这篇文章是写给你的。因为你还中三条,其中一条连 CVE 编号都没有。(这是 2026-08-07 的数;现在中的更多,见文首更正。)先把结论摆出来,后面每一条都能自己复现。结论:advisory 上写的修复版本,不是你该升的版本这 11 条里,8 条都写着修复版是2.21.4/2.18.8/3.1.4。这个数字出现得太频繁了,频繁到你会以为它就是答案。把 11 条逐条摆开求交集,真正的答案是这样:维护分支advisory 上最常见当时(11 条)盖得住全部的版本现在该升到(2026-10-12,26 条)2.18.x2.18.82.18.92.18.112.21.x2.21.42.21.52.21.72.22.x—2.22.12.22.33.1.x3.1.43.1.53.1.73.2.x—3.2.13.2.3差的就是最后那一位。而没有任何一条 advisory 会告诉你这件事—— 每条只管自己那一条,交集要你自己求。把目标顶上去的是这三条:CVE-2026-54515—— 大小写不敏感反序列化,绕过逐属性的JsonIgnorePropertiesCVE-2026-59889——JsonView对JsonUnwrapped容器属性失效GHSA-mhm7-754m-9p8w——没有 CVE 编号第三条值得单独说。一、那条没有 CVE 编号的,是个补丁缺口GHSA-mhm7-754m-9p8w讲的是JsonView在JsonTypeInfo(include As.EXTERNAL_PROPERTY)的 creator 参数上失效。它的 advisory 原文里有这么一段:This is a patch gap. GHSA-5hh8 (CVE-2026-54517) and GHSA-rcqc (CVE-2026-54518) descriptions cover only the main property-based path and the unwrapped-creator path respectively; the external-type-id creator path was fixed on the 3.x line via #6004 … butthe fix was never backported to 2.21 or 2.18.Users on 2.21.4 and 2.18.8 who upgraded per the published advisories remain vulnerableto the sameJsonViewbypass technique via a different code path.翻译过来就是:3.x 线修了,2.18 / 2.21 线的回移漏了。照着已发布的 advisory 升到 2.21.4 或 2.18.8 的人,仍然中招。这句话是官方自己写的,不是我推测的。它后来在2.18.9/2.21.5里才被补上 —— 也就是上面那张表里多出来的那一位。没有 CVE 编号意味着什么:你按 CVE 编号搜,搜不到它;很多以 CVE 为主键的工具和台账里,压根没有这一行;内部的漏洞跟踪单也大概率填不进去。它是这 11 条里最容易被整批漏掉的一条,偏偏又是那个「升到 2.21.4 还中」的直接原因。二、Jackson 3 换了 groupId,而 advisory 把两个坐标的区间贴串了这一条和上面那条无关,是另一个独立的坑,只要你在关注 Jackson 3 就会撞上。Jackson 3 换了 Maven 坐标:com.fasterxml.jackson.core:jackson-databind ← Jackson 2.x tools.jackson.core:jackson-databind ← Jackson 3.xartifactId一模一样,jar 文件名也一模一样(都叫jackson-databind-版本.jar),只有META-INF里才分得清。去 Maven Central 拉maven-metadata.xml数一下,两个坐标各自发布过哪些大版本:坐标Central 上实际发布过com.fasterxml.jackson.core:jackson-databind只有 2.xtools.jackson.core:jackson-databind只有 3.x干净利落,各管一边。但 advisory 的结构化字段不是这么写的:com.fasterxml.jackson.core上挂着6 条 3.x 的受影响区间,修复版写3.1.4tools.jackson.core上挂着1 条 2.x 的受影响区间,修复版写2.21.4两边都去 Central 试着拉一下那个 jar:https://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-databind/3.1.4/...jar → HTTP 404 https://repo1.maven.org/maven2/tools/jackson/core/jackson-databind/2.21.4/...jar → HTTP 404两个方向的修复版都不存在。为了排除「是不是我探测方式有问题」,同时跑了对照组:tools.jackson.core 的 3.1.4 → HTTP 200 ✅ com.fasterxml.jackson.core 的 2.21.4 → HTTP 200 ✅同一套探测方法,对照组全通。所以不是探测坏了,是两个 groupId 的版本区间被交叉贴错了。这件事的实际危害:照抄 advisory 的工具,会让你去装一个不存在的东西。你照着提示改 pom,构建时才发现拉不下来,然后开始怀疑自己的私服。三、11 条不是都跟你有关这是这篇文章里唯一一件 Dependabot 结构上做不到的事。Dependabot 按版本匹配 —— 你装了受影响版本,它就把 11 条全报给你。但这 11 条里,绝大多数只在你用了某个特性的时候才成立:触发条件关联条目JsonViewCVE-2026-54517 / 54518 / 59889 / GHSA-mhm7JsonTypeInfo/activateDefaultTyping/PolymorphicTypeValidatorCVE-2026-54512 / 54513JsonIgnorePropertiesACCEPT_CASE_INSENSITIVE_PROPERTIESCVE-2026-54515JsonIgnoreJsonProperty改名CVE-2026-54516Java Record PropertyNamingStrategyJsonIgnoreCVE-2026-59888字段里有InetSocketAddressCVE-2026-54514readTree()之后用JsonNode.toString()CVE-2026-50193这些条件都在源码里,能扫。我拿两份真实构件跑了对照。同一个jackson-databind-2.18.5.jar,只换源码:你的代码Dependabot 报触发条件真正成立用了多态类型 JsonView的 web 层7 条6 条只new ObjectMapper()做序列化7 条0 条Jackson 3.1.2 那边是9 条 → 3 条。差的那部分不是「不用管」,是排序:11 条一起丢过来,和「这 3 条你确实踩到了、先修这 3 条」,对排期的意义完全不同。四、这个工具不能证明什么写到这里得停一下,把边界说清楚。安全类的文章最容易在这里说过头,而说过头一查就穿帮。先说一条对 Dependabot 有利的:这 11 条里没有 Dependabot 盲区。(2026-10-12 注:只对这 11 条成立;之后新发的公告里有 1 条CVE-2026-68498全局库没收,见文首更正。)我把两个源摆在一起数过:官方仓库的 advisory 页面11 条,按两个坐标反查 Dependabot 实际用的索引,合计也是11 条,差值0。新坐标那边少的 2 条(CVE-2026-50193和GHSA-mhm7)对 3.x 本来就不适用,不是漏网。所以这一批Dependabot 的版本告警是准的,别信任何说「Dependabot 全看不见」的文章。这个工具的价值在求交集和降噪,不在补漏。顺带说下这个0是怎么来的:它是量出来的,不是我默认的。我上一个工具做 Apache Shiro 时用同样的方法比过一次,那次比出来官方 26 条、按坐标反查只有 21 条,差 5 条。同样的方法这次得出 0 ——单源默认的「没有盲区」和量出来的 0,在文章里长得一模一样,区别只在有没有真的去数。再说两条对这个工具不利的:①「没找到触发条件」不等于安全。至少三种情况会让它变成假的安心:你依赖的第三方库在它自己的代码里用了这些注解 —— 我们扫不到它的源码;注解可能通过 mixin(ObjectMapper.addMixIn)等运行时方式加上,源码里根本没有那个词;你可能压根没把源码目录传进来。②「触发条件全部成立」也不等于确认中招。标记是按整个代码库聚合的,不是按同一个类或同一个字段。比如某条要求JsonView和JsonUnwrapped标在同一个属性上,而工具只能看到这两个词都在你的代码里出现过。工具只做文本匹配,不做 AST 解析。这是故意的:关键路径得能被人读懂、自己核对 —— 一个看不懂的 AST 判定出错的时候,没有人能发现。一句话:版本判定是硬的,触发条件判定只用来排优先级,不用来免除风险。五、怎么用零依赖单 jar,不联网,Java 17。# Maven 项目mvn packagejava-jarjackson-check.jar target src# 只有一个成品 jarjava-jarjackson-check.jar app.jar# Gradlejava-jarjackson-check.jar build/libs src/main/java路径可以是 jar / war / 目录。目录会同时找构建产物(定版本)和.java源码(定触发条件),两个都有才答得出「你真中几条」。能认的形态:普通 jar、Spring Boot fat jar(BOOT-INF/lib/)、传统 WAR(WEB-INF/lib/),以及被 shade 进宿主 jar 的 jackson —— 那种情况依赖坐标层面看不见,但META-INF/maven还在,扫实物能看穿。退出码0/2/3分别对应「版本没中」/「版本中但没找到触发条件」/「触发条件也成立」,可以直接塞进 CI。仓库和 Release:https://github.com/xiaoqiMikko/jackson-check六、判定表是生成的,不是手抄的这类工具最怕的就是判定表抄错一位,而抄错的表看起来完全正常。所以判定表由脚本从两个一手源生成:官方仓库的 advisory 端点(维护者发布的条目全集 描述原文)GitHub 全局 advisory 库按坐标反查(Dependabot 实际用的那份索引)11 条 advisory 展开成37 条「advisory × 坐标 × 版本区间」规则,带13 条断言,任何一条不满足就中止且不写文件—— 防的是「解析失败生成了一张空壳表,而测试照样全绿」。几条关键的:断言查什么ASSERT2两个源的条目数摆一起比,差值必须为 0 或被逐条解释ASSERT7每个修复版逐个发 HEAD 请求探 Maven Central,拿不到的标出来ASSERT8拉maven-metadata.xml,证明整条大版本线在那个坐标下真的不存在ASSERT9逐分支求交集,且必须真的高于同分支最低修复版ASSERT11每条触发条件的锚点词必须逐字出现在官方描述原文里最后那条是防我自己的:不许凭印象给某条 CVE 标触发条件,官方原文里有那个词才算。配套56 个单元测试,以及7 个真实构件端到端场景—— 用的是从 Central 下下来的真 jar(2.13.0 / 2.18.5 / 2.21.2 / 2.21.4 / 2.21.5 / 3.1.2 / 3.1.5),不是自己造的测试数据。顺带一提,那 7 个真实场景又抓到 5 个 56 个单测全没测出来的问题,其中两个出在报告的归并和渲染层:同时装了两个 groupId 时,同一条 advisory 在两个坐标上都中,报告却只印一条;以及没扫源码时把结果印成了「触发条件部分成立」,而那句话是假的,根本没看过任何源码。两个都不报错,都得端到端跑一遍看报告才能发现。发文之前还用OSV(api.osv.dev)这个完全独立的库,把上面所有承重数字重算了一遍 —— 不读生成脚本的任何输出。这篇文章里的每个数字都过了那一关。如果你手上的项目还在 2.18 或 2.21 线,建议直接扫一遍。就算不用这个工具,也请把升级目标改成 2.21.7(2.18 线改成 2.18.11)—— 这是 2026-10-12 的数字,本文最初写的 2.21.5 / 2.18.9 已经不够。
RELATED

相关推荐

ABB PFEA112‑20 3BSE050091R20 Tension Control Amplifier

ABB PFEA112‑20 3BSE050091R20 Tension Control Amplifier

ABB PFEA112‑20 3BSE050091R20 is a high‑precision Pressductor tension control amplifier module. It receives measuring signals from ABB PFTL series tension load cells, performs signal conditioning and real‑time tension calculation, and outputs analog cont…

📅 2026/10/13 6:37:25
冒泡排序可视化实战:Coding Challenge 114 的 Processing 与 p5.js 双实现深度解析

冒泡排序可视化实战:Coding Challenge 114 的 Processing 与 p5.js 双实现深度解析

教程文档示例工程 【免费下载链接】website-archive Archive of the Coding Train website (first version) 项目地址: https://gitcode.com/gh_mirrors/we/website-archive 点击查看 免费下载 导读 本文以 Coding Train(本仓库)第 114 号编…

📅 2026/10/13 6:32:24
docker-ce 中的 Prometheus client_golang 剖析:从埋点库原理到 dockerd /metrics 的落地实现

docker-ce 中的 Prometheus client_golang 剖析:从埋点库原理到 dockerd /metrics 的落地实现

容器运行时云原生 【免费下载链接】docker-ce :warning: This repository is deprecated and will be archived (Docker CE itself is NOT deprecated) see the https://github.com/docker/docker-ce/blob/master/README.md :warning: 项目地址: https://gitcode.co…

📅 2026/10/13 6:32:24
MORE NEWS

更多资讯

📰

Node-Red环境搭建避坑指南:从零跑通第一个节点

1. 为什么我劝你先别急着拖节点,把环境搭明白再说 很多人第一次接触 Node-Red,是被它那种“拖拖拽拽就能跑通一个物联网流程”的演示吸引进来的。打开浏览器,左边一栏节点,中间一块画布,把 inject、function、debug 三…

📰

Context-Mode:一种解决代码导航迷航的上下文模式

写代码的时候最怕的不是报错,而是“迷路”。尤其是在一个几千行的文件里滚动半天,光标停住了,却完全想不起来自己现在正处于哪个类、哪个函数、哪个分支里。我几年前第一次遇到这个困境,是因为接手一个多人维护的项目,…

📰

Aurelio 上手:一个本地优先的个人财富管理应用,AI 只提建议不直改数据

2152 stars MIT Python local-first项目定位 Aurelio 是运行在本机的财富管理与财务规划应用,带一个可选的自然语言 AI 顾问。数据存放于本地 backend/data.db,不上传、不注册账号。 覆盖范围:银行/券商账户、持仓、基金穿透(按…

📰

Litellm实战:统一多LLM API网关的部署与排坑指南

如果手头同时接入三五家 LLM 服务商,你会很快发现一件事:真正麻烦的不是模型能力,而是 API 格式。A 家用这种报文,B 家用那种结构,错误码也各说各话,今天需求要换模型,明天就得改一版配套代码。…

📰

基于Spark与Django的胆结石数据分析与可视化系统设计

1. 这个题目为什么值得做:选题价值与技术选型逻辑1.1 从“毕业设计要被pass”说起的选题思路每年到了毕设选题的季节,很多同学来问我:老师给的题目要么是“XX管理系统”,要么是“A算法改进B算法”,前者工作量倒是够&am…

📰

lsp-mode 故障排查完全指南:从日志、服务器路径到最小环境复现

开发工具 【免费下载链接】lsp-mode Emacs client/library for the Language Server Protocol 项目地址: https://gitcode.com/gh_mirrors/ls/lsp-mode 点击查看 免费下载 导读 lsp-mode 是 Emacs 社区主流的 Language Server Protocol 客户端实现。当语言服务器无…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬