云计算百科
云计算领域专业知识百科平台

PHP 炸了!两个 CVSS 9.2 致命漏洞,无需登录就能控制服务器——手把手修复指南

PHP 炸了!两个 CVSS 9.2 致命漏洞,无需登录就能控制服务器——手把手修复指南

2026 年 10 月 21 日,PHP 官方紧急发布安全版本,修复了两个可被未认证攻击者直接远程代码执行(RCE)的致命漏洞(代号 php2shell:CVE-2026-109618 / CVE-2026-109619,CVSS v4.0 均为 9.2)。
全球多国政府网站被迫临时下线,安全机构已监测到在野利用。本文是一份照做就能完成的修复手册:先讲后果,再给步骤,最后附排查清单。

一、这次漏洞有多严重?

一句话:攻击者不需要登录、不需要利用你业务代码里的任何漏洞,只发一个构造过的 HTTP 请求(比如一个超大 multipart POST),就能在服务器上执行任意代码。

严重性体现在四点:

  • 影响面极广:所有对外提供 Web 请求的 PHP 环境都受影响——PHP-FPM、Apache mod_php、php-cgi、FrankenPHP、LiteSpeed 全部中招。其中 mod_php 风险最高,一个未认证请求即可在业务代码执行之前触发攻击。
  • 版本跨度极大:从 PHP 5.4 到 8.5 之前的几乎所有版本都受影响(官方确认可追溯至 PHP 5.4)。
  • 已在真实世界被利用:Unit 42 监测到全球超 2260 万个暴露节点面临威胁,Cloudflare 已观察到早期攻击;补丁公开后 PoC 迅速流传,攻击者还能逆向补丁加速攻击。
  • 已有真实战例:荷兰、芬兰、比利时、德国、法国等多国政府机构网站因无法及时修复而临时下线。
  • 两个漏洞的原理(不用深究也能理解的程度):

    漏洞编号问题类型一句话解释
    CVE-2026-109618 OOM 内存破坏 请求触发内存耗尽时,PHP 提前退出,但内部数据只初始化了一半,清理时把它当有效数据处理 → 内存破坏 → RCE
    CVE-2026-109619 残留全局状态(UAF) 上一个请求的内存已释放,但全局状态还指着它;同一 worker 处理下一个请求时用到这块已释放内存 → RCE

    二、先判断你受不受影响(1 分钟)

    对照下表:

    PHP 分支是否受影响修复版本
    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.2 将于 2026-12-31 停止维护)
    8.1 及更早 受影响(已停止维护,无正式补丁) 官方提供 7.4 / 8.0 / 8.1 源码回移补丁;先问你的发行版 / LTS 厂商

    先查一下版本:

    php -v

    注意:php -v 只代表 CLI 环境。服务器上往往同时存在多套 PHP(FPM、Apache 模块、容器镜像),要逐个确认,见第三步盘点。

    三、修复步骤(照做即可)

    第 0 步:备份(10 分钟)

    • 备份站点代码、php.ini、FPM 池配置、数据库(mysqldump 或云快照)。
    • 留好回滚路径:记录当前版本号;Docker 升级前给旧镜像打个 tag(docker tag 旧镜像 myphp:rollback)。

    第 1 步:盘点所有 PHP 实例

    # CLI 版本
    php -v
    php –ini

    # 找出所有 PHP 进程 / 服务
    ps -ef | grep -E 'php|php-fpm'
    systemctl list-units –type=service | grep -i php

    # Apache mod_php
    httpd -M 2>/dev/null | grep php # 或 apachectl -M

    # Nginx 实际转发到哪个 PHP
    nginx -T 2>/dev/null | grep -E 'fastcgi_pass|unix:'

    # Docker 环境
    docker ps | grep -i php
    docker exec <容器ID> php -v

    整理成清单:实例 / 当前版本 / SAPI / 服务名 / 目标版本。多版本共存时,每个站点实际走的版本以 fastcgi_pass 指向的 socket 为准。

    第 2 步:升级到修复版本(按你的环境选一条)

    Debian / Ubuntu:

    sudo apt update
    apt-cache policy php8.4-fpm php8.4-cli # 确认候选版本是 8.4.27+
    sudo apt upgrade php8.4-* # 按实际分支替换 8.2/8.3/8.4/8.5

    仓库没跟上就用官方 PPA:

    sudo add-apt-repository ppa:ondrej/php
    sudo apt update && sudo apt upgrade php8.4-*

    CentOS / RHEL / AlmaLinux / Rocky:

    sudo dnf –enablerepo=remi-php84 update php php-fpm php-* # 按分支替换 remi-php82/83/84/85
    php -v

    提醒:remi 是志愿者仓库,发布日当天可能没有同步补丁,优先用发行版官方包或源码编译。

    Docker:

    docker tag <旧镜像> myphp:rollback # 升级前打 tag 留回滚
    # 修改 Dockerfile / compose 镜像 tag 为修复版本,如 php:8.4.27-fpm
    docker compose pull && docker compose up -d
    docker exec <容器ID> php -v

    Windows(本机直接跑 PHP):

  • 到 php.net/downloads.php 下载对应分支二进制(如 8.4.27,按 SAPI 选 Thread Safe / Non-Thread Safe)。
  • 停止服务(IIS FastCGI / Apache / php-cgi)。
  • 备份原目录,解压替换 php.exe、php-cgi.exe、php8*.dll 与扩展(保留原 php.ini,逐项比对配置)。
  • php -v 验证后重启服务。
  • 宝塔等面板: 软件商店 → PHP 版本管理安装修复版本,或在「网站」里把站点切换到已修复版本并重启;面板没提供就走源码编译。

    云托管 / 虚拟主机: 直接联系服务商确认是否已打补丁,无法控制环境就评估迁移或临时下线。

    第 3 步:重启所有工作进程(重要:用 restart,别只用 reload)

    sudo systemctl restart php8.4-fpm # FPM,按实际服务名
    sudo systemctl restart apache2 # mod_php(Debian/Ubuntu)
    sudo systemctl restart httpd # mod_php(RHEL 系)
    # Docker:docker compose restart 或滚动替换

    重启后确认旧 worker 全部退出:ps -ef | grep php,看进程启动时间是否都是新的。reload 不能保证所有旧实例退出,本次要求重启每一个 worker。

    第 4 步:验证(在实际 Web 环境,而不是只看 CLI)

  • php -v 显示 8.5.12 / 8.4.27 / 8.3.36 / 8.2.35。
  • 临时放一个 <?php phpinfo(); ?> 页面,浏览器访问,确认 PHP Version 和 Server API(fpm-fcgi / apache2handler / CGI),验证完立即删除。
  • php -m 对照业务所需扩展是否完整。
  • 抽查登录、上传、API 等关键路径,看错误日志无新增致命错误。
  • 四、实在升级不了?临时缓解(只能降风险,不能根治)

    官方明确:没有任何配置缓解能完整替代补丁,立即升级是唯一完整修复。 以下措施只降低特定攻击路径的暴露。

    FPM 池配置(如 /etc/php/8.4/fpm/pool.d/www.conf)追加:

    ; 对应 CVE-2026-109618:解除可被利用的 memory_limit 失败(用 php_admin_value 防应用覆盖)
    php_admin_value[memory_limit] = -1
    ; 调低请求体上限:无上传 8M,需上传 32M
    php_admin_value[post_max_size] = 8M
    php_admin_value[upload_max_filesize] = 8M ; 必须小于 post_max_size
    ; 对应 CVE-2026-109619:关闭会话上传进度路径
    php_admin_value[session.upload_progress.enabled] = 0
    ; 仅 PHP 8.5:关闭致命错误回溯路径
    php_admin_value[fatal_error_backtraces] = 0

    Apache mod_php:在 httpd.conf / 虚拟主机用 php_admin_value memory_limit -1 等同等设置。

    Web 层:Nginx 设 client_max_body_size 8m,并考虑限制字段数、multipart 数、header 数与嵌套深度(覆盖无 Content-Length 的请求);容器用 cgroup 内存上限做可用性边界,不要用 RLIMIT_AS / RLIMIT_DATA。

    改完必须重启全部 worker。仍然无法修复的对外服务:临时下线或隔离公网,直到补丁应用并验证完成。

    五、升级完成后必做:排查是否已被入侵

    漏洞已有在野利用,且 PoC 在流传,升级后请按清单排查:

    • 访问日志:异常超大的 multipart POST、字段数异常、连续 413/500;PHP 错误日志里的 Allowed memory size exhausted、segfault。
    • Web 目录:近期新增/修改的 .php 文件;eval、base64_decode、assert、shell_exec 等可疑特征;上传目录、wp-content/uploads、.user.ini、.htaccess 异常改动。
    • 进程与计划任务:ps -ef 可疑进程;crontab -l、/etc/cron* 新增项;ss -tnp 异常外连。
    • 系统账号:新增用户、sudoers 改动。

    高度怀疑被入侵:立即隔离 → 保留现场取证 → 从干净备份重建 → 轮换所有凭据与密钥。WAF / 云防火墙规则只能纵深防御,不能替代补丁。

    六、三个最容易踩的坑

  • php -v 只代表 CLI:FPM、Apache 模块、容器里的 PHP 可能还是旧版,必须逐一核对。
  • reload ≠ restart:本次必须重启所有 worker,reload 不能保证旧实例退出。
  • 第三方仓库可能没同步:remi 等志愿者仓库在发布日当天没有补丁,优先用发行版官方包或源码编译。
  • 参考资料

    • PHP 官方安全公告:https://www.php.net/
    • CERT-EU Security Advisory 2026-018:https://cert.europa.eu/publications/security-advisories/2026-018
    • 腾讯云安全通告:https://cloud.tencent.com/announce/detail/2525
    • PHP 基金会公告:https://thephp.foundation/blog/2026/10/21/todays-php-security-release-and-how-were-strengthening-php-security/
    • 漏洞详情:https://github.com/php/php-src/security/advisories/GHSA-w8hw-w9fx-j79w 、https://github.com/php/php-src/security/advisories/GHSA-6wmf-4rv5-p3rp
    赞(0)
    未经允许不得转载:网硕互联帮助中心 » PHP 炸了!两个 CVSS 9.2 致命漏洞,无需登录就能控制服务器——手把手修复指南
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!