报告编号:SEC-REP-2026-1021-PHP2Shell
评估等级:严重(Critical)
发布背景:基于公开渠道披露的 PHP 内核远程代码执行漏洞(CVE-2026-109618、CVE-2026-109619)整理,用于安全自查与防护参考。
一、漏洞概述
2026 年 10 月 21 日,PHP 开发团队发布紧急安全更新,修复 PHP 解释器内核中的两处严重漏洞,官方统一命名为“PHP2Shell”,CVSS v4.0 评分均为9.2,属于未认证远程代码执行(RCE)。漏洞位于 PHP 内核层,与具体框架、CMS 或扩展无关,Apache mod_php 与 PHP-FPM 两种主流部署方式均受影响。
二、漏洞基本信息
| 项目 | CVE-2026-109618 | CVE-2026-109619 |
|---|---|---|
| 漏洞类型 | RCE(内存耗尽导致的内存损坏) | RCE(残留全局状态导致释放后使用) |
| CVSS v4.0 | 9.2 | 9.2 |
| 认证要求 | 无需认证 | 无需认证 |
| 受影响组件 | PHP 解释器内核 | PHP 解释器内核 |
| 修复版本 | PHP 8.5.12 / 8.4.27 / 8.3.36 / 8.2.35 | 同左 |
| 在野利用 | 暂无公开证据(截至发布时) | 暂无公开证据 |
PHP 5 至 8.1 同样受影响,但这些分支已 EOL,不会获得补丁。
三、受影响系统与影响面
漏洞在应用代码执行之前即可触发:攻击流量到达 PHP 运行时层面就被处理,应用层认证无法阻断。这意味着 WordPress、Drupal、Joomla、Laravel、Magento、Shopware 等主流 PHP 生态均可能暴露。
据公开测绘数据,全球范围内大量资产可能受影响:WordPress 相关资产约7,226 万,Drupal 约169.7 万,Joomla 约100 万,Laravel 约40.6 万。Talos 估计约50%的 PHP 资产运行在已 EOL 的版本上,无法获得补丁。
四、技术细节(脱敏)
CVE-2026-109618:内存耗尽导致的内存损坏
PHP 在请求处理过程中若发生内存耗尽(OOM),会通过longjmp()强制中断执行。如果中断发生在内部请求结构仅完成部分初始化时,这些结构会停留在无效状态;后续请求清理流程可能将无效数据当作合法数据处理,从而造成内存损坏并最终导向 RCE。
触发向量主要位于HTTP 请求解析层,包括畸形 multipart 请求、缺少有效 Content-Length 声明、异常数量的 multipart 头部、嵌套或空文件字段等,均可在应用代码运行前诱发内存耗尽。
CVE-2026-109619:残留全局状态导致的释放后使用
PHP 的持久化 Worker 在处理完一个请求后,部分请求专属内部状态未随内存释放而被完全重置,仍然引用已释放的内存。当同一个 Worker 处理后续请求时,可能在正常初始化覆盖之前读取到这些“残留”状态,形成 use-after-free,进而可被操控为 RCE。
已确认的触发路径涉及session 上传进度处理,以及 PHP 8.5 中的致命错误回溯状态。致命错误、执行超时、特定警告或无效配置指令都可能参与构造利用链条。利用需要“生产者—消费者”两段请求的配合,两段可以分属不同 HTTP 请求。
五、修复与缓解措施
首选:升级至修复版本
PHP 8.5.12、8.4.27、8.3.36、8.2.35包含完整修复。仅升级 CMS 或框架无效,必须升级 PHP 运行时本身。
临时缓解(无法立即升级时)
针对 CVE-2026-109618:
将
memory_limit设为-1(建议通过 FPM pool 或 Apache 配置以不可覆盖方式设置),并确认无池、目录或应用级配置将其重新设为有限值。设置较低的
post_max_size(无文件上传场景建议 8M,有上传场景建议 32M),并将upload_max_filesize保持在post_max_size之下。
针对 CVE-2026-109619:
设置
session.upload_progress.enabled=0并重启全部 Worker;在 PHP 8.5 上同时设置fatal_error_backtraces=0。
重要提醒
上述配置级缓解不能提供完整保护,仅在补丁无法立即落地时用于收窄攻击面。
六、检测与排查建议(面向蓝队)
监控请求初始化阶段出现的内存耗尽错误,尤其是异常大的表单提交或畸形 multipart 请求。
关注 PHP 进程树中非预期的子进程或 shell 派生行为——成功利用不一定导致 Worker 崩溃。
对
session.upload_progress相关请求和 PHP 8.5 环境下的致命错误日志进行重点排查。网络层可利用现有 IDS/IPS 签名(如 Talos SNORT 67359、67360)进行辅助检测。-5
七、免责声明
本报告基于公开安全公告、厂商分析文章及公开测绘数据整理,仅用于安全自查、防护决策与技术研究。报告不包含任何可直接用于攻击的利用代码或武器化载荷。对于因使用本报告信息而导致的任何直接或间接后果,报告整理者不承担法律责任。漏洞利用条件与影响范围可能随研究进展而变化,请以 PHP 官方安全公告及上游 advisory 为最终依据。
法律责任:读者应遵守《中华人民共和国网络安全法》等当地法律法规。对于因阅读本报告、利用本报告相关技术进行任何非法行为所造成的任何直接或间接后果及法律责任,报告作者及发布平台不承担任何连带责任。
致敬
没有绝对安全的系统只有不断地学习和完善。
我们能在数字世界里安心地生活、工作,享受着科技带来的便利,其实是因为:哪有什么岁月静好,不过一直有人在替你负重前行。
在这个名为“网络空间”的无形战场上,正是这群人构建了我们的防线:
致敬红队的兄弟们!你们在深夜里推演着最极端的攻击路径,在复杂的协议和内存中死磕那一丝致命的裂缝。你们甘愿做那个“打破平静”的坏人,因为你们深知“未知攻,焉知防”,只有比真正的黑客更早发现漏洞,防线才能被提前补牢。
致敬蓝队的兄弟们!你们盯着满屏翻滚的告警,在海量的日志中抽丝剥茧。当那个 CVSS 9.2 分的致命漏洞在深夜爆出时,是你们从床上爬起,紧急写规则、封 IP、打补丁、重启 Worker。你们的战场没有聚光灯,只有默默收紧的暴露面,和死守在业务系统前的那道红线。
哪有什么岁月静好,不过一直有人在替你负重前行。这份“静好”,是红蓝兄弟们用黑眼圈、冷咖啡和无数个熬红的深夜换来的。
你们在攻防演练中相互博弈,在修补漏洞时彼此接力,守护的不仅仅是几行代码和几台服务器,更是数字时代里每一个普通人的隐私与安宁。
致敬凌晨还在守护数字疆土的兄弟们!愿今晚的告警都能被成功拦截,愿每一次补丁都能平稳落地,愿防线固若金汤,愿你们今晚能睡个安稳觉。