PHP曝出两个严重RCE漏洞:CVE-2026-109618、CVE-2026-109619技术分析与修复指南

【文章简介】

本文围绕 PHP 两个高危远程代码执行(RCE)漏洞展开,分析漏洞成因、影响范围、风险场景及修复方案,并结合实际运维场景介绍环境排查与修复验证方法。

【适用读者】

  • 网络安全从业者、安全运维及渗透测试人员
  • PHP 开发人员、后端工程师
  • 负责服务器运维、漏洞管理及安全应急的技术人员

【阅读收获】

读完本文,你将了解两个漏洞的核心原理,掌握 PHP 运行环境的排查思路,以及高危漏洞从风险确认到修复验证的基本流程。

一、漏洞背景

2026年10月21日,PHP官方发布安全公告,披露并修复了两个可能导致远程代码执行(RCE)的严重安全漏洞。两个漏洞的CVSS v4.0评分均为9.2,部分攻击路径无需身份认证。

本次漏洞涉及PHP运行时内部的内存管理和请求状态处理机制。由于PHP广泛应用于网站、业务后台及API服务,一旦相关运行环境受到影响,风险可能不局限于单个应用程序。

本文将从漏洞原理、影响范围、排查方法和修复方案几个方面进行分析。

1. 漏洞基本信息

项目 CVE-2026-109618 CVE-2026-109619
漏洞名称 RCE via OOM corruption RCE via stale global state
核心问题 内存耗尽异常导致内部状态不一致 过期全局状态导致释放后使用
主要风险 远程代码执行 远程代码执行
CVSS v4.0 9.2 9.2
修复方式 升级PHP 升级PHP

官方公告:

二、漏洞原理分析

理解这两个漏洞,需要先了解PHP处理Web请求时的基本流程。

一个典型的PHP请求会经历以下阶段:

  1. Web服务器接收HTTP请求。
  2. PHP运行时初始化请求上下文及内部数据。
  3. PHP解析请求并执行应用程序代码。
  4. 请求结束后,清理请求期间创建的状态和资源。
  5. 工作进程根据运行模式继续处理后续请求。

如果初始化、异常处理或资源释放过程中出现状态不一致,就可能导致程序访问无效内存,进一步引发安全问题。

2.1 CVE-2026-109618:OOM异常处理导致的远程代码执行

OOM是Out of Memory的缩写,表示程序申请内存时无法获得所需资源。

PHP在处理内存分配失败时,会通过异常中断机制退出当前执行上下文。在特定执行路径下,如果请求内部数据尚未完成初始化,异常中断就可能使运行时进入不一致状态。

随后,请求结束时的清理逻辑可能将这些无效数据当作正常数据处理,导致内存安全问题,并可能最终形成远程代码执行。

可以将其简化为以下流程:

复制代码
Web请求进入PHP运行时
        |
        v
初始化请求内部数据
        |
        v
发生内存分配失败(OOM)
        |
        v
当前执行流程被中断
        |
        v
请求内部状态未完成初始化
        |
        v
清理逻辑访问异常状态
        |
        v
可能引发内存破坏及远程代码执行

这只是对漏洞机制的概念性说明,并非实际利用代码。

根据PHP官方公告,攻击者可以利用特定的请求处理路径触发相关问题。尤其值得注意的是,某些multipart请求可能绕过预期的请求体大小限制,使程序在请求处理过程中进入异常状态。

这说明,单纯依赖PHP自身的内存限制,并不能保证所有内存分配失败路径都得到安全处理。

2.2 CVE-2026-109619:过期全局状态与Use-After-Free

第二个漏洞涉及PHP工作进程中的内部状态管理。

PHP运行时维护着错误处理、会话、对象和扩展等多种状态。其中一部分状态与当前请求所使用的内存有关,因此必须在释放请求内存前正确重置。

如果请求结束时没有完成必要的状态清理,相关引用就可能指向已经释放的内存区域。

这类问题被称为Use-After-Free,简称UAF,即释放后使用。

漏洞形成过程可以简化为:

复制代码
工作进程处理请求A
        |
        v
创建请求相关的内部状态
        |
        v
异常处理或清理流程未完成状态重置
        |
        v
请求内存被释放
        |
        v
部分内部状态仍然残留
        |
        v
工作进程处理请求B
        |
        v
初始化完成前访问过期状态
        |
        v
可能产生内存安全问题及远程代码执行

这里的关键在于:请求内存的生命周期已经结束,但某些内部状态仍然保留着指向该内存的引用。

