PHP2Shell 是 PHP 自身的认证前远程代码执行漏洞。升级 PHP,然后重启它。
PHP 引擎中的两个内存安全漏洞(CVE-2026-109618、CVE-2026-109619)让未经认证的攻击者可以执行代码或读取服务器内存——密码、API 密钥、会话令牌——几乎影响 5.4 以来的所有 PHP 版本,与上层运行什么应用无关。
不懂技术?请看 PHP2Shell 通俗解读——它对你的网站或你在用的 SaaS 工具意味着什么。
最后核实 2026-10-22 · 独立、厂商中立
粘贴版本号、php -v 的输出,或每行一个版本批量检测整批服务器。完全在你的浏览器内运行。
CLI 和 Web 服务器可能使用不同的 PHP 构建。请检查 Web 服务器实际使用的版本:php-fpm -v(或 php-fpm8.3 -v),或在该站点上访问 phpinfo()。
| 分支 | 存在漏洞 | 修复版本 |
|---|---|---|
| 8.5 | < 8.5.12 | 8.5.12 |
| 8.4 | < 8.4.27 | 8.4.27 |
| 8.3 | < 8.3.36 | 8.3.36 |
| 8.2 | < 8.2.35 | 8.2.35 |
| 8.1 · 8.0 · 7.4 | 全部 | 仅源码回移植 |
| 5.4 – 7.3 | 全部 | 无修复 |
PHP 8.2 将于 2026-12-31 结束安全支持
升级到 8.2.35 可以修复 PHP2Shell,但 2026 年底前你还得再迁移一次。既然要动,不如直接升到 8.4 或 8.5。
现在就做
按这个顺序来。除此之外都不是完整修复。
- 01
找出所有 PHP 运行环境
Web 服务器、容器、基础镜像、虚拟主机、预发环境。CLI 的版本可能和 PHP-FPM 或 Apache 实际使用的不一样。
怎么做 - 02
安装已修复版本
8.5.12 · 8.4.27 · 8.3.36 · 8.2.35,或发行版的已修复软件包。升级 WordPress / Drupal / Laravel 不会升级 PHP。
怎么做 - 03
重启所有运行 PHP 的进程
PHP-FPM 池、Apache(mod_php)、FrankenPHP、队列 worker、Octane / RoadRunner / Swoole。旧进程会一直把旧代码留在内存里。
怎么做 - 04
验证,然后回头排查
确认 Web 服务器报告的版本。检查 2026 年 10 月初以来的日志,发现异常就轮换密钥。
怎么做
按你的环境查看指南
- WordPress你的 WordPress 网站受 PHP2Shell 影响吗?如何在“站点健康”里查看 PHP 版本、为什么更新插件没用,以及发给主机商的工单模板。
- Drupal你的 Drupal 网站受 PHP2Shell 影响吗?如何在状态报告或用 Drush 查看 PHP 版本、为什么升级 Drupal 不能修复,以及该向主机商问什么。
- Joomla你的 Joomla 网站受 PHP2Shell 影响吗?如何在“系统信息”里查看 PHP 版本、为什么升级 Joomla 不能修复,以及该向主机商问什么。
- 主机商使用虚拟主机或托管主机时你无法自己升级 PHP。如何在 cPanel、Plesk 等面板里查看和切换 PHP 版本、各主机商的公开表态,以及该向他们问什么。
- Cloudflare WAFCloudflare 针对 PHP2Shell 的免费版与付费版 WAF 规则 ID、如何确认规则已启用并处于拦截状态,以及为什么在 Cloudflare 后面仍然必须升级 PHP。
- session.upload_progress为什么关闭 session.upload_progress 只能部分缓解 PHP2Shell,要在哪里设置才真正生效(不能用 .user.ini 或 ini_set),如何检查,以及改完要重启什么。
是否已被利用?
截至 2026-10-22 的情况。各方说法不一;请默认有能力的攻击者已经掌握可用的利用代码。
- Cloudflare(CTO Dane Knecht):“We are seeing early attacks emerging and are updating mitigations as new vectors show up.”(我们看到早期攻击正在出现,并随新攻击路径不断更新防护。)
- watchTowr 称截至 10 月 21 日,其蜜罐网络已观察到在野利用。
- 荷兰 NCSC 当时未发现滥用,并将所有暴露在互联网上的 PHP 系统视为存在漏洞,直到打上补丁。
- 尚无公开的已证实成功入侵案例,两个 CVE 也都未列入 CISA KEV 目录。
- GitHub 上流传着多个所谓 “PoC” 仓库。Tenable 无法证实其中任何一个可用——请把它们当作不可信、可能带有恶意的代码。
哪些服务器部署方式受影响
mod_php 最容易被利用,但所有处理 Web 请求的 SAPI 都需要打补丁。
| 部署方式 | …109618 | …109619 | 说明 |
|---|---|---|---|
| Apache + mod_php | 已证实 RCE | 已证实 RCE | 两个 CVE 均已在默认限制下验证可达 RCE。风险最高的部署方式。 |
| PHP-FPM(nginx、Apache、Caddy……) | 存在风险 | 已证实 RCE | 已在 FPM 上验证通过会话生命周期实现 RCE;OOM 路径已通过应用层代码路径证实,但尚无公开的通用 FPM 利用。 |
| FrankenPHP / LiteSpeed LSAPI | 很可能受影响 | 很可能受影响 | 公告评估为很可能受影响。常驻 worker 只会让跨请求残留状态的问题更突出。 |
| CLI(cron、队列 worker、artisan) | 公告未涉及 | 公告未涉及 | 公告未讨论,正常使用时也无法通过 HTTP 请求触达。但仍要升级——它们来自同一个软件包。 |
补丁在我所在时区是几点发布的?
PHP 于 2026 年 10 月 21 日(周二)14:00 UTC 发布修复版本,即北京时间 22:00。当天美国和欧洲仍在夏令时,所以大家搜的 “EST” 实际上是 EDT(UTC−4)。
| 时区 | 补丁发布时间 | 日期 |
|---|---|---|
| UTC | 14:00 | 2026 年 10 月 21 日(周二) |
| 美国太平洋时间(PDT,UTC−7) | 07:00 | 10 月 21 日 |
| 美国中部时间(CDT,UTC−5) | 09:00 | 10 月 21 日 |
| 美国东部时间(EDT,UTC−4) | 10:00 | 10 月 21 日——搜索 “EST” 的人指的就是这个 |
| 英国(BST,UTC+1) | 15:00 | 10 月 21 日 |
| 中欧夏令时(CEST,UTC+2) | 16:00 | 10 月 21 日——荷兰、比利时、卢森堡、德国、奥地利、法国…… |
| 印度(IST,UTC+5:30) | 19:30 | 10 月 21 日 |
| 北京 / 香港 / 新加坡(UTC+8) | 22:00 | 10 月 21 日 |
| 日本(JST,UTC+9) | 23:00 | 10 月 21 日 |
| 悉尼(AEDT,UTC+11) | 01:00 | 10 月 22 日 |
攻击者能做什么
无需登录即可执行代码
以 PHP worker 用户(如 www-data)身份执行代码:植入 Webshell、窃取数据、篡改页面、横向移动。
读取其他请求的内存
worker 内存里可能有数据库密码、API 密钥、会话 Cookie、TLS 密钥材料以及其他用户提交的表单数据。
悄无声息地泄露数据
内存泄露路径不需要执行代码,所以监控恶意进程的工具可能完全不会报警。
常见误区
最容易让你“以为安全了”的几种情况。
| 如果你以为…… | 实际上 |
|---|---|
| “我已经更新了 WordPress / 插件。” | 漏洞在 PHP 解释器里,应用更新碰不到它。即使是运行在有漏洞 PHP 上的一个 “Hello World” 脚本也会受影响。 |
| “我已经设置了 session.upload_progress.enabled = 0。” | 这只能挡住其中一个 CVE 的部分已证实路径,对 CVE-2026-109618 完全无效。PHP 核心开发者明确表示唯一的缓解办法就是升级。 |
| “我跑过 apt upgrade 了,搞定。” | 正在运行的 PHP-FPM / Apache 进程在重启之前,内存里仍是旧的二进制。 |
| “php -v 显示已经修复了。” | 那是 CLI。Web 服务器可能用的是另一个软件包、容器或版本。请检查 php-fpm -v 或 phpinfo()。 |
| “我在 Cloudflare / WAF 后面。” | WAF 规则能降低已知载荷的风险,但攻击者已经在变形绕过,而且源站往往可以被直连。它只是争取时间,不是修复。 |
| “我的版本号看起来很旧,肯定有漏洞。” | 不一定。Debian、Ubuntu 和 RHEL 会在不改上游版本号的情况下回移植补丁。请查看软件包的 changelog。 |
两个 CVE 一览
事件经过
- 2026-10-20 15:00 UTCCVE 编号开始在论坛和社交媒体上流传,并附带错误的 CVSS 10.0 分。
- 2026-10-20 19:30 UTCPHP 提前发布预告。
- 2026-10-20 ~20:00 UTCCalif 误发布了一段展示其概念验证(PoC)的视频。
- 2026-10-20 23:00 UTC缓解建议发给了部分关键基础设施运营方,可能已经外泄。
- 2026-10-21 03:02 UTCCloudflare WAF 规则对所有套餐(含免费版)生效。
- 2026-10-21 07:41 UTCChainguard 发布已修复镜像,比禁令解除时间早了 6 个多小时。
- 2026-10-21 11:51 UTCBambooHR 出于预防主动停服(美国、加拿大、爱尔兰)。
- 2026-10-21 (CEST)荷兰政府和教育机构网站(包括 DigiD 和 MijnOverheid)出于预防下线。
- 2026-10-21 14:00 UTC协调发布:PHP 8.5.12、8.4.27、8.3.36、8.2.35,并为 7.4、8.0、8.1 提供源码回移植。原定 10 月 22 日发布。
- 2026-10-21 15:03 UTCBambooHR 表示补丁已应用,正在测试。
从 2024 年审计开始的完整时间线 → · 与 2021 年的 Java 漏洞对比:PHP2Shell vs Log4Shell →