上传进度反序列化器中的释放后使用
上传进度处理在请求初始化完成之前就解码会话数据。一次内存分配失败会释放请求堆,却把反序列化器的全局记录留在原处;同一 worker 的下一个请求会把被攻击者重新占用的内存当作有效状态。
CVE-2026-109618 · GHSA-w8hw-w9fx-j79w
PHP2Shell 中“内存耗尽”的那一半:攻击者在 PHP 解析请求时把它推入内存耗尽,留下初始化到一半的数据,而 PHP 之后会信任这些数据。结果就是:无需认证即可以 Web 服务器用户身份执行代码。
最后核实 2026-10-22
严重程度
认证
修复版本
所属
PHP 在内存耗尽时会用 longjmp() 中断当前上下文。如果此时请求内存只初始化了一部分,请求关闭阶段就会读取这些无效数据或据此跳转。多条 multipart 解析路径可以在正常限制内把 PHP 推入 OOM,而且发生在任何应用代码运行之前。
影响: 无需认证即可以 PHP Web worker 用户身份执行代码。 已演示: 已在 WordPress、Drupal 和 Joomla(mod_php,默认限制)上演示认证前 RCE。
PHP 在内存耗尽时会抛出致命错误,并用 longjmp() 直接跳出当前代码路径。那一刻做到一半的东西,就永远停在了一半。
如果请求内存已分配但尚未初始化,请求关闭阶段就会读取这些无效数据或据此跳转。多条 multipart(文件上传表单)解析路径都能在正常限制内把 PHP 推入内存耗尽——所以根本不需要任何应用代码参与。
PHP 列出的弱点类型:释放后使用(CWE-416)、异常情况处理不当(CWE-755)、访问未初始化指针(CWE-824),以及相关的状态处理类 CWE。
上传进度反序列化器中的释放后使用
上传进度处理在请求初始化完成之前就解码会话数据。一次内存分配失败会释放请求堆,却把反序列化器的全局记录留在原处;同一 worker 的下一个请求会把被攻击者重新占用的内存当作有效状态。
通过 PHPSESSID 远程泄露内存
OOM 中断后,一个会话 ID 指针变成悬空指针。之后的 multipart 请求会把它此时指向的内存做 URL 编码后写进响应的 PHPSESSID Cookie——即使应用从未启动会话。
PHP 官方公告和 Wiz 的文章对部分路径的归类不同。补丁修复的是共同的故障模式,所以归类方式不影响你需要做的事。
| 分支 | 存在漏洞 | 修复版本 |
|---|---|---|
| 8.5 | < 8.5.12 | 8.5.12 |
| 8.4 | < 8.4.27 | 8.4.27 |
| 8.3 | < 8.3.36 | 8.3.36 |
| 8.2 | < 8.2.35 | 8.2.35 |
| 8.1 · 8.0 · 7.4 | 全部 | 仅源码回移植 |
| 5.4 – 7.3 | 全部 | 无修复 |
| 部署方式 | …109618 | 说明 |
|---|---|---|
| Apache + mod_php | 已证实 RCE | 两个 CVE 均已在默认限制下验证可达 RCE。风险最高的部署方式。 |
| PHP-FPM(nginx、Apache、Caddy……) | 存在风险 | 已在 FPM 上验证通过会话生命周期实现 RCE;OOM 路径已通过应用层代码路径证实,但尚无公开的通用 FPM 利用。 |
| FrankenPHP / LiteSpeed LSAPI | 很可能受影响 | 公告评估为很可能受影响。常驻 worker 只会让跨请求残留状态的问题更突出。 |
| CLI(cron、队列 worker、artisan) | 公告未涉及 | 公告未讨论,正常使用时也无法通过 HTTP 请求触达。但仍要升级——它们来自同一个软件包。 |
向量: CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
| 指标 | 在本漏洞中的含义 | 对分数的影响 |
|---|---|---|
AV:N Attack Vector: Network(网络) | 通过互联网发送普通 HTTP 请求即可触达。 | 拉高分数 |
AC:H Attack Complexity: High(高) | 利用必须针对每个目标的内存布局调整,不是复制粘贴一个请求就能成功。 | 拉低分数 |
AT:P Attack Requirements: Present(存在前提) | 能否成功取决于攻击者无法控制的部署条件(SAPI、内存限制、worker 复用)。 | 拉低分数 |
PR:N Privileges Required: None(无) | 不需要账号,不需要登录。 | 拉高分数 |
UI:N User Interaction: None(无) | 不需要任何人点击任何东西。 | 拉高分数 |
VC:H / VI:H / VA:H 对漏洞系统的影响:High(高) | PHP 服务器的机密性、完整性和可用性全部失守。 | 拉高分数 |
SC:N / SI:N / SA:N 对后续系统的影响:None(无) | 评分不计入横向移动到其他系统——但实际中被窃取的凭据往往能做到这一点。 | 拉低分数 |
修复方法是升级 PHP
安装已修复版本并重启所有 PHP worker。修复指南 →
如果无法立即升级,php.net 列出了以下部分缓解措施:
memory_limit = -1(在 FPM 池或 Apache 配置中使用 php_admin_value),并配合容器或 cgroup 内存上限。post_max_size:不需要上传文件时设 8M,需要时设 32M;upload_max_filesize 要低于它。RLIMIT_AS / RLIMIT_DATA(ulimit -v、systemd 的 LimitAS=)——它们会触发同样的有漏洞的内存分配失败。能。它在 PHP 解析传入请求时就被触发,早于任何应用代码、路由或认证逻辑。
不能。这个设置针对的是 CVE-2026-109619 的已证实路径。针对 CVE-2026-109618 最主要的配置缓解措施,是以管理员方式设置 memory_limit = -1 并配合 cgroup 内存上限——即便如此也不完整。
2026 年 10 月 21 日发布的 PHP 8.5.12、8.4.27、8.3.36 和 8.2.35。7.4、8.0 和 8.1 有源码回移植;各发行版会提供各自的已修复软件包。
公告根据源码分析评估 FPM 存在风险,PHP 基金会也表示已通过应用层代码路径在 FPM 上证实 RCE。演示中最直接的情形是默认限制下的 Apache + mod_php。