本周有一条安全短视频流传很广,列出了 PHP、Next.js、Node.js、nginx、GitLab、Java 的 15 个 CVE 编号,大多都标着 CRITICAL。我在 2026 年 10 月 25 日把每个 ID 都对照厂商自己的公告核查了一遍。15 个全部真实存在,nginx 漏洞 2026 这一批和 PHP 的两个也包括在内。但没有一个进入 CISA 的 KEV 目录(2026.10.23 版),CISA 的评估里除 CVE-2026-96889 标注为 "poc" 外,其余的利用情况都是 "none"。
"Black October" 并不是某个有名字的攻击活动,只是一批普通公告恰好扎堆:nginx 和 Next.js 在 10 月 14 日,GitLab 在 12 日和 21 至 22 日,PHP、Node.js 和 Oracle 的 Java 警报在 21 日。视频里有三处标签具有误导性,而这决定了谁该赶紧动手。下面先给汇总表,再按产品说明怎么检查、怎么修复。
汇总:谁受影响,该装什么版本#
| 产品 | ID | 实际严重程度 | 前提条件 | 修复版本 |
|---|---|---|---|---|
| nginx | CVE-2026-15176、CVE-2026-93479、CVE-2026-97205 | F5:CVSS v4 9.2;nginx.org:"Medium" | 特定配置:alias + rewrite、带正则捕获的 map、aio + SSI。仅在 ASLR 关闭或被绕过时才能执行代码 | 1.30.6(stable)、1.31.7(mainline) |
| PHP | CVE-2026-109618、CVE-2026-109619 | CVSS v4 9.2 | 109618:解析 multipart 时;109619:同一 worker 内的两个请求 | 8.2.35、8.3.36、8.4.27、8.5.12 |
| Node.js | CVE-2026-111497、105482、105483、106069 | High(Node 的评级) | 通过 node:zlib 的 Brotli;主机名校验;连接特殊 IP 字面量的 TLS | 22.23.4、24.22.1、26.12.1 |
| GitLab | CVE-2026-110264、CVE-2026-97229 | CVSS v3.1 10.0 | 自托管实例,无临时规避办法 | 19.5.1 及下文各系列补丁 |
| Java | CVE-2026-91403 | CVSS v3.1 9.1 | TLS 证书链经过被攻破的 eMudhra 中间 CA | Oracle 警报,见 Patch Availability Document |
| Next.js | CVE-2026-96889 及两个 GHSA | CVSS v4 9.5 / 9.5 / 8.2 | 见另一篇文章 | 16.4.1、15.5.28(最新 16.4.3) |
三处误导性标签:
- CVE-2026-96889 在视频里被算作 Next.js。这个 CVE 本身是 librsvg 的 use-after-free(CNA 为 Red Hat,CVSS v3.1 7.8)。Next.js 受影响,是因为它的图片优化用了 sharp,而 sharp 自带 librsvg。
- CVE-2026-111497 是 Brotli 解码器的缺陷(CNA 为 Google,产品为 Brotli)。它通过 Node 到达你这里,Node 评为 High 而非 Critical,并且只有在你解压攻击者提供的 Brotli 数据时才触发。
- nginx 的 "CRITICAL" 是 F5 的 CVSS v4 分数。nginx 项目自己把三个都评为 "Medium"。
nginx 漏洞 2026:三个缺陷,三种配置#
10 月 14 日在 1.30.6(stable)和 1.31.7(mainline)中修复。F5 评分为 CVSS v4 9.2、v3.1 8.1。要执行代码,ASLR 必须关闭或被绕过,这就是 nginx.org 只写 Medium 的原因。
我受影响吗? 只有配置里含有触发条件才会。先查 nginx 漏洞 版本,再对完整配置做 grep:
nginx -v
nginx -T 2>/dev/null | grep -nE 'alias|rewrite|request_filename|aio|ssi|map'- CVE-2026-15176:
alias与rewrite同时使用,并且有用到$request_filename的set或return,或在log_format里使用$request_filename,会造成缓冲区溢出。升级前避免这种组合。 - CVE-2026-93479:脚本求值中的缓冲区溢出,出现在带正则的
map里,且root或log_format引用了正则捕获。影响 1.30.0 至 1.30.5 和 1.31.2 至 1.31.6。公告给出的缓解办法是使用命名捕获并限制在所在块内。 - CVE-2026-97205:
aio与 SSI 的include virtual同时使用时的 use-after-free。关掉 aio 或 SSI。
nginx 漏洞 修复: 升级到 1.30.6 或 1.31.7。同一版本还修复了 CVE-2026-95101(HTTP/3 请求体注入)和 CVE-2026-97629(TLS session ticket 伪造),所以即使你的配置避开了三个触发点,也值得升级。来源:nginx.org 安全公告,以及 F5 的 K000162416、K000162607、K000162608。
PHP 漏洞:21 日修复的两个 RCE#
两份公告(php/php-src 中的 GHSA-w8hw-w9fx-j79w 和 GHSA-6wmf-4rv5-p3rp)都是 CVSS v4 9.2,修复版本为 8.2.35、8.3.36、8.4.27、8.5.12。
CVE-2026-109618,"OOM 内存破坏导致 RCE"。 无需认证。已在 Apache mod_php 上通过 HTTP 验证了完整 RCE,发生在解析 multipart 请求体时,早于应用代码运行。FrankenPHP 很可能同样受影响;FPM 按源码分析受影响,但没有展示完整利用。升级前的办法:把 post_max_size 设得保守,限制 multipart 的分段数量,不用上传的话在前端拦截 multipart,重启 worker。RLIMIT_AS 和 RLIMIT_DATA 不是有效办法,公告里明确这么写。
CVE-2026-109619,"过期全局状态导致 RCE"。 需要同一个 worker 内有一个生产请求和一个消费请求。已在 mod_php 上通过 fatal_error_backtraces(PHP 8.5)确认,另有一条经过 session 上传进度的路径。临时措施:fatal_error_backtraces=0、session.upload_progress.enabled=0、去掉 PHP_VALUE 这类按请求设置的 INI 覆盖,并重启 worker。
检查用 php -v 和 php -i | grep -E 'post_max_size|upload_progress|fatal_error_backtraces'。有第三方报告称存在公开 PoC,但 PHP 并未确认。
Node.js 安全更新:22.23.4、24.22.1 或 26.12.1#
10 月 21 日发布,见 Node.js 安全发布公告。Node 20 已在 2026 年 4 月结束支持,不会再有修复,所以用 20 的话,要做的是换大版本,而不是打补丁。
| CVE | 内容 | Node 评级 | 何时有影响 |
|---|---|---|---|
| CVE-2026-111497 | Brotli 解码器越界写入 | High(CVE 记录为 CVSS v4 9.2) | 用 node:zlib 解压攻击者提供的 Brotli |
| CVE-2026-105482 | dns.resolve* 在 NUL 字符处截断域名 | High,7.4 | 先用白名单校验主机名再去解析。临时办法是拒绝 \0 |
| CVE-2026-105483 | 用全角数字 IP 绕过 TLS 主机名校验 | High,7.4 | 仅 Node 24 和 26,22 不受影响。客户端连接含非 ASCII 数字的主机 |
| CVE-2026-106069 | 用带前导零的 IPv4(如 0127.0.0.1)绕过 TLS 主机名校验 | High,7.4 | 客户端连接非规范写法的 IPv4 字面量 |
同一次发布还有 medium 级修复(CVE-2026-105481 keep-alive 响应走私、CVE-2026-106072、CVE-2026-106074)、取消信任 eMudhra 中间证书的证书库更新,以及 OpenSSL、c-ares、Undici、SQLite 的更新。要确认这次 Node.js 安全更新是否真的进了容器,本机的 node -v 什么也说明不了。运行 docker run --rm <image> node -v,并重新构建镜像。上个月拉取的 node:22 镜像里仍是旧版 Node。
GitLab 漏洞:评分 10.0,没有临时规避办法#
- CVE-2026-110264:正则表达式编译器中的整数溢出,CVSS v3.1 10.0,"在某些条件下"无需认证。修复于 18.11.13、19.0.10、19.1.9、19.2.9、19.3.6、19.4.3 和 19.5.1(10 月 22 日的补丁版本)。没有临时规避办法。
- CVE-2026-97229:CI/CD 正则编译器中的整数溢出,CVSS 10.0。未经认证的人可以在 CI 配置里写入构造的正则。10 月 12 日在 19.2.8、19.3.5、19.4.2 中修复。
GitLab.com 和 Dedicated 已由 GitLab 打好补丁。如果你自己运行实例,受影响的就是你:在 Help 页面或用 gitlab-rake gitlab:env:info 查看版本,升级到所在系列的补丁版本。既然没有规避办法,升级之前唯一的措施就是别让实例暴露在公网。
Java:关于证书的警报,不是代码执行#
CVE-2026-91403 是 Oracle 在 10 月 21 日发布的计划外 Security Alert,针对 Java SE 和 GraalVM,组件为 JSSE,CVSS v3.1 9.1。按警报的说法,修复是取消对被攻破的 eMudhra 中间 CA 证书的信任。我对实际风险的理解是:持有链到这些中间 CA 的证书的 TLS 中间人攻击,而不是远程代码执行。这是我的推断,不是 Oracle 的原话。
列出的受影响版本:Java SE 8u511、11.0.33、17.0.21、21.0.13、25.0.5、27.0.1,以及 GraalVM for JDK 17.0.21 和 21.0.13。修复后的构建号我没能确认,请到 Oracle 的 Patch Availability Document 里查。用 java -version 对照。Node 同一天也发布了同样的 eMudhra 变更。
Next.js:三条公告,另有专文#
Next.js 涉及三条公告:两个无需认证的 RCE(一个在 use cache 函数,一个在带 SVG 的 Image Optimization API),以及一个 Server Actions 的 DoS。修复版本是 16.4.1 或 15.5.28,最新为 16.4.3。触发条件、grep 命令,以及我在自己服务器上的发现,都写在这篇 2026 年 10 月的 Next.js 漏洞专文里。
怎么读一份吓人的 CVE 清单#
- 先看是谁给的分。 同一个缺陷,在 CVSS v4 里可以是 9.2,v3.1 里是 8.1,在厂商自己的表里是 "Medium"。本月的例子就是 nginx。问清楚数字是厂商、CNA 还是聚合站给的。
- 先读前提条件,再看分数。 "无需认证的 RCE" 后面跟着 "需要
aio加 SSIinclude virtual" 或 "需要 ASLR 关闭",和默认安装上的 RCE 完全是两回事。 - 打开 CISA KEV。 在目录里意味着已确认被利用。不在也不代表安全,但能区分 "本周修" 和 "今晚就修"。
- 找到真正的组件。 CVE-2026-96889 顶着 Next.js 的标签传播,实际出在 librsvg。只按产品名搜索自己的技术栈,就会漏掉它。
- 数一数你真正在运行的东西。 把没有的产品划掉,15 条的清单很快就短了。
我的技术栈需要什么#
我在一台服务器上用 Docker 跑着 7 个 Next.js 站点,通过 Dokploy 部署,前面是 Traefik。服务器上没有 nginx、PHP、Java 和 GitLab。15 个里和我有关的是 Next.js、Node.js、sharp 和 Docker 基础镜像。审计结果(7 个站点中 6 个有漏洞、按 digest 固定而冻结了旧版 Node 补丁的镜像、我根本用不上的 dangerouslyAllowSVG 设置)写在配套文章里。
如果你在应用旁边还自托管了 Wiki 之类的工具,同样的规则也适用;我写过一个这样的部署,见ClewWiki:自托管的团队 Wiki。



