CVE-2026-109618
约 3 分钟阅读
- PHP 核心
php-src的 OOM(Out of Memory)状态处理错误,官方标题为RCE via OOM corruption - CVSS v4.0:9.2 Critical;NVD 另给 CVSS v3.1 9.8 Critical,评分版本和攻击复杂度不同,应分别引用
- 受影响版本:PHP 8.2
<8.2.35、8.3<8.3.36、8.4<8.4.27、8.5<8.5.12 - 修复版本:PHP 8.2.35、8.3.36、8.4.27、8.5.12;旧版本需核对发行版或 LTS 回补
- 资料核对:2026-10-22;未运行 PoC、漏洞环境、扫描器或利用请求
成因与利用条件
- PHP 通过
longjmp()从 OOM 错误中退出当前上下文;某些请求阶段已经能访问尚未完整初始化的 request state - 分配失败后,错误清理过程可能把无效状态当作有效状态读取或分支处理,形成内存破坏并进一步 RCE
- Multipart 请求可能通过以下方式触发内存压力:
- 没有可用
Content-Length时持续提交解码后的 body - 单个 multipart part 包含大量 header,内存表示远大于线上的数据
- 空文件控件、嵌套字段和大量 input variables 造成内部数组膨胀
- 应用或扩展对攻击者输入执行大规模分配
- 没有可用
- 表面满足
post_max_size不代表不会发生 OOM;解码后的大小、header 数量和内部表示也要限制
未认证 HTTP 请求
→ multipart / 其他输入导致 PHP OOM
→ longjmp() 提前退出
→ request state 未完成初始化或清理
→ request shutdown 使用无效状态
→ 内存破坏 / RCE影响与 SAPI 边界
| 运行方式 | 公开证据与限制 |
|---|---|
Apache mod_php | PHP 安全团队和研究方报告已演示未认证 RCE,触发可早于应用代码执行;默认输入和内存限制的普通 prefork 配置也在演示范围内 |
| PHP-FPM | 源码分析认为存在风险;请求启动失败会退出 FPM child,阻断该特定启动期链路,但启动成功后的其他 OOM 路径仍需评估,本编号没有据此宣称完整 FPM exploit |
| FrankenPHP | 维护者认为其无条件调用 request shutdown,可能存在应用无关路径;具体部署待验证 |
| LSAPI | 行为类似 FPM,应用相关路径属于待验证 |
- 已确认的后果是以 Web worker 权限执行代码;不自动等于 root、容器逃逸或宿主机控制
- 配置多 worker、负载均衡和 worker 回收可能降低同一 worker 命中率,但不是修复
修复与缓解
- PHP 8.5 分支共同修复 commit:
31c0ea7d7ff1d1fccb6492e52dab544011628065GitHubphp/php-src/commit/31c0ea7d7ff1d1fccb6492e52dab544011628065,标题Avoid state corruption via bailout,同时修复本 CVE 和 CVE-2026-109619 - 补丁将不安全的 OOM bailout 改为延迟 soft OOM,在更高 hard limit 触发时直接退出,并重置可能在请求初始化前被访问的全局状态
- PHP 项目为 7.4、8.0、8.1 提供了最小源码回补;发行版或 LTS 厂商可能另有回补,不能仅按上游版本号判定
memory_limit=-1只移除可控的 PHP memory limit 失败,底层分配仍可能失败;它不是完整修复且会改变资源边界- 不要使用
RLIMIT_AS或RLIMIT_DATA代替修复,它们可能主动制造触发漏洞路径的 mmap 分配失败 - 可临时降低部分风险:限制代理和 Web server 的解码后请求体积、multipart part/header 数量、字段数和嵌套深度;不使用上传时可在前端阻断 multipart
- 关闭
session.upload_progress.enabled主要针对关联漏洞路径,不能完整缓解本 CVE
PoC 与检测
- PHP 官方和 Datadog 均声明存在未认证 HTTP RCE 演示;本笔记未独立运行验证
- 公开候选仓库:Zer061/CVE-2026-109618GitHubZer061/CVE-2026-109618PHP 核心 的 OOM(Out of Memory)状态处理错误,官方标题为 · CVSS v4.0:9.2 Critical;NVD 另给 CVSS v3.1 9.8 Critical,评分版本和攻击复杂度不同,应分别引用 · 受影响版本:PHP 8.2 、8.3 、8.4 、8.5笔记:CVE-2026-109618,固定 commit
8508dbc910609e78cd8475bd3dd34b1c65585a66;其中的脚本只作为资料入口,不代表代码有效或安全 - 观察线索:异常 multipart、大量表单输入、请求初始化期 memory exhaustion、重复 HTTP 500、PHP worker 异常退出,以及 PHP/Apache worker 派生 shell
- 成功利用不一定造成崩溃或留下应用日志;单个线索不能证明利用
host-checker --integrity-only只能检查 APK 文件完整性,不能确认 PHP Web SAPI、容器或运行中的 worker 是否修复,也不能判断是否已经利用
参考
- CVE Record:CVE-2026-109618GitHub 文件CVEProject/cvelistV5/cves/2026/109xxx/CVE-2026-109618.json
- PHP GHSA-w8hw-w9fx-j79w:RCE via OOM corruptionGitHubphp/php-src/security/advisories/GHSA-w8hw-w9fx-j79w
- PHP 2026 官方发布公告
- PHP 安全团队 oss-security 公告链接www.openwall.com/lists/oss-security/2026/10/21/6PHP 核心 的 OOM(Out of Memory)状态处理错误,官方标题为 · CVSS v4.0:9.2 Critical;NVD 另给 CVSS v3.1 9.8 Critical,评分版本和攻击复杂度不同,应分别引用 · 受影响版本:PHP 8.2 、8.3 、8.4 、8.5笔记:CVE-2026-109618
- NVD:CVE-2026-109618链接nvd.nist.gov/vuln/detail/CVE-2026-109618PHP 核心 的 OOM(Out of Memory)状态处理错误,官方标题为 · CVSS v4.0:9.2 Critical;NVD 另给 CVSS v3.1 9.8 Critical,评分版本和攻击复杂度不同,应分别引用 · 受影响版本:PHP 8.2 、8.3 、8.4 、8.5笔记:CVE-2026-109618
- Wiz:PHP2Shell
- Datadog:PHP2Shell 分析
关联信息
反向链接、本文链接的其他页面和外部资料。
参考资料
GitHub4 条
- CVEProject/cvelistV5/cves/2026/109xxx/CVE-2026-109618.jsongithub.com/CVEProject/cvelistV5/blob/28ded261613796661da064778d6320c5fbf35eb3/cves/2026/109xxx/CVE-2026-109618.json
- php/php-src/commit/31c0ea7d7ff1d1fccb6492e52dab544011628065),标题github.com/php/php-src/commit/31c0ea7d7ff1d1fccb6492e52dab544011628065)%EF%BC%8C%E6%A0%87%E9%A2%98
- php/php-src/security/advisories/GHSA-w8hw-w9fx-j79wgithub.com/php/php-src/security/advisories/GHSA-w8hw-w9fx-j79w
- Zer061/CVE-2026-109618github.com/Zer061/CVE-2026-109618
其他外链5 条
- nvd.nist.gov/vuln/detail/CVE-2026-109618nvd.nist.gov/vuln/detail/CVE-2026-109618
- securitylabs.datadoghq.com/articles/php2shell-critical-vulnerabilities-in-phpsecuritylabs.datadoghq.com/articles/php2shell-critical-vulnerabilities-in-php
- www.openwall.com/lists/oss-security/2026/10/21/6www.openwall.com/lists/oss-security/2026/10/21/6
- www.php.net/archive/2026.phpwww.php.net/archive/2026.php
- www.wiz.io/blog/php2shell-php-rcewww.wiz.io/blog/php2shell-php-rce