🚨 补丁已发布,立即升级:PHP 官方已于北京时间 10 月 21 日 22:00 如约发布安全更新,修复两处可被未认证攻击者远程执行代码的核心漏洞。官方明确表态:没有任何完整的临时缓解手段,升级是唯一安全的选择。如果你的服务器对外提供 PHP 服务,请立即处理。
事件回顾
PHP 官方安全团队于 10 月 20 日预告(Upcoming Critical PHP Security Release),并于 10 月 21 日 14:00 UTC(北京时间 22:00) 准时发布了正式安全公告(Security advisory)。
本次修复的是两处位于 PHP 核心解释器的远程代码执行漏洞,在 CVSS v4.0 评分体系下均达到 9.2 分(Critical 级别):
| 漏洞编号 | 类型 | 技术成因 |
|---|---|---|
| CVE-2026-109618 | RCE(OOM 内存破坏) | 内存耗尽(OOM)处理可能中断 PHP 执行,此时内部请求数据仅部分初始化,请求清理阶段可能把无效数据当作有效数据处理 |
| CVE-2026-109619 | RCE(残留全局状态) | 请求持有的内部状态在其底层内存被释放后仍可存活,同一 worker 进程处理的后续请求可能在正常初始化重置之前使用这些残留状态 |
详细技术分析见官方 Advisory:GHSA-w8hw-w9fx-j79w、GHSA-6wmf-4rv5-p3rp。
谁处于风险中:所有处理 Web 请求的 PHP 安装,包括 PHP-FPM、Apache mod_php、php-cgi、FrankenPHP、LiteSpeed。官方认为 mod_php 风险最高——已有演示证明:一条未认证请求即可在任何应用代码运行之前触发攻击。这意味着 Laravel、Symfony、ThinkPHP 等框架的鉴权、WAF 规则、中间件都无法拦截。
修复版本
PHP 官方支持的分支(请立即升级到以下版本):
| 分支 | 修复版本 | 备注 |
|---|---|---|
| PHP 8.5 | 8.5.12 | 当前最新稳定分支 |
| PHP 8.4 | 8.4.27 | |
| PHP 8.3 | 8.3.36 | |
| PHP 8.2 | 8.2.35 | ⚠️ PHP 8.2 将于 2026 年 12 月 31 日 EOL,届时不再有安全修复,请规划升级 |
停更(EOL)版本的修复渠道:
PHP 官方已停止维护 PHP 8.1 及更早版本,但鉴于漏洞严重性,官方罕见地提供了最小化源码 Backport,供自行编译或无法使用 LTS 供应商的用户使用:
同时,宝塔面板已第一时间打包了修复版本,使用宝塔的用户可直接在面板中升级:
| 分支 | 宝塔修复版本 |
|---|---|
| PHP 7.4 | 7.4.34 |
| PHP 8.0 | 8.0.27 |
| PHP 8.1 | 8.1.35 |
此外,各 Linux 发行版与 LTS 供应商已提前拿到补丁,请检查你的发行版仓库获取更新包(Debian/Ubuntu/CentOS 等通过 backport 修复 8.1 及更早版本的软件包)。
如何升级
- 查清当前版本:
php -v,或在站点根目录放置<?php phpinfo();页面查看(用完删除); - 升级到修复版本:
- 官方分支用户:从官方下载页获取新版源码重新编译,或等待发行版推送更新包;
- 宝塔用户:面板 → 软件商店 → 对应 PHP 版本 → 升级到上表中的修复版本;
- Docker 用户:拉取已更新的官方镜像重建容器;
- 升级后重启 PHP-FPM / 重载 Web 服务,并验证
php -v输出的版本号已更新; - 不要只升级不重启——残留的旧 worker 进程仍携带漏洞代码。
无法立即升级?官方缓解措施(仅降低风险,不能替代升级)
官方明确说明:以下措施只能封堵特定攻击路径,不能让安装变得安全。请务必尽快完成升级。
针对 CVE-2026-109618(OOM 内存破坏):
- 设置
memory_limit=-1(最好用 FPM pool 的php_admin_value或 Apache 配置固化,防止应用覆盖),并确认没有其他 pool/目录/应用配置重新设置了有限上限。这移除了”可控的 PHP 内存上限失败”路径,但底层分配失败仍可能触达漏洞路径; - 调低
post_max_size:无需文件上传的应用设为8M;需要上传的设为32M,并保持upload_max_filesize小于post_max_size。同时在 Web 服务器/代理层限制解码后的请求大小、输入字段数、multipart 分片数、Header 数量与嵌套深度——这些限制必须覆盖没有有效Content-Length的请求; - 用容器或 cgroup 限额作为可用性边界(最好只 kill 受影响的 worker)。不要用
RLIMIT_AS/RLIMIT_DATA替代,它们本身会引发漏洞所需的分配失败。
针对 CVE-2026-109619(残留全局状态):
- 设置
session.upload_progress.enabled=0并重启所有 worker。必须在请求解析之前生效(php.ini、FPM pool 或服务器配置),不要依赖ini_set()或 FPM 的.user_ini。这只能封堵已确认的 session 路径,其他变体仍然存在; - PHP 8.5 用户可设
fatal_error_backtraces=0并重启所有 worker(仅封堵已确认的 fatal backtrace 路径); - 移除那些在初始化之前就产生诊断信息的无效/过时的按请求配置。用
error_reporting、display_errors或@隐藏报错是没有用的; - 修复攻击者可触发的 Fatal Error 和执行超时,包括回调函数、上传/导入处理和清理阶段的失败。
排查是否已被利用
如果补丁发布前你的 PHP 服务长期暴露在公网(尤其是 mod_php),建议排查:
- 访问日志中的异常 POST 请求、异常 multipart 请求、无
Content-Length的畸形请求; - 异常的 PHP-FPM / Apache worker 崩溃与重启记录(OOM 相关);
- 服务器上异常的新进程、异常的计划任务、陌生的 PHP 文件(webshell)。
参考链接
- PHP 官方安全公告(2026-10-21):Security advisory: Critical remote code execution vulnerabilities, update now
- 漏洞详情:GHSA-w8hw-w9fx-j79w(CVE-2026-109618) / GHSA-6wmf-4rv5-p3rp(CVE-2026-109619)
- 预告公告(2026-10-20):Upcoming Critical PHP Security Release
- PHP 官方下载页:php.net/downloads.php
- EOL 分支 Backport:PHP 7.4 / PHP 8.0 / PHP 8.1
本文首发于补丁发布前的预告阶段,已于 2026-10-22 更新:补充两处漏洞的技术成因、官方修复版本(8.5.12 / 8.4.27 / 8.3.36 / 8.2.35)、EOL 分支官方 Backport、宝塔修复版本(7.4.34 / 8.0.27 / 8.1.35)及官方临时缓解措施。