Loading...

文章背景图

PHP2Shell 高危漏洞(CVE-2026-109618 / CVE-2026-109619)各系统修复方案

2026-10-22
276
- 字
- 分钟
|

2026-10-22 更新 · 官方已发布紧急补丁,本指南覆盖 Debian / Ubuntu / RHEL / 宝塔面板 / LNMP / Docker / FrankenPHP / LiteSpeed / macOS / Windows 等主流部署方式,命令均已实测验证。


一、漏洞速览

PHP 官方于 2026-10-21 紧急发布两个**无鉴权远程代码执行(RCE)**高危漏洞的修复,统称 PHP2Shell:

编号

类型

CVSS v4.0

危害

CVE-2026-109618

内存溢出(OOM)导致的内存破坏

9.2(严重)

无需登录即可 RCE,可泄露内存数据

CVE-2026-109619

跨请求残留全局状态(释放后使用)

9.2(严重)

无需登录即可 RCE

受影响环境:所有对外提供 Web 请求的 PHP,包括 PHP-FPM、Apache mod_php、php-cgi、FrankenPHP、LiteSpeed。其中 mod_php 风险最高——一个匿名请求在应用代码运行之前就可能触发攻击。

官方修复版本(务必升级到这些版本或以上):

分支

修复版本

官方安全支持截止

PHP 8.5

8.5.12

2029-12-31

PHP 8.4

8.4.27

2028-12-31

PHP 8.3

8.3.36

2027-12-31

PHP 8.2

8.2.35

2026-12-31

PHP 8.1 及更早

无官方版本,仅有源码补丁(见第六节)

已终止

⚠️ 漏洞代码在 PHP 引擎内部,升级 WordPress / Drupal / Joomla 核心、加 WAF 规则都修复不了它,只能升级服务器上的 PHP 运行时。


二、30 秒自查

php -v

若版本低于上面表格中的修复版本,说明你正处于风险中。再确认 PHP 来源(决定走哪一节):

# Debian/Ubuntu 系

dpkg -l 'php*' | awk '/^ii/{print $2, $3}'

# RedHat 系

rpm -qa 'php*' | sort

dnf module list --enabled php


三、各系统 / 部署方式修复方案

① Debian / Ubuntu(官方源)

官方源采用「回移补丁」方式:包版本号变化、PHP 版本号不变,务必对照表格确认包版本。

# 先看有哪些 PHP 升级待装

sudo apt-get update

apt list --upgradable 2>/dev/null | grep php

# 只升级 PHP 相关包(把 8.3 换成你自己的版本号)

sudo apt-get install --only-upgrade 'php8.3*' libapache2-mod-php8.3

# 升级后重启 PHP-FPM(或 apache2)

sudo systemctl restart php8.3-fpm

各发行版官方修复包版本对照:

系统

PHP 分支

修复后包版本

Ubuntu 22.04

php8.1

8.1.2-1ubuntu2.28

Ubuntu 24.04

php8.3

8.3.6-0ubuntu0.24.04.13

Ubuntu 26.04

php8.5

8.5.4-0ubuntu1.5

Debian 12 (bookworm)

php8.2

8.2.35-1~deb12u1(DLA-4848-1)

Debian 13 (trixie)

php8.4

8.4.27-1~deb13u1(DSA-6574-1)

Ubuntu 18.04 / 20.04 需开启 Ubuntu Pro (ESM) 才能拿到补丁:sudo pro fix CVE-2026-109618

② Ubuntu ondrej PPA / packages.sury.org

走第三方源(含 EOL 老版本补丁),用于 Ubuntu 22.04 / 24.04 等。

# 添加 ondrej PPA(若已添加可跳过)

sudo add-apt-repository ppa:ondrej/php

sudo apt-get update

# 升级 PHP

sudo apt-get install --only-upgrade 'php8.3*'

sudo systemctl restart php8.3-fpm

③ Red Hat / CentOS / AlmaLinux / Rocky(remi 仓库 + dnf 模块)

# 先确认当前 PHP 模块

dnf module list --enabled php

# 只升级 PHP 包

sudo dnf upgrade 'php*'

# RHEL 9 模块 php:8.2 官方补丁为 8.2.35(RHSA-2026:87072)

# remi 的 SCL 风格包名不同,如 php84-php-fpm,用:

sudo dnf upgrade 'php84-*'

sudo systemctl restart php84-php-fpm

⚠️ remi 仓库在 21 日未及时放出补丁,请以仓库实际版本为准,升级后用 php -v 核对是否达到 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12。

若要切换 PHP 模块流(如 7.4 → 8.2),必须先重置模块,否则 dnf 拒绝切换:

sudo dnf module reset -y php

sudo dnf module enable -y php:8.2

sudo dnf distro-sync -y

④ 宝塔面板(国内站长最常见)

宝塔是编译安装 PHP,需等宝塔软件商店推送修复版本(对应 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12):

  1. 登录宝塔面板 → 左侧「软件商店」→ 顶部「已安装」;

  1. 找到你正在用的 PHP 版本(如 PHP-8.2);

  1. 若有「更新」按钮且有新版本提示,点击升级即可;升级后宝塔会自动重启该 PHP;

  1. 升级后到「网站 → 对应站点 → PHP 版本」确认运行版本。

