PHP2Shell 已经修复。
你的 PHP 呢?

PHP 本身的两个严重漏洞 CVE-2026-109618 和 CVE-2026-109619 已于 2026 年 10 月 21 日修复。把 php -v 的输出贴进来,看看你的情况。

检查你的版本
版本检查在你的浏览器里运行
这是示例,换成你自己的输出

受影响。请升级到 8.3.36。

然后重启每一个 PHP worker。

php -v 显示的是命令行版本,Web 服务器跑的可能是另一个。可以运行 php-fpm8.3 -v,或者通过网站打开 phpinfo()。

PHP 8.3 升级步骤

已修复版本2026年10月21日

PHP 8.58.5.12
PHP 8.48.4.27
PHP 8.38.3.36
PHP 8.28.2.35
PHP 8.1仅源码移植
PHP 8.0仅源码移植
PHP 7.4仅源码移植
PHP 7.3 and older无修复

漏洞在哪一层

两个漏洞都在 PHP,不在你的代码里。升级它,重启 worker,服务器上的每个站点就都修好了。

请求GET /index.phpWeb 服务器Apache · nginx · LiteSpeed两个漏洞都在这里PHPCVE-2026-109618CVE-2026-109619mod_php · PHP-FPM · php-cgi升级 + 重启,所有站点一起修好你的代码WordPress · Laravel · 自研GET /index.php请求GET /index.phpWeb 服务器Apache · nginx · LiteSpeedPHP两个漏洞都在这里mod_php · PHP-FPM · php-cgi你的代码WordPress · Laravel · 自研升级 + 重启,所有站点一起修好
严重程度
两个都是严重级,CVSS v4.0 9.2
攻击入口
Apache mod_php、PHP-FPM、php-cgi、FrankenPHP、LiteSpeed
风险最高
mod_php,无需登录,在你的代码运行前就会触发
在野利用
截至 2026 年 10 月 22 日,官方公告未报告

每个分支一行

找到你的分支,看修复它的版本号。同一分支上更低的版本都受影响。

  • 已发布修复版本
  • 仅源码移植
  • 无官方修复
  • 核对于 2026年10月22日

横条止于 php.net 官方支持结束日

版本号来自 php.net 公告和两份安全公告,生命周期日期来自 php.net 支持版本页。完整表格见修复状态页。

暂时还不能升级的话

下面这些设置能降低风险,但不能保证安全。PHP 项目的说法是,只有升级才安全。

代理层也要设

在 PHP 前面限制请求大小、字段数、multipart 分段数、请求头数量和嵌套深度,没有 Content-Length 的请求也要管。

PHP 8.5 上还要设置 fatal_error_backtraces = 0。不要使用 RLIMIT_AS 或 RLIMIT_DATA,这个漏洞走的正是内存分配失败这条路。来源 GHSA-w8hw-w9fx-j79w 和 GHSA-6wmf-4rv5-p3rp。

/etc/php/8.3/fpm/pool.d/www.conf已修改
[www]; 原有的池配置保持不变
; CVE-2026-109618, 降低风险php_admin_value[memory_limit] = -1

不设内存上限

CVE-2026-109618 在请求耗尽内存时触发。用 php_admin_value 锁定,脚本就没法再调低。

php_admin_value[post_max_size] = 8Mphp_admin_value[upload_max_filesize] = 4M

限制请求体大小

不需要上传时设 8M,需要时设 32M。upload_max_filesize 要小于 post_max_size。

php_admin_value[max_input_nesting_level] = 16

限制输入嵌套

调低表单和查询参数数组的嵌套上限。16 只是示例,请用你的应用测一下。

; CVE-2026-109619, 降低风险php_admin_flag[session.upload_progress.enabled] = off

关闭上传进度

这是针对 CVE-2026-109619 的开关。在这里或 php.ini 里设置,不要用 ini_set() 或 .user.ini。打完补丁也保持关闭。

php_admin_flag[log_errors] = onphp_admin_value[error_log] = /var/log/php8.3-fpm.www.log

保留证据

把所有错误写进一个你会去看的日志文件,并在 php.ini 里设 error_reporting = E_ALL。日志干净不代表没事。

; 可选,会降低吞吐量pm.max_requests = 1

每个 worker 只处理一个请求

可选,而且慢。每个 worker 处理完一个请求就退出,不会有状态残留。

; 然后重启每一个 worker$ sudo systemctl restart php8.3-fpm

免费的修复办法

  1. 第一步, 查看版本。

    php -v 查的是命令行版本。要问 Web 服务器实际运行的那个二进制,或者通过网站打开 phpinfo()。

  2. 第二步, 升级软件包。

    装上发行版的修复包,或者从 php.net 编译已修复的版本。它的 changelog 里应该写着这两个 CVE。

  3. 最后,重启 每一个 worker。

    正在运行的 worker 会把旧的 PHP 留在内存里,直到重启。用 mod_php 的话,改为重启 Apache。

web-01bash

第 1 步,共 3 步 · 查看版本

$ php-fpm8.3 -v
PHP 8.3.30 (fpm-fcgi) (built: Oct  2 2026 09:14:52)
Copyright (c) The PHP Group
Zend Engine v4.3.30, Copyright (c) Zend Technologies

第 2 步,共 3 步 · 升级软件包

$ sudo apt update
$ sudo apt install --only-upgrade 'php8.3-*'
The following packages will be upgraded:
  php8.3-cli php8.3-common php8.3-fpm php8.3-opcache
4 upgraded, 0 newly installed, 0 to remove.
Setting up php8.3-fpm (8.3.36-1) ...

第 3 步,共 3 步 · 每一个 worker

$ sudo systemctl restart php8.3-fpm
$ php-fpm8.3 -v
PHP 8.3.36 (fpm-fcgi) (built: Oct 21 2026 18:40:07)
php8.3-fpmpool www重启前重启后8.3.308.3.368.3.308.3.368.3.308.3.368.3.308.3.36$ systemctl restart php8.3-fpm
新包装好以后,要等每个 worker 重启才生效。

查看来源

这里的每条信息都链接到出处,并注明我们最后一次核对的时间。来源之间有出入的地方,我们会写出来。ChangeLog 把 8.5.12 和 8.4.27 记在 10 月 22 日,公告写的是 10 月 21 日。所有来源最后核对于 2026年10月22日。

需要有人帮你弄?
说说你用的环境。

请不要粘贴密码、SSH 密钥或 API 密钥。我们一般在工作时间(中欧时间)回复。付费工作先书面确定范围,再开发票。我们不做应急响应。

时间
周一至周五,9:00–18:00(中欧时间)
计费
先书面确定范围,再开发票