黑色星期三:2026 年 10 月 21 日,五起安全事件同一天爆发

作者 mcx 日期 2026-10-22
黑色星期三:2026 年 10 月 21 日,五起安全事件同一天爆发

2026 年 10 月 21 日,五起独立的高危安全事件在 24 小时内集中披露:一个国家级 CA 的私钥弱到可以暴力猜出、PHP 全版本被曝远程代码执行、Node.js 与 Go 各自修复证书校验缺陷、LiteLLM 发布被投毒的版本。

本文逐条核实了公开信息源,包括官方公告、CISA/ENISA/CERT-EU 的联合声明、Cloudflare 与 Sansec 的技术分析。传闻与事实有出入的地方,文中会指出。

一、eMudhra:弱到可以猜的 CA 私钥

印度证书机构 eMudhra 的八张中间证书私钥被判定为可破解级别。

关键点:这些私钥的熵值远低于应有的 384 位。有分析指出其中一张的私钥整数小到可以用单个数字概括,这也是传闻里”用 4 当私钥”的由来。实际披露的八张证书里,至少有一张的密钥强度属于可暴力枚举的范围。

影响范围:八张中间证书分别挂在 emSign Root TLS CA - G3(六张)与 emSign Root CS CA - G3(两张)之下,覆盖 DV、OV、EV 三类签发。持有私钥的攻击者可以为任意域名伪造证书,中间人劫持 HTTPS 流量。

时间线:

时间 事件
10 月 18 日 CCADB 吊销日志标记八张证书为 cACompromise
10 月 19 日 17:00 UTC Cloudflare 确认私钥泄露
10 月 20 日 Cloudflare、Ars Technica 等公开分析
10 月 21 日 各语言运行时与浏览器跟进吊销

二、PHP2Shell:5.4 之后全版本 RCE

CVE-2026-109618 与 CVE-2026-109619,均评为 CVSS v4.0 9.2。

影响范围:所有运行 PHP 5.4 及以后版本的 Web 服务器。缺陷在 PHP 引擎本身,因此即使应用代码是干净的,Magento、Shopware、WooCommerce 等也会被波及。

Sansec 确认的未认证 RCE 目标包括:

1
2
3
4
Magento 2.4.9      WordPress 7.1.2      Drupal 11.4.3
Joomla 6.1.4 MediaWiki 1.46.2 Roundcube 1.7.4
phpMyAdmin 5.2.3 Nextcloud 35.0.1 Laravel 13.11
Symfony 8.1 WHMCS

漏洞工具 PHP2Shell 把两个缺陷组合成一个不需要登录的攻击链。

修复状态:

  • PHP 官方只维护 8.2 及以上。8.1 及更旧版本没有官方补丁,需要发行版回填或升级。
  • 10 月 21 日发布当天,Remi 仓库(RHEL 系常用)未同步更新。
  • Cloudflare 在 07:43 UTC 就观测到攻击尝试,早于 14:00 UTC 的正式发布。

临时缓解:所有已知触发点都是 multipart/form-data 请求,可在 Web 服务器层直接拒绝这类请求。这是权宜之计,不是修复。

关于”上游补丁被入侵”的传闻:目前没有公开证据支持。能确认的是 Remi 仓库当天未发布更新,以及官方不再支持旧版本。建议通过 php.net 官网或发行版官方源获取补丁,不要从第三方镜像拉取。


三、Node.js Brotli 解码器越界写入

CVE-2026-111497,高风险。

Brotli 解压过程中的越界写入,可导致远程代码执行。攻击面是任何解压攻击者可控数据的 Node.js 进程,例如接收压缩请求体的 HTTP 服务器。

修复版本:

1
2
3
Node.js 22.23.4
Node.js 24.22.1
Node.js 26.12.1

同批发布的还有九个 CVE,其中三个高危与 TLS 证书主机名校验相关(Unicode 全角数字绕过、松解析 IP 绕过、非规范 IPv4 主机名认证绕过)。这批修复也同步更新了 eMudhra 相关证书的信任处理。


四、Go 的证书吊销:硬编码黑名单

CVE-2026-111943,影响 crypto/x509 的 Certificate.Verify。

问题:Go 在多数平台使用系统根证书,但在某些场景下系统信任库不会自动更新,导致已被吊销的中间证书仍被接受。

修复方式:在标准库里加了一张硬编码的 SPKI 哈希表。命中八张 eMudhra 中间证书中的任意一张,Verify 直接返回错误。

1
2
3
4
5
6
// src/crypto/x509/verify.go
var distrustedSPKIHashes = map[string]struct{}{
"ebed6475c2c2d80fcb199f3fe8dd6e6b3ce60b77eb15d4e42c3dec0c6f5b5105": {},
"49dd353dc2b919a3770645117d0e60c16115e7d1bc259eefe734b00ea434fe5f": {},
// 另外六条
}

