2026 年 10 月 21 日,Oracle 在主 Critical Patch Update 之外单独发布了一个紧急安全警报:CVE-2026-91403,组件是 JSSE(Java Secure Socket Extension),CVSS 3.1 基础分 9.1,影响 Oracle Java SE、Oracle GraalVM for JDK 与 Oracle GraalVM Enterprise Edition。

它和同一周的 PHP2SHELL 撞在一起,容易被讲成「Java 也不安全了」。但两者的处置节奏完全不同:PHP 那次是补丁和 PoC 同天出现,这次是评分很高、细节极少、暂时没有公开利用。判断该多急,得先把事实和推测分开。

一、先看官方口径,别看转述

项目官方数据
CVECVE-2026-91403
组件JSSE(Java Secure Socket Extension)
弱点分类CWE-327:使用有缺陷或有风险的加密算法
CVSS 3.19.1(CRITICAL),AV:N / AC:L / PR:N / UI:N / S:U / C:H / I:H / A:N
NVD 记录时间2026-10-21 22:16 UTC 发布,状态仍是 Awaiting Analysis
CISA SSVC可自动化利用:是;技术影响:完全;已观测在野利用:无

把向量翻译成人话:网络可达、不需要账号、不需要用户点任何东西、复杂度低;一旦成功,可以读取和篡改数据(机密性与完整性都是 High),但不会造成服务中断(可用性无影响)。

最后这一条特别关键:服务不会挂,监控不会响。这意味着「网站还活着」不能作为「没被打」的证据。

二、CWE-327 是比「输入没校验」更麻烦的定性

网上流传的解读里,最常见的说法是「JSSE 对某些输入校验不严」。这个方向听起来合理,但和官方给出的 CWE-327 对不上——CWE-327 说的是密码学算法/原语层面的问题,不是业务参数校验。

JSSE 的职责是 TLS:握手协商、套件选择、证书链校验、密钥交换。这些环节一旦用了不该用的算法,或者对算法强度的判断出错,后果不是「某个接口被绕过」,而是整条加密通道的可信度下降。

必须说清楚:Oracle 没有公布根因,NVD 也没有给出 CPE 配置节点,更没有公开的 PoC。任何具体到「发哪种报文能触发」的描述,目前都属于推测。本文只讨论官方已确认的部分,以及基于组件职责能推断出的暴露面。

三、受影响版本:从 8u511 一直排到 27.0.1

产品线受影响版本
Oracle Java SE8u511、8u511-perf、11.0.33、17.0.21、21.0.13、25.0.5、27.0.1
Oracle GraalVM for JDK17.0.21、21.0.13
Oracle GraalVM Enterprise21.3.20

注意两点:

  • 这是季度 CPU 之外的第二个警报。10 月 20 日的 CPU 已经发布过一轮更新,而这些版本号恰恰就是那轮更新后的版本——也就是说「我上周刚打过补丁」不代表没事。
  • OpenJDK 各发行版(Temurin、Corretto、Zulu、Liberica)的版本编号和 Oracle 不一致,跟进通常要 1–3 天。不要照抄 Oracle 的版本号去核对发行版,去发行版自己的安全公告页查。

自查只需要一条命令,但要多查几处:

java -version
# 容器镜像、CI 构建机、中间件自带的运行时都算
find / -maxdepth 4 -type f -name java 2>/dev/null | head -20

四、谁真的暴露:三类部署最危险

1. Java 进程自己终止 TLS

Spring Boot 内嵌 Tomcat 开 8443、Netty 直接对外提供 HTTPS、gRPC 走 TLS——这类「TLS 在 JVM 里终结」的部署,攻击面直接落在 JSSE 上。这是最高优先级。

2. Java 作为 TLS 客户端去连别人

很多人只盯着「我有没有对外开 HTTPS」,忽略了出方向:连数据库的 SSL、调第三方支付/短信/对象存储的 HTTPS 客户端,走的也是 JSSE。这类链路位于内网,但攻击者一旦在链路上有位置(同网段、被控的中间设备、被劫持的 DNS),效果一样。

3. 客户端沙箱场景

官方描述里专门提到:加载并执行不可信代码、依赖 Java 沙箱做隔离的客户端部署(Java Web Start、Applet)同样适用。这类场景在政企内网仍有存量。

相对安全,但别当护身符

如果 TLS 由 Nginx / 硬件负载均衡终止,Java 只跑内网 HTTP,那么 JSSE 的直接暴露面确实小很多。但这只是降低暴露,不是修复:JSSE 仍在处理内部调用、数据库连接、缓存集群通信。

五、和 PHP2SHELL 比,这次该多急

维度PHP2SHELL(CVE-2026-109618/109619)CVE-2026-91403
攻击前置条件一个 multipart 请求网络可达 + 使用受影响 JSSE 功能
公开利用mod_php 已实证,PoC 同日出现暂无公开 PoC,CISA 记录为未观测到在野利用
可见性进程崩溃、OOM 报错,日志会响可用性无影响,运行期几乎无声
修复动作升级 PHP + 重启 worker升级 JDK,需要兼容性回归
合理窗口24 小时内公网 TLS 侧 24–72 小时,其余本周内

我的判断:不需要停业务抢修,但不能拖过本周。理由是没有在野利用,所以不必半夜停机;但 CWE-327 加上「可自动化、完全技术影响」,一旦 PoC 出现,暴露的是一整代 JDK,且现场不会报警。

六、四个常见误解

  • 「没有 PoC,先放着」:漏洞的隐蔽性恰恰是风险——没有可用性影响,你不会有任何现场告警。
  • 「我们都在内网」:JSSE 也跑在出方向,横向移动与链路劫持都在射程内。
  • 「刚打过 10 月 CPU」:这是 CPU 之外的紧急警报,受影响的正是那批更新后的版本。
  • 「Spring Boot 是最新版就行」:JDK 是底座,框架版本再新也换不掉 JSSE。

七、接下来做什么

具体动作我拆到了另一篇:《CVE-2026-91403 处置手册:版本核对、升级顺序与无法升级时的收敛》,包含版本台账命令、灰度升级步骤、验证清单,以及「今天必须上线、暂时动不了 JDK」时的降暴露方案。

参考

  • Oracle Security Alert for CVE-2026-91403(官方,补丁版本以此为准)
  • NVD 记录:nvd.nist.gov/vuln/detail/CVE-2026-91403
  • OpenJDK Vulnerability Advisory 2026-10-21
  • 素材来源:掘金《继 PHP 之后,JAVA 也爆出了重大安全漏洞!》(作者:苏三说技术)

本文按 NVD 记录与公开报道重新整理,技术结论只覆盖官方已确认的范围。补丁版本号、各发行版跟进情况请以 Oracle 警报页与你实际使用的发行版公告为准。