临时缓解无法完整修复

只有完整补丁覆盖所有已知变体。配置可在升级前降低特定路径的暴露,但可能影响上传、性能和可用性。必须在解析请求前由管理员强制应用,并重启全部进程。同时阅读两个 PHP 公告。CDN 或 WAF 只能辅助降低风险,不能证明解释器已修复。

谨慎调整内存设置

PHP 官方将管理层强制 memory_limit=-1 作为应对可控 PHP 内存限制错误的不完整临时措施;底层分配失败仍可进入漏洞路径。需使用容器或 cgroup 独立控制资源,降低可用性影响。不可改用 RLIMIT_AS 或 RLIMIT_DATA。应限制解码后的请求大小、multipart 头数、嵌套和分段数量;仅调低 post_max_size 仍不完整。

上传进度与错误回溯

在解析请求前设置 session.upload_progress.enabled=0 并重启全部进程,可阻止已确认的会话路径。PHP 8.5 的 fatal_error_backtraces=0 仅移除已确认的回溯产生路径。移除会触发早期诊断的无效或弃用逐请求配置。display_errors、error_reporting 或 @ 隐藏输出无法阻止残留状态漏洞,也无法覆盖所有变体。

按触发路径部署临时措施

优先打补丁。暂时无法升级时,在请求解析之前用管理级配置强制 session.upload_progress.enabled=0,然后重启工作进程。PHP 8.5 可用 fatal_error_backtraces=0 减少另一条消费路径。在最早能执行限制的层控制解码后的请求大小、multipart 部件和头数量、输入深度,并测试正常上传与接口。只关闭错误显示或日志,不能阻止有问题的诊断路径。

PHP2Shell 工具箱 →

内存控制和进程回收的局限

管理级强制 memory_limit=-1 只能去掉一部分 PHP 内存限制触发路径,仍需独立的 cgroup/容器资源约束,阻止应用改回有限值,并重启全部工作进程。不要用 RLIMIT_AS 或 RLIMIT_DATA 替代,分配器失败可能进入同一漏洞路径。pm.max_requests=1 可减少部分跨请求状态复用,但成本明显。这些设置都不能替代两个漏洞的完整补丁。

PHP2Shell 工具箱 →

命令示例 / PHP INI

php.ini
; Temporary measures only. Follow both PHP advisories.
; Apply administratively BEFORE request parsing, then restart workers.
session.upload_progress.enabled = 0
; PHP 8.5 only:
fatal_error_backtraces = 0

; memory_limit = -1 is NOT a complete fix.
; It needs independent OS/container resource containment.
; Never substitute RLIMIT_AS or RLIMIT_DATA.

一手来源与延伸阅读

PHP security teamSecurity advisory · 21 Oct 2026
CVE-2026-109618GHSA-w8hw-w9fx-j79w · OOM corruption
CVE-2026-109619GHSA-6wmf-4rv5-p3rp · Stale global state
下一步3. 重启并验证所有实例 ↗