【文章简介】
本文围绕 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官方安全公告
- CVE-2026-109618技术公告
- CVE-2026-109619技术公告
二、漏洞原理分析
理解这两个漏洞,需要先了解PHP处理Web请求时的基本流程。
一个典型的PHP请求会经历以下阶段:
- Web服务器接收HTTP请求。
- PHP运行时初始化请求上下文及内部数据。
- PHP解析请求并执行应用程序代码。
- 请求结束后,清理请求期间创建的状态和资源。
- 工作进程根据运行模式继续处理后续请求。
如果初始化、异常处理或资源释放过程中出现状态不一致,就可能导致程序访问无效内存,进一步引发安全问题。
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 暂时无法升级时的风险控制
针对CVE-2026-109618,可以评估以下措施:
- 合理限制请求体大小、multipart字段数量及嵌套深度。
- 在Web服务器或代理层实施请求大小限制。
- 根据官方建议评估PHP内存限制的配置方式。
- 通过容器或cgroup等机制限制单个工作进程异常对系统可用性的影响。
官方建议在适用环境中设置memory_limit=-1,以避免通过可控的PHP内存限制触发特定攻击路径。但这会取消PHP自身的内存上限,可能增加资源耗尽风险,必须结合系统级资源限制谨慎评估,不能直接在生产环境盲目使用。
针对CVE-2026-109619,可以评估关闭会话上传进度功能:
session.upload_progress.enabled=0PHP 8.5还可以根据官方建议评估:
fatal_error_backtraces=0这些配置只针对已确认的部分攻击路径,不代表漏洞已经彻底修复。具体生效方式、配置位置和工作进程重启要求,应以官方公告为准。
如果无法及时修复且系统直接暴露于互联网,应考虑临时限制访问,必要时暂停受影响的服务。
六、修复后如何验证?
漏洞处置不能止步于执行升级命令,还需要确认修复是否真正生效。
| 检查项 | 验证内容 |
|---|---|
| PHP版本 | 命令行与Web实际运行版本均已核实 |
| 软件包状态 | 已安装官方或发行版提供的修复版本 |
| 工作进程 | 已重新加载或重启,确保新版本生效 |
| 资产覆盖 | 所有PHP实例均已纳入排查 |
| 业务验证 | 核心功能及相关扩展运行正常 |
| 安全监测 | 检查异常请求、进程、文件变化及其他可疑迹象 |
对于已经暴露在互联网的系统,还应检查历史访问日志和系统状态。修复完成只能说明软件漏洞处置取得进展,并不能证明此前没有发生入侵。
七、技术启示
本次PHP漏洞事件至少带来三个值得重视的经验。
第一,安全风险不只存在于业务代码中。
即使应用层具有身份认证、权限控制和输入校验,底层运行时仍可能存在独立的安全缺陷。因此,安全评估应覆盖应用代码、运行时、依赖组件和基础设施。
第二,资产清单直接影响漏洞响应速度。
企业应能够快速识别哪些服务器、容器和业务系统正在使用PHP,哪些直接暴露在互联网,以及哪些系统无法立即升级。
如果资产信息不完整,漏洞应急就可能陷入逐台寻找、逐个确认的被动局面。
第三,修复必须形成可验证的闭环。
漏洞治理应包括发现、确认、修复、验证和复查。每一项处置都应有明确结果和记录,而不是只在工单中填写“已升级”。
八、总结
CVE-2026-109618和CVE-2026-109619是PHP运行时层面的两个严重安全漏洞,分别涉及OOM异常处理和过期内部状态访问问题,均可能导致远程代码执行。
对于开发和安全运维人员,建议优先完成以下工作:
- 盘点所有PHP运行环境,重点关注互联网暴露资产。
- 核实实际运行版本及部署方式。
- 尽快安装官方或对应发行版提供的修复版本。
- 对暂时无法升级的系统实施经评估的临时风险控制措施。
- 通过版本、进程、资产清单和日志检查形成修复闭环。
安全工作的重点不仅是发现漏洞,更是确保受影响资产被完整识别、风险得到及时处理,并且修复结果能够被验证。
参考资料
- PHP官方安全公告(2026年10月21日)
- CVE-2026-109618:RCE via OOM corruption
- CVE-2026-109619:RCE via stale global state
- PHP官方版本发布记录
本文用于网络安全技术交流与防御性排查。具体影响范围、临时缓解措施和修复状态,请以PHP官方公告及对应操作系统发行版的安全公告为准。
📌推荐阅读
AI编程时代的两大隐忧:代码失控与技术生态趋同
大模型套壳滥用与AI智能体带来的新型安全风险及企业防护思考
复合型社会工程威胁分析:社交诱饵引发的多终端数据窃取风险与防御实践
2026网络安全管理者能力模型升级:告别技术堆砌,走向战略与业务韧性治理
自主AI Agent全自动化入侵|从Hugging Face安全事件看AI攻击与传统防护失效危机
AI安全攻防重心全面迁移:从提示词防护走向智能体自主操作风险治理
Claude Code后门隐患深度拆解与AI供应链安全治理方案
CVE-2026-0007 Android界面覆盖劫持提权漏洞深度解析与全维度防护方案