Jetty 又出一条走私(CVE-2026-19203):官方叫升 9.4.64,而 9.4.64 在 Central 上是 404

先说结论

2026-09-17,Jetty 发布了 CVE-2026-19203 (GHSA-xc35-c22g-239h,high / CVSS v4 8.3),是今年 6 月那条 CVE-2026-2332 走私的同族续作 ------都是 chunk 分块解析被一个换行字符提前截断,导致 HTTP 请求走私。区别在触发字符:2332 是 quoted-string 里的 \r\n,19203 是 chunk 扩展里的 \n(LF),官方按 Funky Chunks 研究的术语叫它 LF EXT.TERM 走私。

对还在用 Jetty 9.4 / 10 / 11 这三条已经 EOL 的老线的人,最扎心的一条事实是:

官方安全页叫你分别升到 9.4.64 / 10.0.32 / 11.0.32------而这三个版本在 Maven Central 上,一个都没有。

截至发文当天实测:

你在哪条线 官方叫你升到 Maven Central 上
9.4.x(EOL) 9.4.64 🔴 404
10.0.x(EOL) 10.0.32 🔴 404
11.0.x(EOL) 11.0.32 🔴 404
12.0.x 12.0.38 ✅ 200
12.1.x 12.1.12 ✅ 200

9.4 线的公开构件停在 9.4.58.v20250814,再往后 9.4.59~9.4.64 任何后缀都不存在。官方对这三条老线写的是 see details for availability------公开渠道拿不到,要走商业支持。

为什么你的扫描器可能没提醒你

19203 在 GitHub 全局漏洞库(Dependabot 用的那个)里已经是 reviewed 状态,但它的条目里 vulnerabilities 字段是空的------没有受影响的包、没有版本区间、没有修复版。

结果是:Dependabot 能告诉你「有 CVE-2026-19203 这个洞」,却给不出「你的哪个版本中了、要升到哪」。真正带区间的信息只在 Jetty 仓库级的 advisory 里(就是上面那张表的来源)。

🔴 这一条是截至 2026-09-18 的实测。GitHub 全局库补齐区间只是时间问题,补上之后 Dependabot 就能给出升级建议了。

一个容易被漏掉的区间:9.4.60 ~ 9.4.63

如果你之前用只覆盖 2332 的检查跑过一遍,注意一个盲区:

  • 2332 的 9.4 区间到 9.4.59 为止;
  • 19203 的 9.4 区间到 9.4.63。

也就是说,卡在 9.4.60 ~ 9.4.63 的构件,在只看 2332 的检查里是「干净」的,实际上中了 19203。而用户后台搜得最多的正是 jetty 9.4.63、jetty security 9.4.64 maven------恰好落在这一段。

12.1.x 是个例外:默认配置不受影响

一个必须说清楚、否则会误导人的点:

12.1.x 默认不受这条影响。 从 12.1.0 起(PR #12564),Jetty 默认用 RFC9110 合规模式,不允许 chunk 扩展里出现 LF。只有当你显式 把 HttpCompliance 配成 RFC7230 或 RFC2616 时,最新的 12.1.11 也会中招。

而 9.4 / 10 / 11 / 12.0 这几条线是默认就中招的(官方用 12.0.36 的 docker 镜像实测,一个请求打进去返回了两个响应)。

所以判断你中不中,不能只看版本号,还要看:①你在哪条线;②如果是 12.1.x,有没有改过合规模式。

顺手说清:这条洞的危害边界

走私类漏洞的危害有前提:你的 Jetty 前面还得有一个前端代理 / 负载均衡,且它和 Jetty 对同一个请求的边界解读不一致,攻击者才能把一个「走私」的请求藏在正常请求后面。裸跑一个 Jetty、前面什么都没有,是讲不出攻击故事的。这条 CVSS 是 v4 8.3,不是「谁装了谁完」。

但「命中受影响区间」「官方叫升的版本拿不到」这两件事是客观的构件事实,值得你先搞清楚自己在不在区间里。

一个把这些做完的工具

jetty-line-check 给它一个 Jetty 构件(部署目录 / war / Spring Boot fat jar),它回答:你中了这几条 2026 Jetty CVE 的哪些,以及官方叫你升的那一版在 Maven Central 上到底存不存在。

判据不是「jar 里有没有某个类」(这几条 CVE 的修复都是改方法体、没加类),而是你的完整坐标 + 版本线 → 判定表 + Central 真 jar 探测。判定表由脚本从 GitHub advisory 的一手数据 + Central HEAD 探测生成,八组断言不过就拒绝出表。

bash 复制代码
java -jar jetty-line-check.jar /path/to/jetty     # 扫部署目录 lib/*.jar
java -jar jetty-line-check.jar app.jar            # Spring Boot fat jar
java -jar jetty-line-check.jar --table            # 只看判定表

对 9.4.63 的 jetty-http,它会告诉你:命中 CVE-2026-19203,官方点名 9.4.64,而 9.4.64 在 Central 上 404;对 12.1.11,它会额外标出「默认 RFC9110 不受影响,仅当配 RFC7230/2616 时命中」,不会对默认部署误报。

工具、判定表生成脚本、发文前复核脚本都在仓库里(MIT)。

这篇能证明什么、不能证明什么

  • 能:19203 存在、是 2332 同族、官方叫升的老线版本 Central 404(逐版本 HEAD 实测)、全局库当前拿不到区间、9.4.60~63 是只看 2332 会漏的一段。
  • 不能:不能证明你一定会被攻击(走私要前置代理解读不一致);不是说 GitHub 永远不会补上区间;不是说 12.1.x 默认部署有风险。
相关推荐
小鹿的周先生9 小时前
第16章-RAG
java·人工智能·ai编程
夜不会漫长9 小时前
C++:内存管理
java·开发语言·c++
芯盾时代9 小时前
从《人工智能安全治理框架3.0》看智能体安全治理
人工智能·安全·网络安全·智能体
vipxieliang9 小时前
ValidX 财务系统发票验证:发票号、税号、金额校验
java·spring boot
天空鸟_时光不老9 小时前
06-给AI流程加一道人工闸门
java·人工智能·spring boot·后端·spring·spring cloud·架构
夜之眷属9 小时前
JVM实战:服务器堆外内存去哪了(NMT实测)
java·服务器·jvm·后端·性能优化
fundoit9 小时前
OIDC的UserInfo端点
java·架构·oauth2·oidc
Wang's Blog9 小时前
Java框架 SpringCloud 快速入门: Nacos 配置管理之添加配置与 dataId 命名规范
java·开发语言·spring cloud
JAVA面经实录9179 小时前
Java高级后端 · 全套面试通关手册(Nginx)
java·nginx·面试
阿俊-全栈开发10 小时前
LikeShop单商户Java商城如何从容承接高并发流量?
java·开发语言·spring boot·spring·系统架构