一个不需要登录的请求,就能在服务器上跑代码。PHP 官方这次发的不是常规更新,是紧急补丁。

打开网易新闻 查看精彩图片

修复版本是 PHP 8.5.12、8.4.27、8.3.36 和 8.2.35。PHP 团队的说法很直接:只有升级,才能完整保护一台服务器。

两个漏洞合称 PHP2Shell,位置在 PHP 运行时本身,不在任何应用里。也就是说,站点自己的代码写得再干净,只要 PHP 版本没升,风险照样在。影响范围覆盖到 PHP 5.4 以来的几乎所有版本。

两个漏洞在 CVSS v4.0 评分中都是 9.2,编号为 CVE-2026-109618 和 CVE-2026-109619。PHP 在 10 月 21 日 14:00 UTC 的预定发布时间前后公布了它们,比原计划的 10 月 22 日披露提前了一天——因为细节提前泄露了。

哪些部署最危险

按 PHP 安全公告,所有处理 Web 请求的 PHP 安装都在风险范围内,包括 PHP-FPM、Apache mod_php、php-cgi、FrankenPHP 和 LiteSpeed。

公告单独点名 mod_php 风险最高:已有演示过的利用方式,单个未认证请求会在任何应用代码执行之前触发攻击。PHP-FPM 的表现不同,请求在初始化早期失败时,工作进程会被关掉。

两个漏洞的情况也不完全一样。其中一个,PHP 自己的分析认为 FPM 存在易感性,但没有完整的 FPM 利用被展示出来;另一个已被证明能在 mod_php 和 PHP-FPM 上到达代码执行,不过 FPM 那条路径依赖运行中应用内部的一次操作。

还有一条不需要先拿到代码执行的能力:攻击者可以读取 PHP 工作进程的内存。那块内存里可能有其他请求的密码、认证令牌、API 密钥和证书。研究者在不被自己控制的应用程序上演示了这种读取,说明它和 PHP 之上跑的是什么应用无关。

该装什么、别装错什么

要更新的是处理 Web 请求的 PHP 运行时,然后重启 Apache、PHP-FPM 以及所有长期运行的 PHP 工作进程。

更新 WordPress 或 Laravel 这类应用,并不会更新底下的 PHP 运行时——那来自服务器软件包、主机商或容器镜像。

PHP 8.1 及更早版本已不再从 PHP 项目获得更新,PHP 8.2 将在 2026 年 12 月 31 日停止支持。针对更老的分支,PHP 安全团队发布了 PHP 7.4、8.0、8.1 的源码回溯补丁,供自行编译或等待厂商的人使用。

Linux 发行版和长期支持厂商提前拿到了补丁,所以发行版软件包可能顶着旧版本号却已含修复。按 Debian 的建议,查软件包变更日志里的 CVE 编号,别只看版本字符串。

暂时升不了怎么办

只有升级才是完整修复。以下措施只降低特定攻击路径的暴露面,不能让服务器变安全。

  • 针对 CVE-2026-109618:设置 memory_limit=-1,让应用无法覆盖它;把 post_max_size 保持得低一些;在 Web 服务器或代理层强制请求大小限制。不要用 RLIMIT_AS 或 RLIMIT_DATA 替代,PHP 警告它们可能触发同一条脆弱路径。
  • 针对 CVE-2026-109619:设置 session.upload_progress.enabled=0 并重启每个工作进程;在 PHP 8.5 上还要设置 fatal_error_backtraces=0。关掉会话上传进度能挡住已确认的会话路径,但挡不住其他变体,除了升级,没有任何配置改动能完整缓解这个漏洞。

那个设置正是补丁发布前流传的临时方案,发布信息确认它从来不是完整修复。会话上传进度默认开启,能在 PHP 完成请求初始化之前触达会话处理,这就是它参与 CVE-2026-109619 一条已确认攻击路径的原因,也是它对 CVE-2026-109618 毫无作用的原因。

PHP 核心开发者 Gina Peter Banyard 在发布前写道:“我唯一能说的是,唯一的缓解办法就是打补丁/升级 PHP。遗憾的是我知道得太多了。”当时有人提出那个设置也许够用。

升级之后还要复查内存设置。修复引入了一个新的硬内存上限,触顶会终止进程并让关闭处理器不再运行,所以要对照应用的实际需要检查 memory_limit 和 post_max_size。

如果已经打了补丁但怀疑此前被入侵,研究者建议留意:异常的多部分请求之后跟着内存上限错误或反复出现的 HTTP 500 响应、异常大的 PHPSESSID 响应 Cookie、以及无法解释的 PHP 工作进程重启。

已经在被攻击了吗

补丁发布前,Cloudflare 表示已看到早期利用尝试。Cloudflare CTO Dane Knecht 说:“我们看到早期攻击正在出现,并随着新向量出现更新缓解措施。”他把 Cloudflare 部署的防火墙规则称为权宜之计,并敦促管理员打补丁。

目前没有来源确认有成功入侵。复现了 CVE-2026-109618 的 watchTowr 报告,截至 10 月 21 日 11:26 UTC 未发现野外利用;当时两个漏洞都不在 CISA 的已知被利用漏洞目录中。

一些机构是预防性下线,不是遭遇了入侵。BambooHR 在美国、加拿大和爱尔兰下线了服务,警告薪资发放会中断,并表示尚没有恢复时间。

在荷兰,据广播机构 NOS 报道,MijnOverheid、DigiD、议会下院网站、国家网络安全中心和多个教育系统下线;该中心表示未发现漏洞被滥用,但敦促所有人打补丁。

漏洞是怎么提前曝光的

一次泄露把发布拉到了前面。据 The Hacker News 报道,10 月 20 日 Hacker News 上一条帖子称两个 PHP 远程代码执行漏洞将在 10 月 22 日披露,并给出了两个 CVE 编号,依据不过是一条可信线报。

PHP 当晚发布了预告,把发布提前到 10 月 21 日。泄露信息里说的 CVSS 10.0 不是 PHP 的评分,PHP 给两个漏洞都打 9.2。

漏洞由 Wiz Research 和 OpenAI 的 Codex Security 团队发现,并与 PHP 安全团队、谷歌 Gemini 团队合作修复。底层代码在 PHP 里已经存在了十多年。

研究者称,AI 模型帮助把这些长期存在的缺陷变成了可用的利用程序,让一名研究者在大约一周内完成了他们所说原本需要一个团队数月才能做到的事。Wiz 把漏洞的谱系追溯到 2004 年的 PHP 研究,并表示了解目标的历史仍然重要,当前模型并不能可靠地从二十年前的冷僻原语自行起步。