PHP2Shell是CVE-2026-109618与CVE-2026-109619的统称,属PHP核心层内存安全漏洞,可未经认证远程执行代码,CVSS v4.0评分均为9.2;二者均在业务代码执行前触发,绕过WAF及中间件防护,需升级至8.5.12等修复版本方可根治。

PHP2Shell 是 CVE-2026-109618 和 CVE-2026-109619 这两个高危漏洞的统称,均属于 PHP 解释器核心层的内存安全缺陷,可导致**未经身份验证的远程代码执行(RCE)**,CVSS v4.0 评分均为 9.2(严重级别)。它们不依赖应用逻辑,而是在请求进入业务代码**之前**即可触发,WAF、中间件或业务层防护完全无效。
CVE-2026-109618:OOM 异常退出引发的内存状态损坏
该漏洞源于 PHP 处理内存耗尽(Out of Memory, OOM)错误时使用 longjmp() 强制跳转退出当前执行上下文。问题在于:请求内存可能尚未完成初始化,就因 memory_limit 耗尽而提前中止;随后的请求清理流程仍会尝试访问这些未初始化或部分无效的数据,造成内存损坏。
攻击者可通过构造特制的 multipart POST 请求实现触发,例如:
- 包含大量 HTTP 请求头(如重复的 X-Forwarded-For)
- 嵌套极深的表单字段名(如
foo[bar][baz][...]数百层) - 多个空文件控件(
...)
这类请求可在不突破 post_max_size 限制的前提下,精准耗尽 memory_limit,从而激活漏洞路径。Apache mod_php 和 PHP-FPM 均受影响。
CVE-2026-109619:跨请求全局状态残留导致的释放后使用(UAF)
该漏洞与 PHP 工作进程(worker)的生命周期管理有关。PHP 在请求结束时释放内存,但某些全局状态(如错误信息、会话上传进度指针、扩展内部结构等)未能被彻底重置,仍保留着指向已释放内存区域的指针。
当同一 worker 进程处理下一个请求时,若相关功能(如 session.upload_progress 或错误日志生成)在新请求完全初始化前被调用,就会误用这些陈旧指针,造成释放后使用(Use-After-Free)。
典型利用链包括:
- 第一个请求触发致命错误(如 segfault),中断正常清理流程
- 第二个请求复用该 worker 的残留状态,读写已被释放的堆内存
- 通过堆喷射与布局控制,最终劫持执行流
值得注意的是:session.upload_progress.enabled 默认为 On,且无需应用显式调用 session_start() 即可参与解析,大幅扩大了攻击面。
共同关键特征
这两个漏洞都发生在 Zend 引擎底层,具备以下共性:
- 预认证:无需登录、无需 Cookie、无需任何前置条件
-
早于业务代码:在
index.php开始执行前即完成 RCE - 全栈影响:覆盖 PHP-FPM、mod_php、php-cgi、FrankenPHP、LiteSpeed 等所有主流 SAPI
- 修复需升级:仅靠配置调整无法根除,必须更新至修复版本(8.5.12 / 8.4.27 / 8.3.36 / 8.2.35 及更新)
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