当后续处理逻辑访问这些引用时,就可能触发UAF问题。

PHP官方公告指出,致命错误、内存耗尽、警告信息以及部分会话处理路径,都可能与状态未正确重置有关。

需要注意,工作进程复用不意味着不同用户的业务数据必然互相可见。这里讨论的是PHP运行时内部状态的生命周期问题。

2.3 两个漏洞的区别

这两个漏洞的共同点是PHP运行时内部状态管理存在缺陷,但问题的切入点不同。

  • CVE-2026-109618: 重点在于内存耗尽异常导致初始化过程被中断,后续清理逻辑可能处理无效状态。
  • CVE-2026-109619: 重点在于请求结束后,某些内部状态未被正确重置,后续操作可能访问已释放的内存。

它们反映出一个重要的底层安全原则:

异常处理流程必须与正常执行流程一样,严格维护内存有效性、对象生命周期和内部状态的一致性。

三、影响范围与风险分析

PHP官方明确指出,所有用于处理Web请求的PHP安装都需要关注本次漏洞,包括PHP-FPM、Apache mod_php、php-cgi、FrankenPHP和LiteSpeed等部署方式。官方认为Apache mod_php的风险尤其高,因为已确认存在无需认证、可在应用程序代码执行前触发攻击的路径。

重点排查以下场景:

  • 使用PHP构建的互联网网站及业务后台。
  • 通过Nginx或Apache配合PHP-FPM运行的业务系统。
  • 使用Apache mod_php的旧系统。
  • 使用php-cgi等方式运行的应用。
  • 基于容器部署、但仍使用受影响PHP版本的业务。

需要强调:使用PHP不代表系统已经被入侵,是否存在可利用风险还取决于实际版本、运行模式和触发条件。

四、如何排查PHP环境是否受影响?

4.1 查看PHP版本

在Linux服务器执行:

复制代码
php -v

查看当前命令行PHP版本。

也可以执行:

复制代码
php --ini

查看当前命令行环境使用的配置文件。

需要注意:命令行PHP与Web服务实际使用的PHP可能不是同一套安装,因此这两条命令只能作为初步检查。

4.2 排查Web服务实际运行版本

对于Nginx与PHP-FPM组合,需要进一步确认:

  • Nginx配置中的fastcgi_pass指向哪里。
  • PHP-FPM实际使用的可执行文件路径。
  • PHP-FPM进程加载的版本及配置。
  • 是否存在多套PHP安装或多个容器实例。

对于Apache环境,应确认PHP使用的是mod_php、CGI还是其他运行方式。

容器化部署还需要检查实际运行的容器和镜像内容,而不能仅根据镜像名称判断安全状态。

4.3 核对操作系统软件包

部分Linux发行版可能通过回移补丁修复漏洞,软件包版本号不一定与PHP上游版本完全一致。

因此,除检查PHP版本外,还应核对对应操作系统的安全公告及软件包修复状态,避免误判。

五、如何修复漏洞?

5.1 官方修复版本

PHP官方公布的修复版本如下。

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

建议优先升级至对应分支的官方修复版本,并在升级前完成兼容性测试、数据备份和变更评估。

对于无法立即升级的生产系统,应根据官方公告实施临时风险控制措施。但官方明确指出,这些措施无法完全替代升级。

5.2 暂时无法升级时的风险控制

针对CV​​E-2026-109618,可以评估以下措施:

  • 合理限制请求体大小、multipart字段数量及嵌套深度。
  • 在Web服务器或代理层实施请求大小限制。
  • 根据官方建议评估PHP内存限制的配置方式。
  • 通过容器或cgroup等机制限制单个工作进程异常对系统可用性的影响。

官方建议在适用环境中设置memory_limit=-1,以避免通过可控的PHP内存限制触发特定攻击路径。但这会取消PHP自身的内存上限,可能增加资源耗尽风险,必须结合系统级资源限制谨慎评估,不能直接在生产环境盲目使用。

针对CVE-2026-109619,可以评估关闭会话上传进度功能:

复制代码
session.upload_progress.enabled=0

PHP 8.5还可以根据官方建议评估:

复制代码
fatal_error_backtraces=0

这些配置只针对已确认的部分攻击路径,不代表漏洞已经彻底修复。具体生效方式、配置位置和工作进程重启要求,应以官方公告为准。

如果无法及时修复且系统直接暴露于互联网,应考虑临时限制访问,必要时暂停受影响的服务。

六、修复后如何验证?

漏洞处置不能止步于执行升级命令,还需要确认修复是否真正生效。

