跳至正文
Wener Notes

CVE-2026-109619

约 4 分钟阅读
  • PHP 核心 php-src 的跨请求遗留全局状态,官方标题为 RCE via stale global state
  • 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 worker 的全局状态可能暂时指向某次请求拥有的内存。请求中发生 fatal error、OOM、parse/compile failure、require 失败、执行超时,或退出阶段重新产生诊断时,清理可能未完成,留下指向已释放 request memory 的引用。

后续请求必须由同一个持久 worker处理,并在正常 request initialization 之前访问该 stale state,才进入公开描述的 UAF 路径:

text
请求 A 发布 request-owned state
  → 异常中断或退出期诊断使清理未完成
  → 请求 A 内存释放,但 worker 全局引用仍存在
  → 同一 worker 处理请求 B
  → 初始化前的操作消费旧引用
  → use-after-free / 内存泄露 / RCE

已公开的 producer / consumer 包括:

  • PHP 8.5 fatal_error_backtraces 路径:fatal error 保存请求回溯,后续早期诊断消费旧状态;mod_php RCE 已报告
  • session.upload_progress 路径:上传进度在普通 session 初始化前访问 session/decoder 状态;默认启用,不要求应用调用 session_start()
  • mod_php 的 .htaccess、php_value、php_flag、php_admin_* 等目录配置可在 php_request_startup() 前产生诊断

影响与 SAPI 边界

运行方式公开证据与限制
Apache mod_phpfatal backtrace 和 session lifecycle 路径均有未认证 RCE 演示声明
PHP-FPMsession lifecycle 路径有 RCE 演示声明;启动失败会退出 child,不能复用该失败请求,但启动成功后的应用操作仍可能发布状态并由后续请求消费
LSAPI早期环境 INI 是条件入口,具体配置和应用路径待验证
FrankenPHP默认配置下未建立等价早期 INI consumer,不代表其他应用或扩展路径免疫
  • 多 worker、负载均衡和 worker 回收会降低 producer / consumer 命中同一 worker 的概率,但不是修复
  • 影响通常是 Web worker 权限下的内存泄露或代码执行,不自动等于 root、容器逃逸或宿主机控制
  • display_errors=Off、error_reporting 或 @ 只能影响展示/记录,不能阻止初始化前访问 stale state

修复与缓解

  • PHP 8.5 分支共同修复 commit:,标题 Avoid state corruption via bailout,同时修复本 CVE 和 CVE-2026-109618
  • 修复发行标签 php-8.5.12 指向 136e049ac10b032c83018e65b63b6df858943750
  • PHP 项目为 7.4、8.0、8.1 提供了最小源码回补;发行版或 LTS 厂商可能另有回补,旧版本需逐项核对
  • 完整修复是升级到含补丁的发行版并重启所有 PHP worker;仅更新磁盘上的包而保留旧 worker 不能证明已经生效
  • 临时降低已知路径风险:管理配置中关闭 session.upload_progress.enabled 并重启 worker;PHP 8.5 可关闭 fatal_error_backtraces
  • 这些配置只覆盖已知 producer/consumer,不能作为通用缓解;清理过时 INI、修复攻击者可达 fatal/timeout 也不能代替升级

PoC 与检测

  • PHP 安全团队报告在 mod_php、PHP-FPM 上有未认证 RCE 演示;Wiz 报告 fatal backtrace、OPcache 等实例及 CMS 演示;本笔记未独立运行验证
  • 公开候选仓库:,固定 commit 8508dbc910609e78cd8475bd3dd34b1c65585a66;poc1_109619.py 仅作静态资料,不代表可执行或完整 RCE
  • Snort SID 1:67360 的官方规则文档关联本 CVE,匹配 multipart、默认 upload-progress marker 和相关 header;规则存在不等于利用成功
  • Cloudflare 声称在披露前观察到 PHP2Shell 攻击尝试和载荷变异,并部署 WAF 防护;WAF 是额外防线,不能代替升级
  • Nuclei issue 查询时仍是 open 的模板请求,不能视为已发布模板
  • 观察线索:multipart、初始化前 warning/fatal/timeout、memory exhaustion、重复 HTTP 500、异常 PHPSESSID、worker churn 和 PHP/Apache worker 派生 shell;缺少这些日志不能排除利用
  • host-checker --integrity-only 不能检查 PHP 运行时状态、请求链、worker 行为或攻击后进程

参考

关联信息

反向链接、本文链接的其他页面和外部资料。

参考资料

GitHub5 条
其他外链6 条
最近更新commit c5df7af编辑