导读
昨天(2026 年 10 月 21 日),PHP 官方紧急发布了安全更新,修复了两个潜伏超过十年的高危漏洞。安全社区给它们起了个名字:PHP2Shell。
CVSS 评分 9.2 分(满分 10 分),属于最高危等级。攻击者不需要任何登录凭证,只要服务器跑着 PHP,一个精心构造的 HTTP 请求就能拿到服务器控制权。
PHP 驱动着全球约 70% 的网站——WordPress(约占全球网站的 40%)、Laravel、Drupal、Joomla、Magento,主流 PHP 框架和 CMS 无一幸免。
更值得注意的是:这两个漏洞是 AI 模型找出来的,而非传统安全审计。
两个漏洞到底是什么
PHP2Shell 包含两个独立的漏洞,编号分别是 CVE-2026-109618 和 CVE-2026-109619。都是内存安全问题,分别利用了 PHP 引擎中两个不同的设计缺陷。
漏洞一:内存溢出导致代码执行(CVE-2026-109618)
PHP 有一个配置项 memory_limit,限制每个请求能用多少内存。当内存超限时,PHP 用 C 语言里的 longjmp() 机制强制中断执行,抛出 OOM(Out of Memory)错误。
问题出在中断时机。如果中断发生在 PHP 引擎处理请求数据的过程中——比如正在解析文件上传——内部数据结构可能只初始化了一半。 但后续的清理流程并不知道,它把这些半成品当正常数据处理,去释放未初始化的内存指针,直接导致内存损坏。
攻击者可以精确控制这个损坏过程,最终实现任意代码执行。
漏洞二:全局状态残留劫持(CVE-2026-109619)
PHP-FPM 这类运行模式下,一个 worker 进程会连续处理多个请求。正常流程是每个请求结束后,所有状态彻底清除。
但当前一个请求发生致命错误或异常中断时,某些内部状态——全局指针、缓存的类信息等——可能没被正确清理。 这些残留状态指向的内存已经被释放,但指针还在。下一个请求进来时,如果在初始化完成前碰到了这些野指针,就会访问已释放的内存,触发经典的 use-after-free。
攻击手法是:先发一个触发致命错误的请求来污染 worker 进程,再发第二个请求利用残留状态执行代码。
攻击者怎么打
这组漏洞最危险的地方在于:攻击发生在 PHP 引擎解析请求的阶段,在应用的任何一行代码执行之前就已经完成了。 WAF 规则、框架中间件、输入验证——全都来不及。
触发手法
攻击者通过构造恶意的 multipart 文件上传请求来触发 OOM,几种已知策略:
1. 灌 multipart headers
上传请求的每个 part 中注入大量 HTTP headers。这些 headers 在传输层占字节很少,但 PHP 内部为每个 header 分配的内存结构膨胀率远大于原始数据,可以绕过 post_max_size 限制直接打爆 memory_limit。
2. 空文件控件
空的文件上传控件(没有选择文件的 file input)不计入 max_file_uploads 限制,但引擎仍然为每个空控件创建完整的元数据数组。一个请求里塞几千个空控件就够了。
3. 深度嵌套字段名
利用 PHP 对 field[a][b][c][d]... 这种嵌套字段名的解析行为,每层嵌套都会指数级增加哈希表和数组的内存分配。
不同部署方式的风险差异
| 部署方式 |
风险等级 |
原因 |
| Apache mod_php |
极高 |
请求解析失败后仍会执行完整的 shutdown 流程,直接触发内存损坏 |
| PHP-FPM |
高 |
启动阶段 OOM 通常会杀 worker,但启动后的 OOM 仍可利用;残留状态攻击对 FPM 尤其有效 |
| LiteSpeed |
高 |
持久化 worker 模式,与 FPM 类似 |
| FrankenPHP |
高 |
同为持久化 worker |
| CGI/FastCGI |
中 |
每请求独立进程,残留状态利用受限,但 OOM 攻击仍有效 |
攻击者只需找到任何一个能接受 HTTP POST 的 PHP 端点就行。 哪怕这个端点只有一行 <?php echo "ok";——漏洞触发点在引擎解析请求体的阶段,根本不需要应用层配合。
谁发现的,为什么这次格外值得关注
比漏洞本身更有意思的,是发现方式。
三个团队联合发现了 PHP2Shell:
- Calif(一家精品攻防安全公司):2026 年 8 月受 OpenAI Patch the Planet 计划邀请,用 GPT-5.6 Sol 模型辅助审计 PHP 源码,最先找到了 RCE 路径
- Wiz Research(云安全公司):几周后独立发现了变体,使用了 Google Gemini 4 Argon 和 GPT-5.6 Sol 的组合
- OpenAI:通过 Patch the Planet 计划协调和资助了整个审计
OpenAI 的 Patch the Planet 是一个旨在把安全研究员和关键开源软件配对的项目,目标是在恶意攻击者之前找到漏洞、推动修复。OpenAI 还为此投入了 10 亿美元,以补贴价格向安全防御组织提供 AI 模型访问。
这两个藏了十几年的底层内存安全漏洞,被 AI 辅助找了出来。 人类安全研究员审计 PHP 核心代码这么多年,没发现这个攻击路径——AI 模型 在几周内完成了。
这件事的意义超越 PHP。它是 AI 辅助安全审计从论文走向实战的一个标志性案例。
哪些网站受影响
- PHP 驱动全球约 70% 的已知服务端网站
- WordPress 约占全球网站的 40%,全部基于 PHP
- Laravel、Symfony、CodeIgniter 等主流框架的所有项目
- Drupal(政府和企业常用)、Joomla、Magento(电商场景)
- 大量内部管理后台、OA 系统、API 服务
受影响版本范围很广:从 PHP 5.4 一直到最新的 8.5 版本。 PHP 8.2、8.3、8.4、8.5 有官方补丁;8.1 及以下已停止维护,不会收到安全更新。
| 场景 |
风险 |
说明 |
| 公网 WordPress 站点 |
极高 |
最大的 PHP 应用群体,不少站点更新不及时 |
| 企业内部 PHP 系统 |
高 |
常跑老版本,更新流程慢 |
| 电商平台(Magento 等) |
极高 |
直接涉及支付和用户数据 |
| 政府和教育机构 |
高 |
Drupal 用户多,更新响应通常较慢 |
| 个人博客和小站 |
中高 |
被自动化扫描器命中的概率高 |
| 纯 JSON API(不接受文件上传) |
中 |
CVE-2026-109618 需要 multipart 请求触发,但 CVE-2026-109619 仍然有效 |
已经有人被打了
Cloudflare 和 watchTowr 的遥测数据显示,10 月 20 日漏洞细节在 Hacker News 和社交媒体上提前泄露后,已有活跃的野外利用尝试和载荷变体被观测到。
多个欧洲政府网站在补丁发布后临时下线紧急部署更新。FBI、CISA(美国网络安全与基础设施安全局)和英国 NCSC 都发布了紧急安全通告。
怎么判断自己是否受影响
运行下面的命令查看 PHP 版本:
php -v
如果版本低于下表中的任何一个,需要立即更新:
| 分支 |
安全版本 |
| PHP 8.5 |
8.5.12 |
| PHP 8.4 |
8.4.27 |
| PHP 8.3 |
8.3.36 |
| PHP 8.2 |
8.2.35 |
PHP 8.1 及以下版本不会收到官方补丁。 升级到受支持的 8.x 分支是唯一根本解决办法。
升级命令
# Debian/Ubuntu
sudo apt update && sudo apt upgrade php
# RHEL/AlmaLinux/Rocky
sudo dnf update php
# Docker 用户更新基础镜像中的 PHP 版本
临时缓解(不能替代升级)
PHP 官方明确表示:没有配置层面可以完全替代升级的缓解措施。但在升级之前可以做一些临时防护:
- 在 WAF 上拦截异常大的 multipart 请求和深度嵌套字段名
- 限制公网直接访问 PHP 端点,必要时临时下线高危服务
- 降低
max_file_uploads 配置值
- 检查访问日志中是否有异常大的 POST 请求(尤其 multipart 类型)
- 排查是否有异常进程、新文件、被修改的文件——攻击者可以通过内存读取获得数据库凭证和 API 密钥
谁需要关注
必须立即行动的: 所有 PHP 网站的运维和系统管理员、使用 WordPress/Laravel/Drupal/Magento 的团队、云服务和托管服务商、安全团队。
应该了解的: 技术负责人(这个漏洞不能等)、使用 cPanel/Plesk 等托管面板的站长(联系主机商确认是否已更新)、任何在服务器上跑 PHP 的开发者。
关键结论
- PHP2Shell 是近年最严重的 Web 安全漏洞之一,CVSS 9.2,波及全球约七成网站的底层运行时
- 攻击门槛极低:无需认证,一个 HTTP 请求搞定,而且在应用代码执行之前就已经生效——传统应用层防御无法拦截
- 已有野外利用:漏洞细节提前泄露后,攻击者已在积极扫描
- 升级 PHP 是唯一的根本解决办法,没有配置层面的完美缓解方案
- AI 辅助安全审计交出了一份有说服力的成绩单:两个藏了十几年的底层漏洞,传统审计没摸到,AI 模型在几周内定位出来
PHP2Shell 给全球 PHP 使用者敲响了警钟。后续的技术分析与应急响应方案,可以到 云栈社区 与安全从业者持续交流。