2026 年 10 月 21 日,PHP 官方发布紧急安全更新,修复被社区称为 php2shell 的两个严重远程代码执行漏洞:CVE-2026-109618 与 CVE-2026-109619。这两个漏洞的 CVSS v4.0 评分均为 9.2,攻击者无需登录即可在受影响服务器上执行任意代码。
漏洞基本信息
| 漏洞名称 | PHP 远程代码执行漏洞(php2shell) |
| 漏洞编号 | CVE-2026-109618、CVE-2026-109619 |
| 公开时间 | 2026-10-21 |
| CVSS v4.0 | 9.2(高危) |
| 威胁类型 | 远程代码执行(RCE),无需认证 |
| 修复版本 | PHP 8.5.12 / 8.4.27 / 8.3.36 / 8.2.35 |
| 在野利用 | 已监测到早期攻击尝试 |
漏洞成因
两个 CVE 对应 两个独立的根因,并非同一条利用链:
- CVE-2026-109618:PHP 在处理内存不足(OOM)时使用
longjmp()退出当前上下文,但此时请求数据可能尚未完全初始化,导致关闭流程读取到无效状态。 - CVE-2026-109619:请求的内部状态在底层内存被释放后仍可能残留,同一 worker 进程处理的后续请求可能在状态重置前使用这些陈旧数据。
攻击面涉及 session.upload_progress 处理路径(自 PHP 5.4 引入且默认开启),处理发生在应用脚本执行之前,因此所有处理 Web 请求的 PHP 部署均受影响,包括 PHP-FPM、Apache mod_php、php-cgi、FrankenPHP 和 LiteSpeed。
其中
mod_php风险最高——Apache 在请求启动失败时会无条件调用关闭流程,未认证请求触发的内存破坏可在任何应用代码运行前被关闭流程处理,形成"应用无关"的攻击路径。
影响范围
据 Palo Alto Networks Unit 42 遥测,公告发布时全球暴露面约 2260 万 个实例。 以 PHP 为运行时的应用与框架间接受影响,包括 WordPress、MediaWiki、phpBB、Magento、Laravel、Symfony、Drupal 等。
修复方案
升级是唯一完整修复方案,没有任何配置层面的措施能构成完整缓解。
- 升级至 PHP 8.5.12 / 8.4.27 / 8.3.36 / 8.2.35,更新后重启 PHP 服务进程。
- PHP 8.1 及更早版本已停止官方支持。PHP 安全团队为 7.4 / 8.0 / 8.1 发布了最小化源码向后移植补丁,供从源码编译的用户使用。
- 使用
rpms.remirepo.net仓库的用户建议切换至发行版官方源或源码编译,该仓库在补丁发布当日未提供更新。 - 容器环境需更新 PHP-FPM 镜像并重建容器,不要遗漏开发、测试环境。
临时缓解措施
以下措施仅能降低被利用概率,不能替代升级:
; php.ini
session.upload_progress.enabled = Off
session.use_strict_mode = 1
post_max_size = 8M
upload_max_filesize = 8M
修改后重载 php-fpm 或 apache。WAF 层面可对 multipart/form-data POST 请求增加速率限制,Cloudflare 已对所有客户(含免费版)开放针对已知利用向量的防护规则。
自查命令
# 查看 PHP 版本
php -v
# 检查 session.upload_progress 配置
php -i | grep session.upload_progress
# 清点 PHP-FPM 进程
ps aux | grep php-fpm
# 检查 Docker 中 PHP 实例
docker ps --filter "ancestor=php" --format "{{.Names}} {{.Image}}"
# 排查异常外联
ss -antp | grep ESTABLISHED
一句话总结
这是 PHP 项目十余年来面临的最严峻安全考验之一。 所有处理 Web 请求的 PHP 实例都需要升级——包括面板内置的、容器里的、以及你以为"没跑业务"的测试环境,一个都别漏。
参考来源:奇安信 CERT / PHP 官方安全公告 / CERT-EU / Unit 42 / Cloudflare