2026 年 10 月安全更新汇总:PHP、Node.js、NGINX、Go 和 GitLab
新闻更新于 13 分钟阅读
PHP2Shell、Node.js 的 10 个 CVE、NGINX 的五个修复、Go 的证书屏蔽、GitLab 安全补丁和 eMudhra CA 私钥泄露:先补哪个,怎么检查。

持续更新。最后核实: 2026-10-22。各厂商的发布说明都链接在对应小节里,版本信息以它们为准。
作者 Frankie C. · Mindber 高级市场研究员。通过 Mindber Innovation Index 方法追踪东南亚市场 500 多个 AI/SaaS 工具。
评估方式: 2026 年 10 月 22 日,我们读了 Node.js 的安全公告、NGINX 在 GitHub 上的发布说明,以及 Go 的 issue 跟踪器和发布标签。其余内容来自 GitLab 的更新日志、certifi 和 uv 的安全公告,以及 Cloudflare 关于 PHP2Shell 的分析文章。Amazon 关于 PHP2Shell 被利用的报告我们没能打开,所以只引用它的标题。Mindber 没有运行任何漏洞利用代码,也没有测试任何服务器。哪家厂商的页面打不开,对应小节会写明。
如果你维护着一套网站技术栈,2026 年 10 月 14 日到 21 日这一周留给你的更新不止一项。PHP 修复了引擎里两个合称 PHP2Shell 的严重漏洞,Node.js 同一天修了 10 个 CVE。NGINX 早在一周前就堵上了五个。Go 屏蔽了少数几张中间证书,只说是出于安全顾虑,没有细说。GitLab 发布了安全补丁,eMudhra 有八个中间 CA 私钥泄露。X 上一条广为转发的帖子把这些全算在了同一天。下文的日期取自各厂商自己的说明,前后其实跨了一周。
先打哪个补丁
下面是我们排的顺序,每项附上理由。在我们读过的来源里,只有第一项有公开的被利用报告,所以它单独排在最前面。
- Apache + mod_php 上的 PHP,今天就补。 Amazon 报告称其蜜罐在披露前就捕获了 PHP2Shell 利用行为,Cloudflare 也看到了攻击流量,而且已证实的攻击完全不依赖你的代码。修复版本和命令都在我们的 PHP2Shell 指南里。
- 接收外部输入的 Node.js 服务。 Brotli 漏洞所在的解码器能被不可信数据触达,另外两个高危漏洞削弱了 TLS 主机名校验。
- 所有信任
emSign ECC Root CA - G3根证书的系统。 利用这些被盗私钥,攻击者得先处在通信路径上,风险因此小了一些。可证书信任这件事,出了问题之后很难回头审计。 - NGINX,尤其是启用了 HTTP/3、SSI 配 AIO、alias 配 rewrite,或者会轮换会话票据密钥的。 五个 CVE 里有四个需要开启其中某项功能。
- 自管的 GitLab,以及需要重新构建的 Go 程序。 两者都要处理,但在我们读过的来源里,都没有攻击报告。
按时间顺序看这一周:
七天里的安全更新
- 1
10 月 14 日:NGINX
NGINX 1.31.7 主线版和 1.30.6 稳定版修复五个 CVE。 - 2
10 月 18 日至 20 日:certifi
certifi 2026.10.18 移除所有 emSign 根证书。2026.10.19 版于 10 月 20 日凌晨(UTC)提交,恢复了未受影响的根证书。 - 3
10 月 20 日:Go 和 uv
Go 1.27.3 和 1.26.10 打出标签,其中屏蔽了一小批中间证书(CVE-2026-111943)。uv 0.13.4 发布,certifi 和 uv 的安全公告也在 GitHub 上公开。 - 4
10 月 20 日:GitLab
GitLab 打出 19.5.1、19.4.3 和 19.3.6 标签。19.5.1 的更新日志列出 14 项安全修改。 - 5
10 月 21 日:PHP 和 Node.js
PHP 发布针对 PHP2Shell 的四个修复版本。Node.js 发布 26.12.1、24.22.1 和 22.23.4,修复 10 个 CVE,并针对 eMudhra 泄露更新了 CA 证书。
PHP:已经被利用的 PHP2Shell
CVE-2026-109618 和 CVE-2026-109619 是 PHP 引擎里的内存漏洞。一个是 PHP 在错误的时刻耗尽内存,导致请求内存被破坏;另一个是某个请求已释放的数据,会污染同一工作进程接手的下一个请求。两个都能让攻击者不用登录就执行代码。Cloudflare 报告了针对其客户的攻击流量,Amazon 威胁情报团队的报告标题则是"Amazon Threat Intelligence identifies PHP2Shell exploitation prior to public disclosure in MadPot"。
各种部署方式、临时缓解措施和入侵排查,我们的 PHP2Shell 指南都讲到了。简单说:漏洞在 PHP 本身,所以更新 WordPress、Magento 或 Laravel 都没用。修复办法是换上新的 PHP 构建,再重启每一个工作进程。
Node.js:三条版本线,十个 CVE
Node.js 2026 年 10 月安全更新列出了十个 CVE,修复版本是 26.12.1、24.22.1 和 22.23.4。公告说已停止支持的版本一律算作受影响,修复只发给三条受支持的版本线。
| CVE | 严重级别 | 问题 | 受影响版本线 |
|---|---|---|---|
| CVE-2026-111497 | 高 | Brotli 解码器越界写入,可导致远程代码执行 | 26、24、22 |
| CVE-2026-105482 | 高 | dns.resolve 会截断含 NUL 字符的域名 | 26、24、22 |
| CVE-2026-105483 | 高 | IP 用全角数字书写时,可绕过 TLS 主机名校验 | 26、24 |
| CVE-2026-106069 | 高 | 主机名能被宽松解析为 IP 地址时,可绕过 TLS 主机名校验 | 26、24、22 |
| CVE-2026-105481 | 中 | keep-alive 套接字会处理在请求发出之前就写入的响应 | 26、24、22 |
| CVE-2026-106072 | 中 | 非规范的 IPv4 主机名让 DNS SAN 可以用来认证 IP 端点 | 26、24、22 |
| CVE-2026-106074 | 中 | crypto.randomUUID() 和 randomInt() 的缓存被存进启动快照和 SEA,生成的值会重复 | 26、24、22 |
| CVE-2026-106070 | 低 | 头部校验失败后,ZipFile 返回攻击者可控的前缀字节 | 仅 26 |
| CVE-2026-106071 | 低 | 权限模型经通配符查找,过度授予文件系统权限 | 仅 26 |
| CVE-2026-106073 | 低 | 用 fs.realpathSync 绕过权限模型 | 26、24、22 |
最该盯紧的是 Brotli 漏洞。任何解压外部 Brotli 数据的服务,都是在把攻击者可控的输入交给这个解码器。接收压缩请求体的 API 是这样,解包上游响应的代理也是。另外两个高危漏洞涉及 TLS 主机名校验,对按 IP 地址、或按用户提供的名称去调用其他服务的代码影响最大。还有一个高危漏洞会在 NUL 字符处截断 DNS 名称。
怎么升级,要看 Node.js 是怎么装到机器上的。Docker 镜像要改基础标签,比如从 node:24 换成 24.22.1 或更新版本的标签,再重新构建。用 nvm 管理的主机,执行 nvm install 24,然后重启服务。发行版软件包会落后于上游,所以先确认你的软件源已经发布了修复后的构建,别想当然地以为一次常规的 apt upgrade 就包含了它。
有一个中危漏洞容易被漏掉。如果你构建 Node.js 单可执行应用(SEA)或启动快照,crypto.randomUUID() 和 randomInt() 可能给每个进程返回相同的值,因为它们的熵缓存被存进了快照。用修复后的版本重新构建这些产物,再到每台主机上确认运行时版本:
check-node.sh
node -v # 26.12.1、24.22.1、22.23.4 或更新版本
docker run --rm my-app:latest node -v # 你发布的每个镜像里的版本eMudhra:八个中间 CA 私钥泄露
eMudhra 有八个中间 CA 证书,全都链到 emSign ECC Root CA - G3 根证书。它们的私钥已经泄露,CA 已将其吊销。这是 certifi 安全公告和对应的 uv 公告给出的说法。拿到其中任何一把私钥,攻击者就能为任意主机名签发证书。如果再占据通信路径上的位置,比如身处一个恶意网络,或者劫持了一条路由,就能读取或篡改信任该根证书的客户端发出的 TLS 流量。
四天之内,修复落到了四个地方。GitHub 把 certifi 和 uv 两份公告都评为严重级别,CVSS v4.0 评分 9.1。
- Python 的 certifi 是
requests、urllib3和pip背后的 CA 证书包。它在 2026.10.18 里移除了所有 emSign 根证书,又在 2026.10.19 里恢复了未受影响的那些。请升级到 2026.10.19 或更新版本,并重新构建内置了 certifi 的容器镜像。 - uv 在 0.13.4 里去掉了这个根证书,跟进的是
webpki-root-certs1.0.10。 - Node.js 的安全公告列出了一项
ca-cert依赖更新,针对"eMudhra Intermediate CA Compromise",三条受支持的版本线都有。 - Go 1.27.3 和 1.26.10 让
crypto/x509丢弃任何经过某家证书颁发机构"一小批中间证书"的证书链,编号 CVE-2026-111943。Go 的 issue 没有点名这家 CA。它是 10 月 19 日提交的,正好在 certifi 撤下 emSign 根证书的第二天,但 Go 没有说两者有关联。
每个 Python 虚拟环境和容器镜像都带着自己的一份 certifi。系统 Python 查出来没问题,说明不了每个项目 venv 里那份的情况。在那里也跑一遍版本检查,或者用更新后的锁文件重建环境。
想知道你调用的网站或者你自己的网站,出示的证书链是否经过 eMudhra,就看它发来的每张证书的签发者。列表里出现 emSign 或 eMudhra 的名字,就值得细查:
check-chain.sh
openssl s_client -connect example.com:443 -servername example.com -showcerts </dev/null 2>/dev/null | grep -E '^ *i:'我们没能证实的是操作系统和浏览器的信任库做了什么调整。这些厂商会各自发布根证书计划的更新,我们读过的来源里一份也没有,所以请看看你所用发行版的 ca-certificates 软件包这周有没有更新。
check-trust.sh
python3 -m pip show certifi | grep -i '^version' # 2026.10.19 或更新版本
uv --version # 0.13.4 或更新版本
node -v # 26.12.1、24.22.1、22.23.4 或更新版本
go version # go1.27.3、go1.26.10 或更新版本NGINX:一周前就修了的五个 CVE
NGINX 1.31.7 和 1.30.6 于 10 月 14 日发布,修复了以下漏洞:
- CVE-2026-15176:
alias和rewrite同时使用时的缓冲区溢出。 - CVE-2026-93479:计算含变量的字符串表达式时的缓冲区溢出。
- CVE-2026-95101:HTTP/3 中的请求体注入。
- CVE-2026-97629:轮换 TLS 会话票据密钥时的会话伪造。
- CVE-2026-97205:
ngx_http_ssi_module配合 AIO 时的释放后使用。
这五个漏洞大多需要开启特定功能,所以暴露程度看你的配置。把配置导出来,找相关的指令:
check-nginx.sh
nginx -v # 1.31.7、1.30.6 或更新版本
sudo nginx -T 2>/dev/null | grep -nE 'listen .*quic|http3|ssi +on|aio|ssl_session_ticket_key|ssl_session_cache|alias'匹配到了不等于有风险。没匹配到也不代表可以不更新,因为发布说明没有把字符串表达式溢出和任何一条指令绑在一起。票据密钥那条说明则完全没提到指令。从 1.23.2 起,只要 ssl_session_cache 用的是共享内存,NGINX 就会自己轮换票据密钥,所以搜索里也加上了这一项。更新的 1.31.8 主线版没有列出新的安全修复,所以最低要到 1.31.7 或 1.30.6。如果 NGINX 后面接的是 PHP-FPM 进程池,就把这次更新和 PHP 的放在一起做,机器只用重启一次。重启前先运行 sudo nginx -t 检查配置错误,因为启动失败的话,网站会直接停摆,而不是继续跑旧版本。发行版打包的 NGINX 常常落后于发布说明,所以在 Debian、Ubuntu 或 RHEL 上,要拿软件包的更新日志对照上面的 CVE 列表。nginx.org 提供的软件包则直接跟随上游发布。
Go:修了一个 CVE,还有一个没解决
Go 这次修的是信任问题,不是内存问题。10 月 20 日打标签的 Go 1.27.3 和 1.26.10 修改了 Verify,让它丢弃任何经过被屏蔽中间证书的证书链。Go 团队把这个 issue 标为紧急,建议立即升级。
升级工具链,对已经构建好的程序不起任何作用。Go 会把标准库编译进每个二进制文件,所以每个服务、命令行工具和容器镜像都要用新工具链重新构建,再重新部署。二进制文件自己就能告诉你它是用哪个工具链构建的,批量排查一批机器因此很方便:
check-go-binaries.sh
go version ./my-service # 输出构建该二进制文件所用的 Go 版本
go version -m ./my-service | head -n 3 # 同上,另外输出模块路径显示的工具链只要比修复版本旧,就仍然信任那批被屏蔽的中间证书。以二进制形式安装的第三方 Go 工具,比如命令行工具和 exporter,得等厂商发布重新构建的版本。
Go 还有一个 issue 没有解决,编号 CVE-2026-97044。它晚一天提交,报告称 x/net/idna 要到 Punycode 转换之后才做长度检查,所以 HTTP 客户端解析一个超长的无效主机名时,可能耗掉过多 CPU。这个 issue 已经公开,我们查看时还没有修复版本。
GitLab:面向自管实例的安全补丁
GitLab 在 10 月 20 日打出了 19.5.1、19.4.3 和 19.3.6 标签,同时打出的还有 19.2.9、19.1.9、19.0.10 和 18.11.13,这几个我们没有查看。19.5.1 更新日志列出了 14 项安全修改,其中包括:
- 转义 LDAP 邮箱过滤值,防止认证绕过。
- 在所有添加成员的路径上强制执行 SAML 和 LDAP 成员锁定。
- 对所有类型的 ref 校验推送检查。
- 按规范大小写剥离 Workhorse 的敏感头部。
- 用配置的实例 URL 生成 OAuth 发现端点的 URL。
- 按项目筛选时,项目漏洞读取保持在限定范围内。
这六项里,SAML 和 LDAP 成员锁定、推送检查和漏洞读取这三项只适用于企业版(Enterprise Edition)。
X 上那条帖子说是 12 个 CVE。CVE 编号应该写在 GitLab 的发布博文里,但我们没能打开它,所以这个数字暂且算未证实,排期升级前请先读一下那篇博文。同一条次版本线内升级,比如从 19.4.2 到 19.4.3,就是一次普通的软件包更新。一口气跨好几个次版本,可能要按 GitLab 文档里的升级路径在中间版本停靠,这一点要在维护窗口之前规划好,别等到窗口里再想。查看 Omnibus 实例当前运行的版本:
check-gitlab.sh
sudo gitlab-rake gitlab:env:info | grep -A2 'GitLab information' # 19.5.1、19.4.3、19.3.6 或更新版本Mindber 相关阅读
- PHP2Shell:怎么检查和修复你的服务器:本周最紧急那项修复的完整指南。
- 厂商陆续发布更多修复时,Mindber 新闻栏目会跟进报道。
- 东盟 AI 合规指南(英文):万一更新来得太晚,马来西亚、新加坡和菲律宾的数据泄露通报规定。
- AI Agent 采购指南:托管你数据的供应商,都该被问到哪些安全和泄露问题。
- Claude Fable 5 暂停服务:Anthropic 为什么只把具备网络攻防能力的 Mythos 5 模型开放给经过审核的防御人员。
- NVIDIA NemoClaw(英文):AI 智能体的基础设施层安全控制。
- 循环工程:AI 智能体如何反复测试一个想法,PHP2Shell 这类由 AI 找到的漏洞,背后就是这种模式。
- 排行榜、发现页和我们的评估方法。
- AI 编程智能体,包括 Claude Code 和 ChatGPT 里的 Codex 智能体,能读取配置文件并标出有风险的指令。在生产环境上只给它们只读权限。
常见问题
除了 PHP2Shell,这些漏洞还有被利用的吗?
在我们读过的来源里没有。Node.js、NGINX、Go、certifi 和 uv 的说明都没有提到在野攻击。GitLab 的发布博文我们没能读到,所以它的情况还不清楚。
装完这些更新,需要重启服务吗?
需要。正在运行的 Node.js 进程和 NGINX 工作进程,在重启前一直跑着旧代码。Go 程序则要重新构建和部署,因为标准库是编译进去的。certifi 更新后只对新启动的 Python 进程生效,所以长期运行的进程也要重启。
为什么一次 Go 更新能解决证书颁发机构的问题?
Go 用自己的 crypto/x509 包校验证书链,新版本让其中的 Verify 丢弃经过被屏蔽中间证书的证书链。Go 程序要用修复后的工具链重新构建,才会用上这项改动。
我用 Node.js 20 或更早版本的应用,能拿到这些修复吗?
不能。Node.js 每次发布安全更新,都把所有已停止支持的版本算作受影响,而这次只修补了上表列出的版本线。请迁移到其中一条,并重新构建所有打包了旧运行时的镜像。
eMudhra 私钥泄露会影响我网站的访客吗?
只有在攻击者处在访客的网络路径上,而且访客的客户端信任受影响的根证书时才会。除非你网站的证书是 eMudhra 签发的,否则它不受影响。对于你能控制的服务器和脚本,更新 certifi、uv、Node.js、Go 和系统的 CA 软件包,就能补上这个缺口。
来源与方法
编辑分析,依据各厂商自己的发布说明和安全公告,均于 2026-10-22 读取。哪家厂商的页面无法访问,文中会写明。请点开链接查看最新情况。
- [1]Node.js 10 个 CVE、严重级别、受影响版本线及修复版本 26.12.1、24.22.1、22.23.4;已停止支持的版本线不修复Node.js:2026 年 10 月安全更新 · 2026-10-21
- [2]NGINX 1.31.7 和 1.30.6 于 10 月 14 日修复五个 CVE;1.31.8 未列出安全修复nginx/nginx GitHub 发布页 · 2026-10-21
- [3]Go crypto/x509 屏蔽一小批中间证书,CVE-2026-111943,列为紧急Go issue #82345 · 2026-10-20
- [4]x/net/idna 的 Punycode 长度检查,CVE-2026-97044,尚未修复Go issue #82374 · 2026-10-20
- [5]GitLab 19.5.1 含 14 项安全修改;19.4.3 和 19.3.6 同日打出标签GitLab v19.5.1-ee 更新日志 · 2026-10-20
- [6]emSign ECC Root CA - G3 下八个 eMudhra 中间证书私钥泄露并被吊销;certifi 2026.10.18 和 2026.10.19GitHub 安全公告 GHSA-6q48-6c7w-9gw2(certifi) · 2026-10-20
- [7]uv 0.13.4 移除 emSign 根证书,跟进 webpki-root-certs 1.0.10GitHub 安全公告 GHSA-hq85-5cpj-mr62(uv) · 2026-10-20
- [8]PHP2Shell 修复版本和暴露范围php.net:安全公告,请立即更新 · 2026-10-21
- [9]针对 Cloudflare 客户的攻击流量Cloudflare 博客 · 2026-10-21
- [10]披露前 MadPot 蜜罐已捕获 PHP2Shell 利用行为(仅引用报告标题,正文未能读取)Amazon 安全博客 · 2026-10-22
- [11]26.x、24.x 和 22.x 针对 eMudhra 中间 CA 泄露的 ca-cert 更新Node.js:2026 年 10 月安全更新 · 2026-10-21
延伸阅读
本文是对公开信息的分析,不是原创安全研究,Mindber 没有测试任何漏洞利用代码或服务器。所有事实已于 2026 年 10 月 22 日对照上述来源核查。事件仍在发展,最新修复版本请以各厂商公告为准。发现错误?告诉我们,我们会在 24 小时内更正。
在 Mindber 学习基础知识
刚接触 AI?这些免费页面讲解了此类文章背后的基础概念。
分享这篇文章
法律声明
本出版物属于基于公开信息的编辑评论,不构成财务、法律、投资或专业建议。文中提及的产品名称、商标和注册商标均归其各自所有者所有;其出现并不代表认可或从属关系。Mindber 的分析反映基于公开信号的编辑判断,并可能随时变更,恕不另行通知。评分不是买入、卖出或持有建议。除非另有书面披露,Mindber 与被评估供应商不存在商业关系。本出版物受马来西亚法律管辖。因本出版物引起或与之相关的任何争议,均应提交马来西亚法院专属管辖。