严重 · CVSS 9.2补丁已于 2026-10-21 14:00 UTC 发布已出现早期攻击

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.128.5.12
8.4< 8.4.278.4.27
8.3< 8.3.368.3.36
8.2< 8.2.358.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。

现在就做

按这个顺序来。除此之外都不是完整修复。

  1. 01

    找出所有 PHP 运行环境

    Web 服务器、容器、基础镜像、虚拟主机、预发环境。CLI 的版本可能和 PHP-FPM 或 Apache 实际使用的不一样。

    怎么做
  2. 02

    安装已修复版本

    8.5.12 · 8.4.27 · 8.3.36 · 8.2.35,或发行版的已修复软件包。升级 WordPress / Drupal / Laravel 不会升级 PHP。

    怎么做
  3. 03

    重启所有运行 PHP 的进程

    PHP-FPM 池、Apache(mod_php)、FrankenPHP、队列 worker、Octane / RoadRunner / Swoole。旧进程会一直把旧代码留在内存里。

    怎么做
  4. 04

    验证,然后回头排查

    确认 Web 服务器报告的版本。检查 2026 年 10 月初以来的日志,发现异常就轮换密钥。

    怎么做

今天没法升级?临时缓解措施 可以降低已知攻击路径的风险。用的是虚拟主机?请看 主机商指南。

按你的环境查看指南

是否已被利用?

截至 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 无法证实其中任何一个可用——请把它们当作不可信、可能带有恶意的代码。

已下线的机构(BambooHR、DigiD……)→

哪些服务器部署方式受影响

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)。

时区补丁发布时间
UTC14:00
美国太平洋时间(PDT,UTC−7)07:00
美国中部时间(CDT,UTC−5)09:00
美国东部时间(EDT,UTC−4)10:00
英国(BST,UTC+1)15:00
中欧夏令时(CEST,UTC+2)16:00
印度(IST,UTC+5:30)19:30
北京 / 香港 / 新加坡(UTC+8)22:00
日本(JST,UTC+9)23:00
悉尼(AEDT,UTC+11)01:00

攻击者能做什么

无需登录即可执行代码

以 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 一览

事件经过

  1. 2026-10-20 15:00 UTCCVE 编号开始在论坛和社交媒体上流传,并附带错误的 CVSS 10.0 分。
  2. 2026-10-20 19:30 UTCPHP 提前发布预告。
  3. 2026-10-20 ~20:00 UTCCalif 误发布了一段展示其概念验证(PoC)的视频。
  4. 2026-10-20 23:00 UTC缓解建议发给了部分关键基础设施运营方,可能已经外泄。
  5. 2026-10-21 03:02 UTCCloudflare WAF 规则对所有套餐(含免费版)生效。
  6. 2026-10-21 07:41 UTCChainguard 发布已修复镜像,比禁令解除时间早了 6 个多小时。
  7. 2026-10-21 11:51 UTCBambooHR 出于预防主动停服(美国、加拿大、爱尔兰)。
  8. 2026-10-21 (CEST)荷兰政府和教育机构网站(包括 DigiD 和 MijnOverheid)出于预防下线。
  9. 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 日发布。
  10. 2026-10-21 15:03 UTCBambooHR 表示补丁已应用,正在测试。

从 2024 年审计开始的完整时间线 → · 与 2021 年的 Java 漏洞对比:PHP2Shell vs Log4Shell →