两个设计细节值得注意:

  • 按 SPKI 哈希匹配,所以即使重新签发、换了序列号,只要沿用同一密钥对仍会被拒绝。
  • 遍历整条链而非只看叶子证书。

对 Darwin 和 Windows,Go 会在操作系统已经构建出”有效”证书链之后,再把它整条丢弃。

修复版本:go1.27.3 与 go1.26.10。

关于”不执行实时证书吊销”:这个说法需要更精确。Go 长期不做 OCSP 或 CRL 实时查询,这是因为实时吊销查询本身有隐私与可用性问题,业界普遍如此。本次的问题是这个策略在 eMudhra 这种极端场景下失效了,于是用黑名单兜底。黑名单确实不优雅,但它针对的是八张已知的证书,不是启发式规则。


五、LiteLLM 供应链投毒

litellm==1.107.0 被植入恶意代码,通过 PyPI、Docker Hub、GHCR 三个渠道分发。

时间窗口:

渠道 受影响版本 时间
PyPI 1.107.0(全部七个 wheel) 11:39 – 13:23 UTC
Docker Hub v1.107.0 / latest / main-latest / main-stable 11:46 – 14:20 UTC
GHCR 同上 11:46 – 13:51 UTC

恶意行为:窃取凭据,并加载远程代码执行工具(每小时轮询)。

关键细节:GitHub 上 v1.107.0 的源码 tag 本身是干净的,恶意产物是从攻击者控制的仓库构建的。也就是说,只对源码做审计无法发现这次投毒。

影响判定:在 11:39 到 13:23 UTC 之间通过 pip 安装未锁定版本、或拉取上述 Docker 镜像的部署受影响。企业私有发行版不受影响。AISLE 在包发布 3 分钟后即检出。

LiteLLM 在 20:30 UTC 通报已定位攻击链,需要攻破多个独立安全控制才能实施。


六、几条流传的说法与核实结果

说法 核实结果
印度 CA 用”4”当私钥 部分属实。八张证书私钥熵值严重不足,其中至少一张小到可用单个数字概括
PHP 5.4 起全版本高危 属实。CVE-2026-109618/109619,CVSS 9.2,未认证 RCE
PHP 旧版本没有补丁 属实。官方仅维护 8.2+,8.1 及更旧需靠发行版回填
Node.js Brotli 越界写入可 RCE 属实。CVE-2026-111497
Go 用硬编码黑名单修证书校验 属实。八条 SPKI 哈希,go1.26.10 / go1.27.3
LiteLLM 维护者账号被攻破 属实。1.107.0 在三个渠道被投毒,约两小时窗口
PHP 上游补丁本身被入侵 未获证实。目前可确认的是 Remi 仓库当天未发布更新
早苗发文建议升级 PHP 未能核实该推文,账号与内容均无法确认

七、需要立刻做的事

PHP 服务器

1
2
3
php -v                       # 确认版本
# 8.2 及以上:升级到官方最新补丁版
# 8.1 及更旧:升级到受支持版本,或让发行版回填

无法立即修复的,先在 nginx/Apache 层拒绝 multipart/form-data。

Node.js

1
2
node -v
# 22.23.4 / 24.22.1 / 26.12.1 或更新

Go

1
2
3
go version
# go1.27.3 / go1.26.10 或更新
go get golang.org/x/crypto@latest

LiteLLM

1
2
pip show litellm             # 若为 1.107.0 立即处理
pip install litellm==<1.107.0 之前的版本>

如果曾在上述时间窗口内运行过 1.107.0,需要轮换该环境中所有凭据。

通用

  • 检查系统与语言的根证书信任库是否已更新
  • 浏览器与操作系统打上 eMudhra 相关吊销更新
  • 对锁定依赖版本这件事,重新评估”不锁”的风险

写在最后

这五件事有一个共同点:问题都不在使用者的代码里。

CA 的问题在信任链的起点,PHP 的问题在引擎,Node.js 和 Go 的问题在标准库,LiteLLM 的问题在构建流程。任何一层出问题,上层写再好的代码也没用。

也正因如此,这类事件的应对方式是固定的:尽早升级、锁定依赖、监控上游。没有捷径。


参考

  • Cloudflare Blog: 8 eMudhra certificates are compromised
  • Sansec: PHP2Shell – CVE-2026-109618, CVE-2026-109619
  • CISA / ENISA / CERT-EU: Joint statement on critical PHP vulnerabilities
  • Node.js: October 2026 Security Releases
  • Go: GO-2026-6809 / CVE-2026-111943
  • LiteLLM: Contained – Oct 21, 2026 release v1.107.0 Compromised
  • Datadog Security Labs / StepSecurity / AISLE: LiteLLM supply chain analyses