PHP 安全更新修复了两个严重远程代码执行(RCE)漏洞
PHP 团队刚刚发布了 PHP 8.5.12、8.4.27、8.3.36 和 8.2.35 版本,旨在修复两个严重漏洞;这些漏洞可能导致未经身份验证的远程代码执行。官方强烈建议立即进行更新,并指出目前尚无彻底的缓解措施。
所有用于处理 Web 请求的 PHP 环境均受此影响,包括 PHP-FPM、使用 mod_php 的 Apache、php-cgi、FrankenPHP 以及 LiteSpeed。鉴于大多数 Laravel 应用程序在生产环境中的运行方式均涵盖在内,请务必在今天就安排服务器更新。
注:此为突发新闻,我们将随新信息的披露持续进行更新。
漏洞详情
PHP 团队认为 mod_php 相关的风险最高;目前已存在可利用的攻击方式,攻击者无需身份验证即可发起请求,并在任何应用程序代码执行之前触发漏洞。以下是这两个 CVE 漏洞:
- 通过内存耗尽(OOM)导致的损坏引发远程代码执行(RCE),CVE-2026-109618 (GHSA-w8hw-w9fx-j79w):在内存耗尽处理过程中,PHP 的执行流程可能被中断,此时内部请求数据仅完成了部分初始化。随后的请求清理操作可能会将这些无效数据误判为有效数据。
- 通过陈旧的全局状态引发远程代码执行(RCE),CVE-2026-109619 (GHSA-6wmf-4rv5-p3rp):属于某个请求的内部状态,在相关内存被释放后仍可能残留。在同一个工作进程(worker)上后续发起的请求,可能会在正常初始化流程将其重置之前,使用这些陈旧的状态数据。
如何更新
请更新至 PHP 8.5.12、8.4.27、8.3.36 或 8.2.35 版本。你可以在 PHP 官方下载页面获取源代码包及 Windows 版本安装包。
Linux 发行版维护者和长期支持(LTS)版本提供商已提前收到了补丁,请向所使用的发行版或服务提供商查询是否有更新的软件包。
PHP 8.1 及更早版本已不再获得 PHP 项目官方的更新支持。部分发行版或 LTS 提供商可能会自行回溯(backport)修复补丁,建议向相关方确认,或升级至仍受支持的版本。
如果您使用的是由志愿者维护的 rpms.remirepo.net 软件仓库,目前暂无更新。PHP 团队建议您改用发行版官方提供的软件包,或通过源代码自行编译安装。
鉴于问题的严重性,PHP 安全团队还针对 PHP 7.4、PHP 8.0 和 PHP 8.1 版本发布了最小化的源代码修复补丁,供那些无法从 LTS 提供商处获取更新且选择自行编译安装的用户使用。
如果你还无法立即更新
更新是唯一完整的修复。该通报列出了可减少特定攻击路径暴露的设置,但 PHP 团队明确表示它们并不能确保安装安全。
对于 CVE-2026-109618(OOM 损坏):
- 在应用程序无法覆盖它的地方设置
memory_limit=-1,例如 FPM 池或 Apache 配置中的php_admin_value。检查是否没有池、目录或应用程序设置设置了有限限制。 - 降低
post_max_size。建议将没有文件上传的应用的post_max_size设置为8M,将需要上传文件的应用设置为32M。保持upload_max_filesize低于post_max_size。 - 在 Web 服务器或代理上对解码请求大小、输入字段计数、多部分计数、标头计数和嵌套深度强制执行请求限制。这些限制还需要涵盖没有可用
Content-Length的请求。 - 使用容器或 cgroup 内存限制,最好是仅杀死受影响的工作线程。不要改用 RLIMIT_AS 或 RLIMIT_DATA,因为它们可能会导致易受攻击的分配失败。
对于 CVE-2026-109619(过时的全局状态):
在 php.ini、FPM 池或服务器配置中设置 session.upload_progress.enabled=0,然后重新启动每个工作线程。 ini_set() 和 FPM .user.ini 文件应用得不够早。
- 在 PHP 8.5 上,设置
fatal_error_backtraces=0并重新启动每个工作线程。 - 删除在初始化之前发出诊断的无效或已弃用的每个请求设置。使用
error_reporting、display_errors或@隐藏它们没有帮助。 - 修复攻击者可能遇到的致命错误和执行超时,包括回调、上传或导入处理以及清理失败。