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.63jetty security 9.4.64 maven------恰好落在这一段。

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

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

12.1.x 默认不受这条影响。 从 12.1.0 起(PR #12564),Jetty 默认用 RFC9110 合规模式,不允许 chunk 扩展里出现 LF。只有当你显式HttpCompliance 配成 RFC7230RFC2616 时,最新的 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 默认部署有风险。
相关推荐
山东科恩光电1 小时前
科恩隐卫-KZS-01:实现注塑机安全生产的智能防护新标准
安全
Web4Browser1 小时前
浏览器指纹逆向到底在分析什么:从 JavaScript 采集、Canvas 与 WebGL 到环境一致性校验
java·服务器·前端
AKA__Zas1 小时前
跨网段主机的文件传输过程
java·网络·网络协议·学习方法
Wang's Blog1 小时前
Java 接入Redis: Redis简介与NoSQL定位
java·服务器·redis
程序猿乐锅1 小时前
【黑马点评 | 第四篇】Redis缓存雪崩
java·数据库·spring boot·redis·缓存
小尹哥-程序员1 小时前
第4集:让AI学会看文档:Spring AI RAG入门实战
java·人工智能·spring
可乐配鸡翅2 小时前
day seven 猜数字小游戏
java
张小凡vip2 小时前
Java Web 设置 Session 超时时间:如何让 Session 永不失效
java·spring boot
浪里摸鱼2 小时前
Java 泛型快速学习指南(面向接口扫描场景)
java