检查项 验证内容
PHP版本 命令行与Web实际运行版本均已核实
软件包状态 已安装官方或发行版提供的修复版本
工作进程 已重新加载或重启,确保新版本生效
资产覆盖 所有PHP实例均已纳入排查
业务验证 核心功能及相关扩展运行正常
安全监测 检查异常请求、进程、文件变化及其他可疑迹象

对于已经暴露在互联网的系统,还应检查历史访问日志和系统状态。修复完成只能说明软件漏洞处置取得进展,并不能证明此前没有发生入侵。

七、技术启示

本次PHP漏洞事件至少带来三个值得重视的经验。

第一,安全风险不只存在于业务代码中。

即使应用层具有身份认证、权限控制和输入校验,底层运行时仍可能存在独立的安全缺陷。因此,安全评估应覆盖应用代码、运行时、依赖组件和基础设施。

第二,资产清单直接影响漏洞响应速度。

企业应能够快速识别哪些服务器、容器和业务系统正在使用PHP,哪些直接暴露在互联网,以及哪些系统无法立即升级。

如果资产信息不完整,漏洞应急就可能陷入逐台寻找、逐个确认的被动局面。

第三,修复必须形成可验证的闭环。

漏洞治理应包括发现、确认、修复、验证和复查。每一项处置都应有明确结果和记录,而不是只在工单中填写"已升级"。

八、总结

CVE-2026-109618和CVE-2026-109619是PHP运行时层面的两个严重安全漏洞,分别涉及OOM异常处理和过期内部状态访问问题,均可能导致远程代码执行。

对于开发和安全运维人员,建议优先完成以下工作:

  1. 盘点所有PHP运行环境,重点关注互联网暴露资产。
  2. 核实实际运行版本及部署方式。
  3. 尽快安装官方或对应发行版提供的修复版本。
  4. 对暂时无法升级的系统实施经评估的临时风险控制措施。
  5. 通过版本、进程、资产清单和日志检查形成修复闭环。

安全工作的重点不仅是发现漏洞,更是确保受影响资产被完整识别、风险得到及时处理,并且修复结果能够被验证。

参考资料

  1. PHP官方安全公告(2026年10月21日)
  2. CVE-2026-109618:RCE via OOM corruption
  3. CVE-2026-109619:RCE via stale global state
  4. PHP官方版本发布记录

本文用于网络安全技术交流与防御性排查。具体影响范围、临时缓解措施和修复状态,请以PHP官方公告及对应操作系统发行版的安全公告为准。

📌 推荐阅读

AI编程时代的两大隐忧:代码失控与技术生态趋同

大模型套壳滥用与AI智能体带来的新型安全风险及企业防护思考

复合型社会工程威胁分析:社交诱饵引发的多终端数据窃取风险与防御实践

2026网络安全管理者能力模型升级:告别技术堆砌,走向战略与业务韧性治理

自主AI Agent全自动化入侵|从Hugging Face安全事件看AI攻击与传统防护失效危机

AI安全攻防重心全面迁移:从提示词防护走向智能体自主操作风险治理

Claude Code后门隐患深度拆解与AI供应链安全治理方案

CVE-2026-0007 Android界面覆盖劫持提权漏洞深度解析与全维度防护方案

相关推荐
学逆向的5 小时前
C 指针常量与常量指针
c语言·开发语言·网络安全
大文说跨境7 小时前
亚马逊多店铺的图片素材怎么批量去重:EXIF 与哈希的处理流程
开发语言·php
上海运维Q先生8 小时前
PHP8.3.36升级修复手册----CVE-2026-109618 CVE-2026-109619
运维·php
2401_885885048 小时前
芬兰语音通知接口怎样对接?语音提醒接入流程
android·前端·python·php·语音识别
Flynt11 小时前
PHP 9.2 分 RCE 的补丁比公告早公开 3 天,我读完 389 个文件的 diff,也把"死在代码之前"跑了出来
安全·php·源码
萌动的小火苗12 小时前
MQTT的QoS0、QoS1、QoS2有什么区别?
开发语言·网络·python·php·信息与通信
silvamux_12 小时前
10款模型写“君幸食”讲解词:统一事实档案与逐款审校
开发语言·php
Smoothcloud润云13 小时前
GPU远程纳管节点频繁离线?心跳、DNS与时钟排障实战
运维·服务器·开发语言·人工智能·php·gpu算力
大泽九章13 小时前
XSS入门:存储型、反射型、DOM型,用Flask全复现
python·网络安全·flask