· adswds-team · 安全 · 6 min read
同一 worker 上的下一跳:PHP CVE-2026-109619 过期全局状态 RCE
PHP 2026-10-21 第二枚严重漏洞 CVE-2026-109619(CVSS 4.0 9.2):请求堆释放后,worker 仍握着过期全局状态。会话上传进度路径已在 mod_php 与 FPM 上验证 RCE。

PHP 安全公告(2026-10-21)把 CVE-2026-109619 和内存耗尽那枚并列:请求自己拥有的内部状态,在背后的内存已经释放之后还能留下来;同一个 worker 上的后续请求,会在正常初始化把它清掉之前用到这份过期状态。GHSA-6wmf-4rv5-p3rp 的确认影响是:未授权的堆 use-after-free、内存泄露,以及以 Web 工作进程权限执行的远程代码执行。评级同为 Critical,CVSS 4.0 9.2。
一句话:FPM 子进程不会在每个请求之后失忆;这次失忆没做完。
它和 CVE-2026-109618 同批修复,但生产者/消费者不同。只做了 memory_limit=-1 并不覆盖这里的会话路径。
一、Advisory 确认了什么
| 项 | 内容 |
|---|---|
| 编号 | CVE-2026-109619 / GHSA-6wmf-4rv5-p3rp |
| 受影响 | 8.2.35、8.3.36、8.4.27、8.5.12 之前 |
| 修复 | 8.2.35、8.3.36、8.4.27、8.5.12 |
| 条件 | 需要「生产者」把请求内存登记到 worker 全局,再加「消费者」在下一次正常初始化之前读到它 |
| 同一 worker | 多 worker 和回收会降低单次成功率,不会消除条件 |
| 8.5 回溯 | fatal_error_backtraces 开启时,致命错误回溯状态在关闭阶段总会漏掉重置;这是已确认的 mod_php RCE 基础 |
| 会话上传进度 | 默认开启,不需要应用调用 session_start()。此路径的 RCE 已在 mod_php 和 FPM 上验证 |
| 其他状态 | 错误、异常、对象和扩展状态是否可达,取决于应用、扩展和状态发布点;补丁把更宽的重置一起做了 |
致命错误(解析/编译失败、未捕获错误、require 失败、Maximum execution time exceeded)以及 OOM,都可以在重置之前打断生产者。非致命诊断也能在关闭后期把错误状态重新填回去。Advisory 写明:改 error_reporting、使用 @、关掉 display_errors 或 log_errors,挡不住初始化前对过期错误状态的访问。
FPM 侧:池配置和 .user.ini 不是这条「初始化前消费者」。nginx 或 Apache mod_proxy_fcgi 若下发会在初始化前产生诊断的 PHP_VALUE / PHP_ADMIN_VALUE,才会有条件暴露 INI 诊断路径。已验证的 FPM 会话路径是另一条:启动成功之后在应用执行中发布状态,遇到致命错误,再由下一次请求的会话上传进度提前消费。
二、修复与不能当成修复的配置
完整修复是带上「状态重置」补丁的上述版本。PHP 项目对 8.1 及更旧不再发常规更新;公告称已为 7.4 / 8.0 / 8.1 提供最小源码 backport,发行版包以供应商为准。8.2 于 2026-12-31 停止安全更新。rpms.remirepo.net 在公告日没有现成包。
暂时升不了时,官方给出的是不完整缓解:
-
session.upload_progress.enabled=0写在php.ini、FPM 池或请求解析前生效的服务器配置里,并重启全部 worker。不要靠ini_set()或 FPM.user.ini。这挡住已确认的会话路径,不挡住其他变体。 - 仅 PHP 8.5:
fatal_error_backtraces=0并重启 worker。只去掉已确认回溯生产者。 - 去掉会在初始化前报警的无效或弃用配置(例如旧的
assert.*、旧 session 项、auto_detect_line_endings等,清单以 Advisory 为准)。隐藏诊断没有用。 - 性能允许时可用
pm.max_requests=1,减少状态跨请求存活的机会。这不是通用修复。 - 审计日志时临时打开
log_errors、可用的error_log和E_ALL。日志里没有错误,不等于安全——失败可能发生在写出日志之前,历史日志也可能滤掉了 deprecation。 - 同时处理 CVE-2026-109618。
三、和投放节点的关系
落地页主机若是「nginx → PHP-FPM」,这次和 mod_php 那枚不一样:会话上传进度路径已经在普通动态 FPM 池上验证过 RCE。上传进度默认开着,落地表单、素材上传、跟踪回调只要打到同一个 worker,就落在 Advisory 描述的条件里。具体还要有一次中断,所以不是「任意 GET 必中」,但也不是只有开启了 session_start() 的业务才该管。
访客过滤看的是流量结构。worker 里残留的上一请求状态,规则引擎看不见。先重启到 8.3.36(或你所在分支的修复版),再核对 session.upload_progress。
四、小结
CVE-2026-109619 修的是请求边界上的过期全局状态。8.5 的致命错误回溯路径打穿了 mod_php;会话上传进度路径打穿了 mod_php 和 FPM。修复版本与 10 月 21 日另一枚 RCE 相同。配置缓解按路径生效,不能互相替代。



