PHP2Shell:一次内存错误,怎样变成远程执行?
SECURITY EXPLAINED01 / 16
PHP2Shell
一次内存错误
怎样变成远程执行?
PHPREQUEST ENGINE
9.2CVSS v4.0 · 严重
2026.10.21 公开修复
CVE-2026-109618
CVE-2026-109619
来源:PHP 官方安全公告 ↗
01 / THE REQUEST02 / 16
业务代码之前,
PHP 已经在工作
HTTP 请求来自网络
↓PHP 请求启动输入解析 · 内部状态
↓业务脚本你的应用逻辑
↓请求清理释放本次请求的内存
来源:PHP 官方安全公告 ↗
02 / THE MEMORY MODEL03 / 16
请求结束了,
工作进程还活着
WORKER · 持续存活
请求 A→请求 B
全局状态 G↘请求内存
先清引用→再释放
长寿命的引用,
不能指着已结束的请求。
来源:CVE-2026-109619 官方技术公告 ↗
03 / CVE-2026-10961804 / 16
初始化做了一半,
突然跳出去
REQUEST STATE
已初始化已初始化未完成未完成
OOM内存分配失败
继续初始化longjmp() ↘进入清理路径
结构已可访问,初始化却被打断。
来源:CVE-2026-109618 官方技术公告 ↗
04 / WHY LIMITS ARE NOT ENOUGH05 / 16
传输的大小,
不等于内存开销
HTTP 数据
传输体积
⇣
结构数组字符串元数据索引状态
解析会展开数据。
示意图不表示固定的放大倍数。
来源:CVE-2026-109618 官方技术公告 ↗
05 / CLEANUP IS CODE TOO06 / 16
出错后的清理,
仍然会读内存
半初始化状态本来不该被当成有效对象
↓清理逻辑读取它读取 · 分支 · 释放
↓内存损坏严重时可演变为代码执行
影响取决于构建、扩展与内存布局。
来源:CVE-2026-109618 官方技术公告 ↗
06 / CVE-2026-10961907 / 16
内存已经释放,
引用却留了下来
请求 A留下内部状态
结束内存释放 · 引用残留
请求 B初始化前读取旧状态
USE AFTER FREE同一个工作进程跨请求复用
来源:CVE-2026-109619 官方技术公告 ↗
07 / TWO CONFIRMED PATHS08 / 16
哪些状态,
可能留到下一次?
ERROR STATE致命错误回溯
PHP 8.5 的
请求级回溯状态
SESSION STATE上传进度
早于常规初始化的
会话处理
每条路径仍有各自的触发条件。
来源:CVE-2026-109619 官方技术公告 ↗
08 / FROM STALE TO DANGEROUS09 / 16
同一个位置,
已经换了内容
旧引用 G ─────────┐
原来的请求对象已释放
同一内存区域新的数据
仍被当成旧对象读取 ↗
信息泄露内存损坏 / RCE
房卡是原理类比,不是利用步骤。
来源:Wiz 原始研究 ↗
09 / TWO FAILURE WINDOWS10 / 16
两种错误,
两段危险时间
01还没准备好109618 · OOM 状态损坏初始化 ━ ✕ ━ 清理
02早已不再有效109619 · 遗留全局状态释放 ━ ✕ ━ 下次使用
来源:PHP 官方安全公告 ↗
10 / EXPOSURE ≠ SAME EXPLOIT11 / 16
运行方式不同,
风险路径也不同
Apache mod_php已验证存在业务代码执行前的路径
PHP-FPM有条件会话路径已验证;依赖应用操作
其他 Web 运行方式按官方与供应商公告评估
“路径不同”不等于“无需更新”。
来源:CVE-2026-109619 官方技术公告 ↗
11 / WHAT THE PATCH CHANGES12 / 16
把安全边界,
放回生命周期里
A安全地退出
软 OOM → VM 安全点
硬 OOM → 立即结束进程
B彻底清理引用
请求结束时重置状态
不把失效指针留给下一次
来源:CVE-2026-109618 官方技术公告 ↗
12 / FIXED RELEASES13 / 16
更新的是 PHP,
不只是网站应用
PHP 8.28.2.35
PHP 8.38.3.36
PHP 8.48.4.27
PHP 8.58.5.12
或对应分支更新版本 / 厂商已回移补丁的包。
容器、主机、托管平台
都要确认实际 PHP 运行时。
来源:PHP 官方发布与下载 ↗
13 / TEMPORARY MITIGATIONS14 / 16
缓解措施,
都有覆盖边界
收紧暴露面入口访问控制 · 请求资源限制
阻断部分已知路径上传进度 · 8.5 致命错误回溯
仍需完整补丁隐藏错误信息不会清除失效状态
具体配置与重启要求,以官方公告为准。
来源:PHP 官方安全公告 ↗
14 / VERIFY THE RUNNING SYSTEM15 / 16
包更新了,
还要验证进程
01盘点主机 · 容器 · Web SAPI
02更新并重启确保旧 worker 退出
03验证与排查实际运行版本 · 错误与崩溃
验证线上服务,不能只看 php -v。
来源:PHP 官方安全公告 ↗
15 / TAKEAWAY & SOURCES16 / 16
异常结束,
也必须安全。
安全退出 · 清除失效状态
更新 → 重启 → 验证
01PHP 官方安全公告↗02CVE-2026-109618 官方技术公告↗03CVE-2026-109619 官方技术公告↗04Wiz 原始研究↗05PHP 官方发布与下载↗
核验日期:2026.10.22
图示为原理模型 · 以官方最新公告为准
来源:PHP 官方安全公告 ↗