PHP 官方 10 月 21 日发布了 8.5.12、8.4.27、8.3.36、8.2.35 四个安全版本,修复两个能被未登录的远程攻击者用来执行任意代码的高危漏洞:CVE-2026-109618 和 CVE-2026-109619。只要你的 PHP 在对外提供网站服务,不管是宝塔装的、apt 装的还是 Docker 跑的,都在影响范围里。这篇简单说一下漏洞是什么,重点讲怎么把 PHP 升级到修复版本。
三句话结论:
- 漏洞很严重:两个漏洞的官方 CVSS v4.0 评分都是 9.2,一个未登录的请求就能在网站代码运行之前触发,PHP-FPM、Apache mod_php 都在范围内,mod_php 风险最高
- 升到修复版:8.2 升到 8.2.35,8.3 升到 8.3.36,8.4 升到 8.4.27,8.5 升到 8.5.12;Debian、Ubuntu 系统自带包的版本号不一样,看第二节的对照表
- 升不了先缓解:把 session.upload_progress.enabled 设成 0、调低 post_max_size,再在 Web 服务器那一层限制请求大小。这些只能减少暴露面,不是修复,能升级就尽快升级
相关文章:
- 《2026 搬瓦工宝塔「安装即建站」教程:一条命令装好面板、环境和 WordPress,最快 3 分钟上线》
- 《2026 搬瓦工零代码建站教程:用 Amy 安装宝塔面板,0 基础 0 命令行也能搭好网站》
一、PHP CVE-2026-109618 和 CVE-2026-109619 是什么漏洞
这次不是突然发的。10 月 8 日 php.net 就预告过:10 月 21 日 14:00 UTC 发布安全版本,修两个 CVSS v4.0 评分 9.2 的高危漏洞。10 月 21 日四个版本如期发布,其中 8.2.35 的发布日期标的是 10 月 20 日。官方原文在 PHP 官方安全公告。
1、CVE-2026-109618:内存耗尽时把无效数据当成有效数据
PHP 碰到内存耗尽(OOM)错误时,会用 longjmp 直接跳出当前的处理流程。如果这时候请求数据只初始化了一部分,后面的清理过程会把这些无效数据当成有效数据处理。攻击者用特制的 multipart 上传请求,不用超过 post_max_size 就能把 memory_limit 耗尽,走到这条出错的清理路径,最终执行任意代码。GitHub 上的公告编号是 GHSA-w8hw-w9fx-j79w。
2、CVE-2026-109619:上一个请求留下的状态没清干净
PHP 有一部分全局状态(错误、session、对象、扩展状态)指向某个请求的内存。某些情况下,请求结束时这些状态没有被正确重置,下一个请求在初始化之前就读到了已经释放的内存,也就是常说的 use after free。被人利用好了,同样能远程执行代码。公告编号是 GHSA-6wmf-4rv5-p3rp。
3、评分多少、谁受影响
| CVE | 官方 CVSS v4.0 | NVD CVSS 3.1 | 问题出在哪 |
|---|---|---|---|
| CVE-2026-109618 | 9.2 Critical | 9.8 Critical | 内存耗尽后的清理 |
| CVE-2026-109619 | 9.2 Critical | 8.1 High | 请求之间的全局状态 |
两条在 NVD 的状态都是 Analyzed,10 月 21 日收录。
官方的说法是:所有对外提供 Web 服务的 PHP 都在风险范围内,PHP-FPM、Apache mod_php、php-cgi、FrankenPHP、LiteSpeed 全都算。mod_php 风险最高,已经有演示性的利用,一个未登录的请求就能在任何应用代码运行之前触发。所以 WordPress 插件装得再干净、后台密码设得再复杂都没用,问题出在 PHP 本身。
官方口径很明确:”没有完整的缓解措施,升级是唯一安全的选择。”
二、先看你的 PHP 版本和运行方式
SSH 登录 VPS 以后跑下面两条命令。还不会连 SSH 的,先看《2026 搬瓦工 VPS 买完怎么用?怎么连接、怎么装软件:新手用 Assistant Amy 一步步搞定》。
# 看当前 PHP 版本
php -v
# 看 PHP 的运行方式(Server API)
php -i | grep "Server API"
php -v 第一行就是版本号。php -i 是在命令行里跑的,Server API 一般显示 Command Line Interface,它说的是命令行那个 PHP。网站实际走的是 PHP-FPM 还是 Apache 模块,在 Debian / Ubuntu 上再看一下装了哪些 PHP 包:
# 列出已安装的 PHP 8 软件包和版本号
dpkg -l | grep php8
列表里有 php8.3-fpm 这类包,网站一般走 PHP-FPM;有 libapache2-mod-php8.3 这类包,就是 Apache mod_php,这种风险最高,要最先升。宝塔用户直接到软件商店的已安装列表里看装了哪几个 PHP 版本。装了多个 PHP 版本的,命令行默认的那个不一定是网站在用的,每个版本都要处理。
拿到版本号,对照下面这张表:
| 版本线 | 修好的最低版本 | 常见发行版包版本 |
|---|---|---|
| PHP 8.5 | 8.5.12 | sury、ondrej、remi 源和 Docker 官方镜像跟随上游版本号 |
| PHP 8.4 | 8.4.27 | Debian 13 trixie:8.4.27-1~deb13u1(DSA-6574-1) |
| PHP 8.3 | 8.3.36 | Ubuntu 24.04:8.3.6-0ubuntu0.24.04.13(前缀还是 8.3.6) |
| PHP 8.2 | 8.2.35 | Debian 12 bookworm:8.2.35-1~deb12u1(DLA-4848-1) |
| PHP 8.1 及更早 | 官方不再发版 | Ubuntu 22.04:8.1.2-1ubuntu2.28;更老的 Ubuntu 只有 ESM 有补丁 |
按你用的版本线找对应的修复版本;系统自带包的版本号可能不变,要看 changelog
版本低于第二列的都受影响。用系统自带包的别只看 php -v:Ubuntu 24.04 修好以后显示的还是 8.3.6,要看包的完整版本号或者 changelog。Debian 和 Ubuntu 的修复状态可以在 Debian 安全追踪 和 Ubuntu 安全公告页 查到。
三、怎么升级 PHP 到修复版本
四种环境的升级步骤,升完都要确认版本并重启 php-fpm 或 Apache
按你装 PHP 的方式找对应的一节。不管哪种,升完都要重启 php-fpm 或 Apache,已经在跑的旧进程不重启,用的还是旧版本。
1、宝塔面板
宝塔的 PHP 是面板自己编译安装的,不走系统软件源,所以 apt upgrade 升不到它,要在面板里升:
- 登录宝塔面板,打开软件商店,切到”已安装”
- 找到你在用的 PHP 版本,右侧出现”更新”按钮就点,一键升级
- 装了多个 PHP 版本的,每个版本都看一遍
- 升完在已安装列表里核对版本号,应该是 8.2.35、8.3.36、8.4.27 或 8.5.12
没有”更新”按钮,说明宝塔还没推送这个版本。具体什么时候推送以宝塔为准,本站没法替你确认。这段时间先按第五节做缓解,过一两天再回来看有没有更新按钮。通过《2026 搬瓦工零代码建站教程:用 Amy 安装宝塔面板,0 基础 0 命令行也能搭好网站》装的宝塔,升级方法一样。
2、Debian / Ubuntu 系统自带包
用 Debian、Ubuntu 官方源装的 PHP(apt 装的 php8.x-fpm 这类包),直接升级系统包:
# 更新软件源索引
apt update
# 升级所有可升级的软件包,PHP 会一起升
apt upgrade
# 查看升级后的 PHP 包版本号
dpkg -l | grep php8
把 dpkg 看到的版本号和第二节的表对一下:Debian 12 是 8.2.35-1~deb12u1,Debian 13 是 8.4.27-1~deb13u1,Ubuntu 24.04 是 8.3.6-0ubuntu0.24.04.13,Ubuntu 22.04 是 8.1.2-1ubuntu2.28。Ubuntu 24.04 的版本号前缀还是 8.3.6,用 changelog 确认:
# 看 php8.3-fpm 的更新日志,确认里面有 CVE-2026-109618
apt changelog php8.3-fpm | head -40
确认没问题再重启。服务名按你的版本改,Debian 12 是 php8.2-fpm,Debian 13 是 php8.4-fpm,Ubuntu 22.04 是 php8.1-fpm:
# 重启 PHP-FPM(Ubuntu 24.04 的服务名是 php8.3-fpm)
systemctl restart php8.3-fpm
# 用 Apache mod_php 的,重启 Apache
systemctl restart apache2
更老的 Ubuntu 只有 ESM(Ubuntu 的扩展安全维护)才有补丁,没开 ESM 的,按第六节换到受支持的版本。
3、sury、ondrej、remi 第三方源
很多人为了用新版 PHP,在 Debian 上加了 sury(deb.sury.org),在 Ubuntu 上加了 ondrej PPA,在 CentOS / Rocky / Alma 上加了 remi。这几个源跟随上游版本号,升完 php -v 直接显示 8.4.27 这类号,比系统包好认。
Debian / Ubuntu 加了 sury 或 ondrej 的:
# 更新软件源索引
apt update
# 升级软件包,第三方源的 PHP 会升到修复版
apt upgrade
# 确认版本号是 8.4.27 这类修复版本
php -v
# 重启 PHP-FPM(按你用的版本改,这里是 8.4)
systemctl restart php8.4-fpm
装了好几个版本的(比如 8.2 和 8.4 都在),php -v 只显示命令行默认那个,用 dpkg -l | grep php8 把每个版本都核对一遍,每个在用的 fpm 都重启。
CentOS / Rocky / Alma 加了 remi 的:
# 升级所有 php 开头的软件包
dnf update 'php*'
# 确认版本号
php -v
# 用 mod_php 的重启 Apache,CentOS 系的服务名是 httpd
systemctl restart httpd
用 PHP-FPM 的,按你机器上实际的 php-fpm 服务名重启。
4、Docker 镜像
Docker 官方镜像 php:8.4-fpm 这类 tag 会跟着上游更新到修复版(以 Docker Hub 上的 tag 为准),但本地已经拉下来的镜像不会自己变,要重新拉取。我建议在 docker-compose.yml 里写带完整版本号的 tag,比如 php:8.4.27-fpm,一眼就能看出是不是修复版,具体有哪些 tag 以 Docker Hub 上的为准。
# 拉取新镜像并重建容器
docker compose pull && docker compose up -d
# 进容器看 PHP 版本,容器名换成你自己的
docker exec 容器名 php -v
镜像是自己用 Dockerfile 构建的,把 FROM 那一行的基础镜像也换成修复版,再重新构建。
四、升级完怎么确认 PHP 漏洞已修复
升完按这四步过一遍:
- 看版本号:宝塔、第三方源和 Docker 跑
php -v,应该是 8.2.35、8.3.36、8.4.27、8.5.12 或更高 - 系统包看 changelog:Debian / Ubuntu 系统包用
dpkg -l | grep php8对照第二节的表,版本号前缀没变的,看 changelog 里有没有 CVE-2026-109618 - 确认重启过:php-fpm 或 Apache 必须重启,否则网站还在用旧进程
- 打开网站:前台、后台各点几下,上传一张图片,确认没有报错
# 看命令行 PHP 的版本
php -v
# 系统包:看 changelog 里有没有 CVE-2026-109618(包名按你的版本改)
apt changelog php8.3-fpm | head -40
# 重启 PHP-FPM,让网站用上新版本
systemctl restart php8.3-fpm
# 用 mod_php 的重启 Apache
systemctl restart apache2
五、暂时升不了 PHP 先做什么
宝塔还没推送、或者老系统一时升不了,可以先按官方给的临时缓解措施做。再说一遍:下面每一条都只是减少暴露面,不是修复,官方原话就是没有完整的缓解措施。能升级的,跳过这一节直接升。
1、针对 CVE-2026-109619
- 只减少暴露面,不是修复:把 session.upload_progress.enabled 设成 0,然后重启所有 PHP worker。必须写在 php.ini、FPM 池配置或服务器配置里,靠 ini_set() 或 FPM 的 .user.ini 改不算数。这一条只挡住已经确认的 session 那条路径
- 只减少暴露面,不是修复:PHP 8.5 另外把 fatal_error_backtraces 设成 0,再重启
- 只减少暴露面,不是修复:去掉那些每个请求都会在初始化之前触发诊断信息的无效或过时配置。用 error_reporting、display_errors 或 @ 把诊断信息藏起来没有用
2、针对 CVE-2026-109618
- 只减少暴露面,不是修复:memory_limit 设成 -1,而且要用应用改不了的方式写,比如 FPM 池的 php_admin_value 或 Apache 配置,再确认没有别的地方又设回有限值。这样只去掉了 PHP 自己内存上限造成的失败,底层的内存分配失败仍然可能走到漏洞路径。搬瓦工小内存套餐上这么设,脚本一跑飞就可能吃光内存,所以要配合下面的容器或 cgroup 限制
- 只减少暴露面,不是修复:调低 post_max_size。不需要上传文件的站设 8M,需要上传的设 32M,upload_max_filesize 要小于 post_max_size
- 只减少暴露面,不是修复:在 Web 服务器那一层限制请求大小、字段数、multipart part 数、header 数和嵌套层数,没有 Content-Length 的请求也要限制到
- 只减少暴露面,不是修复:用容器或 cgroup 限制作为可用性兜底,不要用 RLIMIT_AS / RLIMIT_DATA,它们本身就会造成触发漏洞的分配失败
在 php.ini 里改这几项(php.ini 的注释用分号):
; 关掉 session 上传进度(CVE-2026-109619 的缓解)
session.upload_progress.enabled = 0
; 取消 PHP 内存上限(CVE-2026-109618 的缓解,要配合容器或 cgroup 限制)
memory_limit = -1
; 不需要上传文件的站调到 8M,需要上传的调到 32M
post_max_size = 8M
memory_limit 只写在 php.ini 里,应用自己还能用 ini_set() 改回有限值。要做到应用改不了,得写进 FPM 池配置的 php_admin_value 或 Apache 配置里。
改完重启 PHP-FPM 或 Apache 才生效(服务名按你的版本改):
# 重启 PHP-FPM
systemctl restart php8.3-fpm
# 用 mod_php 的重启 Apache
systemctl restart apache2
宝塔用户在面板里打开对应 PHP 版本的设置,改它的配置文件,保存后重启这个 PHP。
3、session.upload_progress 的补充公告
10 月 21 日官方还发了一条补充公告:建议把 session.upload_progress.enabled 设成 0,一直到下一个常规版本,用来防一个”不太可能出现”的远程代码执行路径(CVE-2026-115560,下个版本会出完整公告)。它只在一种少见的组合下触发:session.serialize_handler 配成 php_binary 或 php_serialize,然后应用在 session_start() 之前用 ini_set() 把它改回 php。从来不在运行时改序列化处理器的应用可以不管。
也就是说,已经升完级的,也可以顺手把这一项关掉,等下一个常规版本出来再说。多数站用不到上传进度这个功能,关掉一般没影响。
六、PHP 8.2 年底停止维护,8.1 及更早怎么办
PHP 8.2 在 2026 年 12 月 31 日停止维护,之后官方不再出安全修复,官方也建议计划升级。这次升到 8.2.35 只解决眼前的问题,还在用 8.2 的,现在就该安排升到 8.3 或 8.4。
PHP 8.1 及更早的版本(包括 7.4、8.0),PHP 官方这次不发版。官方给 7.4、8.0、8.1 准备了”最小源码补丁分支”(GitHub 上 PHP-7.4-CVE-2026-109618-109619 这类分支),只适合自己编译 PHP 的人。Ubuntu 22.04 的系统包是个例外,Ubuntu 自己回补了 8.1,升到 8.1.2-1ubuntu2.28 就行。其他情况,一般人直接升到 8.3 或 8.4。
跨大版本升级要小心。WordPress 之类的程序升 PHP 大版本之前,先在测试环境试一遍插件和主题兼容。宝塔可以同时装多个 PHP 版本,给测试站点切到 8.3 或 8.4,前台、后台、常用插件都跑一遍没问题,再把正式站切过去。测试站可以照《2026 搬瓦工宝塔「安装即建站」教程:一条命令装好面板、环境和 WordPress,最快 3 分钟上线》搭,几分钟就能装好 WordPress。
七、PHP 漏洞升级常见问题
1、只跑静态网站,要不要升级 PHP?
官方说的风险范围是对外提供 Web 服务的 PHP。网站全是 HTML 静态文件、Web 服务器根本不把请求交给 PHP 的,不在这次的范围里。机器上装着 PHP-FPM 又不确定有没有在用,就按第三节升了,几条命令的事。
2、网站套了 CDN,能挡住吗?
挡不住。触发漏洞的是一个看起来很普通的上传请求,CDN 照样会把它送到你的源站,而且一个未登录的请求就能在网站代码运行之前触发。CDN 或防火墙规则顶多算第五节说的减少暴露面,修复还是得升级 PHP。
3、升级完一定要重启吗?
要。已经在跑的 php-fpm 或 Apache 进程还是旧版本,不重启等于没升。改 php.ini 做缓解也一样,session.upload_progress.enabled 改完要重启所有 worker 才生效。
4、Windows 上的 PHP 怎么办?
Windows 版同样升到 8.5.12、8.4.27、8.3.36、8.2.35。10 月 23 日官方又给 Windows 发了 -1 构建(8.5.12-1、8.4.27-1、8.3.36-1、8.2.35-1),修 Brotli 库的 CVE-2026-111497,只影响 Windows 构建,Windows 用户直接装带 -1 的版本。在搬瓦工 VPS 上建站基本都是 Linux,不用管这条。
5、小版本升级会不会把网站搞坏?
从 8.3.x 升到 8.3.36 这种同一版本线里的升级,修的是安全问题和 bug,一般不影响插件兼容。真正要担心兼容的是跨大版本,比如从 8.1 升到 8.3,那种按第六节先在测试环境试。
八、搬瓦工 VPS 建站的两句提醒和购买方式
搬瓦工 VPS 是你自己管理的服务器,系统和 PHP 的安全更新搬瓦工不会替你做,这种公告一出来就要自己登录上去升。升级前在 KiwiVM 后台打个快照,万一升坏了还能回滚。第一次买的看《2026 最新搬瓦工购买教程 & 支付宝支付教程》,下单前到《2026年10月最新搬瓦工优惠码/搬瓦工优惠套餐/高速线路/新手教程整理》看一眼有没有新码。
温馨提醒
这两个漏洞一个未登录的请求就能触发,所有对外提供网站服务的 PHP 都在范围内,用 mod_php 的风险最高。按版本线升到 8.2.35、8.3.36、8.4.27 或 8.5.12,系统包看 changelog,升完记得重启 php-fpm 或 Apache。一时升不了就先做第五节的缓解,但那只是减少暴露面,不是修复。
九、搬瓦工新手教程和套餐推荐
1、搬瓦工实时库存监控
搬瓦工实时库存:https://kucun.banwagongcn.com
2、搬瓦工最推荐套餐
- 搬瓦工优惠码:BWHCGLUKKB
- 搬瓦工购买教程:《搬瓦工新手用户注册和支付宝购买图文指导教程》
| 方案 | 内存 | CPU | 硬盘 | 流量/月 | 带宽 | 推荐机房 | 价格 | 购买 |
|---|---|---|---|---|---|---|---|---|
| KVM (最便宜) | 1GB | 2核 | 20GB | 1TB | 1Gbps | DC2 AO DC8 ZNET | $49.99/年 | 购买 |
| KVM | 2GB | 3核 | 40GB | 2TB | 1Gbps | $52.99/半年 $99.99/年 | 购买 | |
| CN2 GIA-E (最推荐) | 1GB | 2核 | 20GB | 1TB | 2.5Gbps | 美国 DC6 CN2 GIA-E 美国 DC9 CN2 GIA 日本软银 JPOS_1 荷兰 EUNL_9 美国圣何塞 CN2 GIA 加拿大 CN2 GIA | $49.99/季度 $169.99/年 | 购买 |
| CN2 GIA-E (AI 部署) | 2GB | 3核 | 40GB | 2TB | 2.5Gbps | $89.99/季度 $299.99/年 | 购买 | |
| SLA (SLA 保障) | 1GB | 独享2核 | 20GB | 1TB | 2.5Gbps | 美国 DC5 SLA 99.99% 在线率保证 每两周免费换 IP 一次 | $65.89/季度 $239.99/年 | 购买 |
| SLA (外贸建站) | 2GB | 独享3核 | 40GB | 2TB | 2.5Gbps | $116.99/季度 $399.99/年 | 购买 | |
| HK (高端首选) | 2GB | 2核 | 40GB | 0.5TB | 1Gbps | 中国香港 CN2 GIA 日本东京 CN2 GIA 日本大阪 CN2 GIA 新加坡 CN2 GIA | $89.99/月 $899.99/年 | 购买 |
| HK (高端建站) | 4GB | 4核 | 80GB | 1TB | 1Gbps | $155.99/月 $1559.99/年 | 购买 | |
| OSAKA (高端性价比) | 2GB | 2核 | 40GB | 0.5TB | 1.5Gbps | 日本大阪 CN2 GIA | $49.99/月 $499.99/年 | 购买 |
| OSAKA | 4GB | 4核 | 80GB | 1TB | 1.5Gbps | $86.99/月 $869.99/年 | 购买 | |
| 最新补货通知:点击查看 | 2026 搬瓦工补货通知群:200475672 | 280724862 | 852461608 | |||||||
选择建议
- 纯新手、只是想体验或搭个小站:选最便宜的 KVM 套餐,$49.99/年,便宜够用。
- 大多数人、想要又快又稳长期用:选 CN2 GIA-E 套餐,$49.99/季度,国内访问速度快、线路稳,还能在多个机房之间切换,最值得推荐。
- 追求极致速度、预算充足:选香港 HK 套餐,延迟最低,适合对速度要求高的朋友。
更多套餐怎么选、机房怎么挑,可以看我们的新手入门专栏。
3、搬瓦工交流和补货通知
