PHP 官方 10 月 21 日发布安全公告,标题就是「Critical remote code execution vulnerabilities, update now」:PHP 8.5.12、8.4.27、8.3.36 和 8.2.35 修复了两个严重漏洞 CVE-2026-109618(GHSA-w8hw-w9fx-j79w)和 CVE-2026-109619(GHSA-6wmf-4rv5-p3rp)。两个在 GitHub 公告里都是 Critical、CVSS v4 评分 9.2,都可能让未经认证的攻击者远程执行代码。官方的说法是所有 PHP 用户都应立即更新。这两个漏洞也被叫作 php2shell。

谁受影响

  • 公告写的是所有处理 Web 请求的 PHP 安装,包括 PHP-FPM、Apache 的 mod_php、php-cgi、FrankenPHP 和 LiteSpeed。官方认为 mod_php 风险最高,已经演示过一个未认证的请求能在任何应用代码运行之前触发攻击。
  • CVE-2026-109618:内存耗尽(OOM)处理可能在内部请求数据只初始化了一部分时打断 PHP,随后的请求清理可能把这些无效数据当成有效数据来用。
  • CVE-2026-109619:属于某个请求的内部状态,在它背后的内存被释放后仍然残留,同一个 worker 处理的下一个请求可能在正常初始化之前就用上它。
  • 问题出在 PHP 运行时本身,不在 WordPress 或某个插件。WordPress 官方同日发文说明,WordPress 本身不需要、也不打算为此发布更新,要升级的是 PHP。在 WordPress 后台「工具 → 站点健康 → 信息 → 服务器」里可以看到当前的 PHP 版本。

怎么升级

  • 先用 php -v 看版本。用官方源码自己编译的,升级到 8.5.12、8.4.27、8.3.36 或 8.2.35。
  • 用系统软件包的:Ubuntu 10 月 21 日发布了 USN-8948-1,22.04 的修复包是 php8.1 8.1.2-1ubuntu2.28,24.04 是 php8.3 8.3.6-0ubuntu0.24.04.13;Debian 13 是 php8.4 8.4.27-1~deb13u1(DSA-6574-1),Debian 12 是 php8.2 8.2.35-1~deb12u1(DLA-4848-1)。执行 sudo apt update && sudo apt upgrade 之后,要重启 PHP-FPM 或 Apache(例如 sudo systemctl restart php8.3-fpm),已经在跑的 worker 不会自己换成新代码。
  • PHP 8.1 及更早的版本,PHP 官方已经不再更新;发行版自己回补修复的(比如上面 Ubuntu 22.04 的 8.1),照常升级系统软件包即可。考虑到严重程度,官方这次还为 7.4、8.0、8.1 提供了最小化的源码补丁,给自己编译的人用。
  • 宝塔这类面板装的 PHP、Docker 镜像里的 PHP,都不走系统的 apt:前者在面板里检查有没有新版本,后者拉取更新后的镜像、重建容器。参见用宝塔面板可视化管理 VPS和 VPS 上的 Docker 入门。

暂时升不了:官方给的临时措施

官方强调只有升级才是完整的解决办法,下面这些措施只能减少特定的攻击路径,并不能让系统变得安全:

  • 针对 CVE-2026-109618:设置 memory_limit=-1,最好用应用改不掉的方式(例如 FPM 池或 Apache 配置里的 php_admin_value);同时调低 post_max_size,不需要上传文件的应用设为 8M,需要上传的设为 32M,并让 upload_max_filesize 小于它。
  • 针对 CVE-2026-109619:设置 session.upload_progress.enabled=0 并重启所有 worker,要写在 php.ini、FPM 池或服务器配置里,不能靠 ini_set() 或 FPM 的 .user.ini 文件;PHP 8.5 还要设置 fatal_error_backtraces=0。
  • 10 月 23 日官方又发了一条补充说明:即使已经升到 8.5.12,也建议在下一个常规版本发布之前保持 session.upload_progress.enabled=0,因为还有一个触发条件很少见的相关问题 CVE-2026-115560,要到下个版本才修。

前面有 CDN 也要升级

Cloudflare 10 月 21 日表示,这两个漏洞在正式发布前就已泄露,它观察到了针对客户的攻击流量;从 10 月 21 日 03:02(UTC)起,用它免费版或付费版 WAF 的网站默认受到防护。但 Cloudflare 自己也说,有 WAF 也要给 PHP 打补丁。而且 WAF 只能过滤经过它的流量:源站 IP 如果能被直接访问,攻击者可以绕过 CDN。升级完成后,如果网站之前一直暴露在公网,建议按 VPS 被入侵怎么办检查一遍有没有异常进程和陌生文件。WordPress 站长还应确认 9 月的 WordPress 核心漏洞已经修复,用 nginx 的顺便看看 nginx 10 月 14 日修的 5 个漏洞。