资讯 PHP 官方修两个高危:TLS 握手失败可打崩整个 PHP-FPM 进程池

2026-09-08 21:02:33

PHP 官方修复两个高危漏洞:TLS 握手可打崩 PHP-FPM 全池,OpenSSL 存在堆损坏

PHP 官方于 2026 年 7 月初发布安全公告,修复两个漏洞:一个可远程触发、直接拖垮 PHP-FPM 整个进程池的拒绝服务漏洞,以及一个出现在 OpenSSL 相关函数中的堆内存损坏问题。这两个漏洞分别被标记为 CVE-2026-12184(CVSS 8.2,高危)和 CVE-2026-14355(CVSS 4.8,中危),目前均未观察到野外主动利用。

背景

两个漏洞都由 PHP 源码安全团队维护的 GitHub Security Advisory 发布。其中 CVE-2026-12184 的公告位于 php/php-src 仓库:

CVE-2026-12184:远程 DoS,PHP-FPM 进程池可被一次 TLS 失败打崩

CVE-2026-12184 是一个可导致整个 PHP-FPM 进程池崩溃的远程拒绝服务漏洞,CVSS 评分 8.2。

触发路径并不复杂:PHP 与远程服务器进行 HTTPS/TLS 握手时,只要握手失败(例如对端返回过期或无效证书),PHP 就会关闭对应的流并将其置为 NULL。问题在于,后续的清理代码仍会在这个已经失效的流上重置对端名称(peer name),导致空指针解引用并触发崩溃。

关键点在于:

  • 无需精心构造恶意载荷,单个远程服务器即可触发;
  • 意外或恶意的 TLS 握手失败都能造成影响,触发门槛极低;
  • PHP-FPM 往往同时服务大量高流量站点,一次崩溃可能让所有 worker 进程同时退出,形成大面积短时不可用。

CVE-2026-14355:openssl_encrypt 输出缓冲区计算错误导致堆损坏

CVE-2026-14355 是 OpenSSL 相关堆内存损坏漏洞,CVSS 4.8。

问题出在 openssl_encrypt 函数对输出缓冲区大小的估算上。函数按照输入长度确定缓冲区大小,但对于带填充的 AES 密钥封装(key-wrap-with-padding)算法,实际写入的数据会比按输入长度计算出的结果多出若干字节。OpenSSL 在写入时超出缓冲区边界,破坏 Zend 堆的元数据,可能造成内存损坏或进程崩溃。

该漏洞只在应用调用这种罕见算法时才会被触发,实际攻击面有限,但仍然属于内存安全问题,运行不受信任输入的应用需要关注。

受影响版本与修复版本对照

两个漏洞各自的版本范围不同,升级时请对照下表:

漏洞影响版本(之前版本均受影响)修复版本
CVE-2026-12184(远程 DoS)PHP 8.3.32 / 8.4.21 / 8.5.68.3.32、8.4.21、8.5.6
CVE-2026-14355(OpenSSL 堆损坏)PHP 8.2.32 / 8.3.32 / 8.4.23 / 8.5.88.2.32、8.3.32、8.4.23、8.5.8

PHP 官方目前没有提供可用的临时缓解方案。对于使用 PHP 8.3~8.5 的环境,管理员应优先修复 CVE-2026-12184,因为远程 DoS 更易被外部触发,实际影响也更直接。

两个漏洞的详细公告请在 GitHub Advisory 页面跟踪:CVE-2026-12184 见 GHSA-7jrw-539f-x6vr,CVE-2026-14355 见 GHSA-mhmq-mmqj-2v39

复制全文 生成海报 PHP 安全 CVE PHP-FPM 漏洞

推荐文章

程序员茄子在线接单