若面板未显示可更新版本,请先升级面板本体:SSH 执行 bt 34,按提示更新源后确认。修复包推送节奏以宝塔官方为准。

⑤ LNMP 一键包(lnmp.org)

LNMP 使用自带升级脚本编译升级,需选择对应修复版本号:

cd /root/lnmp1.x/          # 进入你的 LNMP 安装目录

./upgrade.sh php # 按提示输入目标版本号,如 8.4.27 / 8.3.36

脚本会自动完成编译安装并重启 PHP-FPM。升级后用 php -v 确认版本达标。

⑥ Docker(php 官方镜像)

# 拉取带补丁的官方镜像(每个分支都要拉到修复版本 tag)

docker pull php:8.2.35-fpm

docker pull php:8.3.36-fpm

docker pull php:8.4.27-fpm

docker pull php:8.5.12-fpm

# 用新镜像重建你自己的镜像并重建容器

docker build --pull -t 你的镜像 .

docker-compose up -d --build # 或用 docker run 重建容器

官方 php 镜像已在 amd64 / arm64 上全部修复。Chainguard 镜像自 10-21 07:41 起已含补丁。

⑦ FrankenPHP

PHP 直接编译进 FrankenPHP,apt/dnf 修不了它:

# 升级到 v1.13.2(内置修复版 PHP),或拉取新版 Docker 镜像

frankenphp version # 确认版本 ≥ v1.13.2(PHP ≥ 8.4.27)

⑧ LiteSpeed / OpenLiteSpeed

# 升级 lsphpXY 包(XY 为版本号,如 lsphp84 / lsphp83)

sudo dnf upgrade 'lsphp*' # 或 apt upgrade lsphp8.4

sudo pkill lsphp # 必须杀掉老进程,重启 LiteSpeed 不会重置它们

⑨ macOS(Homebrew)

brew update

brew upgrade php # 或按版本:brew upgrade php@8.4

⑩ Windows

  • 官方编译包:到 windows.php.net 下载对应 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12 并替换;

  • XAMPP / Laragon 等集成环境:等厂商发布对应修复版本后更新。

⑪ 源码编译安装

# 下载对应修复版本源码

wget https://www.php.net/distributions/php-8.4.27.tar.gz

tar xf php-8.4.27.tar.gz && cd php-8.4.27

./configure --prefix=/usr/local/php --with-fpm-user=www --with-fpm-group=www --enable-fpm

make -j$(nproc) && make install

# 重新配置并重启 PHP-FPM


四、升级后必做:重启 + 验证

按运行方式重启

PHP 运行方式

升级后重启命令

PHP-FPM(Nginx/Caddy/Apache 代理)

sudo systemctl restart php8.3-fpm(Debian/Ubuntu)或 sudo systemctl restart php-fpm(RHEL)

Apache + mod_php

sudo systemctl restart apache2(Debian/Ubuntu)或 sudo systemctl restart httpd(RHEL)——reload/graceful 不够

LiteSpeed

sudo pkill lsphp

FrankenPHP

重启 FrankenPHP 进程/容器

Docker

重建并重建容器

Laravel 队列 / Octane

php artisan queue:restart;Octane 需重启服务器进程

确认没有进程还在跑旧 PHP

# 输出为空 = 全部已用新版本

sudo grep -lE ' /(usr|lib|opt).*\(deleted\)$' /proc/[0-9]*/maps


五、老版本(8.1 及更早)怎么办

PHP 官方只对仍受支持的分支发版。对 7.4 / 8.0 / 8.1,官方发布了最小化源码补丁(会彻底关闭上传进度条功能),供自己编译或用厂商回移补丁的人使用:

  • 使用官方源 / LTS 厂商(如 Ubuntu Pro、Zend LTS、CloudLinux):等待或索取厂商回移补丁;

  • 使用第三方源:ondrej PPA / packages.sury.org 已为 EOL 分支(含 7.4)回移补丁;remi 也会跟进 7.4/8.0/8.1;

  • 没有厂商支持、又无法升级的,下线是唯一安全选项。

拿到补丁只是治标。8.2 也在 2026-12-31 终止安全支持,老版本请尽快规划迁移到 8.4 / 8.5。


六、升级前 / 无法升级时的临时缓解(不可替代升级)

措施

作用

说明

关闭 session.upload_progress.enabled=0

封堵 109619 已确认路径

对 109618 无效,别当护身符

启用 session.use_strict_mode=1

增强会话安全

建议常开

关闭 fatal_error_backtraces=0

缓解 109619 backtrace 路径

升级后可恢复

Web 层拦截异常 multipart 请求 / 限流

争取时间

会误伤正常上传,升级后可解除

缩小 post_max_size 与输入上限

降低触发面

按业务承受度调整

站点下线 / 只读

唯一绝对安全

仅无法升级时

⚠️ 网上流传的「一键修复 PHP2Shell」插件/脚本来源不明,不要安装,防留后门。WAF/Cloudflare 规则只能挡已知利用形状、争取时间,不能替代升级。


七、官方参考链接汇总

漏洞与补丁

国内通告与解读

各系统补丁与仓库

运维面板 / 部署工具


命令经社区与容器实测验证(参考 ma.ttias.be)。正式操作前建议先在测试环境验证一次。修复节奏、仓库补丁上线时间以各家官方为准。

评论交流

文章目录