PHP 8.5.12、8.4.27、8.3.36 和 8.2.35 修复了两个严重漏洞,这些漏洞可导致未经身份验证的远程代码执行。强烈建议所有 PHP 用户立即更新。
风险网站: 所有处理 Web 请求的 PHP 安装,包括 PHP-FPM、使用 mod_php 的 Apache、php-cgi、FrankenPHP 和 LiteSpeed。认为 mod_php 的风险最高,已有演示证明:未经身份验证的请求可以在任何应用代码运行之前触发攻击。
漏洞:
通过 OOM 内存破坏导致的 RCE,CVE-2026-109618(GHSA-w8hw-w9fx-j79w): 内存耗尽(out-of-memory)处理可能在内部请求数据仅部分初始化时中断 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 供应商提供向后移植的修复,请联系您的供应商了解详情,或升级到受支持的版本。
如果您依赖志愿者维护的 rpms.remirepo.net,我们强烈建议您切换到发行版软件包或从源码构建,以便立即应用更新。该仓库今天不会提供更新。
鉴于这些漏洞的严重性,PHP 安全团队为 PHP 7.4、PHP 8.0 和 PHP 8.1 提供了最小化的源码向后移植,以帮助从源码构建或无法获得 LTS 供应商支持的用户。
如果无法立即更新: 只有更新才是完整的解决方案。以下措施可降低特定攻击路径的暴露风险,但并不能使安装变得安全。
通过 OOM 内存破坏导致的 RCE(CVE-2026-109618):
设置
memory_limit=-1,最好以应用程序无法覆盖的方式设置,例如 FPM 池或 Apache 配置中的php_admin_value,并检查没有任何池、目录或应用程序设置重新施加有限限制。这消除了可控的 PHP 内存限制失败,但底层分配失败仍可能到达易受攻击的路径。设置较低的
post_max_size。对于不需要文件上传的应用程序,设置post_max_size = 8M。如果必须进行文件上传,设置post_max_size = 32M。保持upload_max_filesize低于post_max_size。考虑在 Web 服务器或代理层面强制限制解码后的请求大小、输入字段数量、multipart 部分数量、标头数量和嵌套深度。这些限制还必须覆盖没有可用 Content-Length 的请求。使用容器或 cgroup 限制作为可用性边界,最好采用仅杀死受影响 worker 的策略。不要用 RLIMIT_AS 或 RLIMIT_DATA 替代,因为它们可能导致易受攻击的分配失败。
通过过期全局状态导致的 RCE(CVE-2026-109619):
设置
session.upload_progress.enabled=0并重启每个 worker。使用 php.ini、FPM 池或服务器配置,在请求解析之前生效。不要依赖ini_set()或 FPM 的.user.ini。这可以阻断已确认的会话路径,但不能阻断其他变体。在 PHP 8.5 上,设置
fatal_error_backtraces=0并重启每个 worker。这仅阻断已确认的致命错误回溯路径。移除按请求应用的、会在初始化之前发出诊断信息的无效或已弃用设置。用
error_reporting、display_errors或@隐藏诊断信息没有帮助。修复攻击者可触达的致命错误和执行超时,包括回调、上传或导入处理以及清理过程中的失败。