
近期(2026 年 10 月),安全界披露了 PHP 核心引擎中两个极具威胁的远程代码执行(RCE)漏洞:CVE-2026-109618 与 CVE-2026-109619,安全研究人员将其统称为 “PHP2Shell”。两个漏洞的 CVSS v4.0 评分均高达 9.2(Critical / 严重),波及从 PHP 5.4.0 到 PHP 8.5.11 的几乎所有版本。
多地政府及各大服务网站均受到相关影响,并第一时间停机维护。本站也已第一时间维护处理完毕并分享相关信息。
与此同时,Node.js 和 Go 语言也在同一周内密集发布了高危安全更新。对于广大开发者与运维人员而言,如何根据底层技术栈判断服务是否受影响、Cloudflare 边缘规则能否防住、以及在各大软件源与容器镜像同步补丁前如何紧急缓解,是当下的首要任务。本文将为大家提供一份完整的漏洞情报汇总与通用处置指南。
一、 漏洞深度解析:什么是 PHP2Shell?
不同于特定业务代码或第三方插件层面的缺陷,PHP2Shell 直接存在于 PHP 核心运行时(Runtime)的底层内存与错误恢复逻辑中。攻击者可以将这两个漏洞组合利用(Chaining),在无需任何身份认证(Pre-auth)的前提下向目标服务器发送特定构造的 HTTP 请求,直接实现远程代码执行(RCE):
- CVE-2026-109618(OOM 内存耗尽控制流与未初始化内存):
当 PHP 在处理请求过程中发生内存耗尽(Out-of-Memory)错误时,会调用longjmp()跳出当前上下文并中止请求。但在特定路径(如处理 RFC 1867multipart/form-data表单文件上传及进度追踪)中,代码未能妥善处理该异常跳转,导致内部请求数据结构在仅完成部分初始化时被中断,随后的请求清理流程会将未初始化的内存误判为有效数据指针。 - CVE-2026-109619(内部状态残留与 Use-After-Free):
在通过longjmp()处理致命错误恢复时,请求所拥有的内部状态指针(例如ext/session中用于追踪上传进度的缓存zval指针)在其底层HashTable内存被释放后依然残留。当同一个常驻 Worker 进程(如PHP-FPM、LSPHP)继续处理下一个请求时,会在正常初始化重置前访问或复用该已释放的悬垂指针,从而触发堆内存释放后重用(Heap Use-After-Free)并达成任意代码执行。
漏洞触发条件与影响范围
- 受影响版本:PHP 5.4.0 至 PHP 8.5.11 全系版本。
- 核心触发组件:与自 PHP 5.4.0 起默认开启的
session.upload_progress(文件上传进度追踪)特性及复用 Worker 进程的 SAPI 环境(PHP-FPM、LSPHP、FrankenPHP、mod_php等)密切相关。 - 官方已发布的安全版本:
- PHP 8.5.12
- PHP 8.4.27
- PHP 8.3.36
- PHP 8.2.35
(注:PHP 8.1 及更早版本已处于生命周期结束 EOL 状态,PHP 官方不再提供补丁,需依赖操作系统发行版 Backport 或配置级缓解。)
二、 同期 Node.js 与 Go 高危安全更新速览
除 PHP 外,本周另外两大主流后端运行环境也发布了重要安全公告:
1. Node.js 10 月 21 日安全更新(修复版本:22.23.4 / 24.22.1 / 26.12.1)
- CVE-2026-111497 (High):Brotli 解码器越界写入。Node.js 内置的 Brotli 解压逻辑在处理恶意构造的数据流时可触发越界写入,存在导致进程崩溃或远程代码执行(RCE)的风险。
- CVE-2026-106069 / CVE-2026-105483 (High) & CVE-2026-106072 (Medium):TLS 证书非规范 IP 与全角数字主机名校验绕过。影响 Node.js 作为客户端发起 TLS 连接时的证书校验。
- CVE-2026-105482 (High):DNS 解析空字节验证缺失。
dns.resolve未正确校验包含空字节(\0)的输入,可导致域名解析截断欺骗。
2. Go 语言 10 月安全更新(修复版本:Go 1.27.3 / 1.26.10 及 1.27.2)
- CVE-2026-111943 (Urgent):
crypto/x509紧急证书吊销/拉黑。由于外部特定中级 CA(eMudhra 相关 8 个中级证书密钥)存在安全风险,攻击者可能利用其签发伪造的 TLS 证书实施中间人(MitM)劫持。Go 官方通过紧急通道发布1.27.3和1.26.10,在标准库中硬编码拒绝信任通过这 8 个中级 CA 公钥签发的任何证书链。 - CVE-2026-97032 / CVE-2026-78663 等(Go 1.27.2):涉及
net/http标准库中的 HTTP/2 服务端 HPACK 编码器竞态崩溃、流控限制绕过及内存耗尽拒绝服务(DoS)漏洞。
三、 不同技术栈与架构的受影响评估汇总
针对不同架构的站点与后端服务,可按以下技术栈维度进行快速自查:
| 服务技术栈 / 运行架构 | 涉及哪波漏洞 | 风险等级 | 评估结论与处置建议 |
|---|---|---|---|
| 传统 PHP SAPI 架构 (PHP-FPM / OpenLiteSpeed LSPHP / FrankenPHP / mod_php) | PHP2ShellCVE-2026-109618CVE-2026-109619 | 🔴 极高危 | 【必须立即处理】 各类 PHP 网站、博客 CMS 及 Web 数据库管理面板均属直击目标。请立即关闭 session.upload_progress.enabled 并升级 PHP。 |
| PHP CLI 常驻内存架构 (Swoole / RoadRunner / Workerman) | PHP2ShellCVE-2026-109618CVE-2026-109619 | 🟠 中低危 | 【建议配置加固】 此类框架由底层自行解析 HTTP 请求,不走传统 SAPI 的 rfc1867 上传进度钩子;但因 Worker 进程长期驻留内存,仍建议显式关闭 upload_progress 并更新 PHP 基础镜像。 |
| Node.js 服务端架构 (Express / Fastify / NestJS / Next.js SSR 等) | Node.jsCVE-2026-111497 等 | 🟡 中危 | 【跟进运行时更新】 建议前置反向代理保护,并将宿主或容器内的 Node.js 运行时升级至 22.23.4+ / 24.22.1+ / 26.12.1+。 |
| 纯静态前端构建应用 (仅构建阶段使用 Vue / React / Vite,生产环境由 Nginx/Caddy 托管静态资源) | 均不涉及 | 🟢 无影响 | 【无需操作】 生产环境不运行 Node.js 进程,不受 Node.js 运行时漏洞影响。 |
| Go 编译型后端服务 (各类基于 Golang 标准库开发的 Web 服务与 API 客户端) | GoCVE-2026-111943 等 | 🟡 中低危 | 【重编译或更新镜像】 若服务需频繁发起出站 HTTPS 请求,受 CVE-2026-111943 影响相对直接;前置反代以 HTTP/1.1 转发可规避 HTTP/2 DoS。因 Go 为静态编译,需使用 Go 1.27.3 / 1.26.10 重新编译或拉取新版镜像。 |
| 其他语言技术栈 (.NET / C# / C++ / Rust / Java / Python) | 均不涉及 | 🟢 无影响 | 【无需操作】 与本次 PHP、Node.js、Go 漏洞均无关。 |
四、 Cloudflare 紧急 WAF 拦截规则与“源站泄露”盲点
面对 PHP2Shell 的在野利用风险,Cloudflare 已第一时间向全平台所有用户(包括 Free 免费版套餐)自动推送了紧急 WAF 规则(默认动作均为 Block),并上线了 Full Transaction Detection(全事务检测) 技术,联合分析入站请求与源站响应以阻断攻击:
- Cloudflare Free Ruleset(免费版已默认生效):
规则 ID 包括b5ccf32f、82dab691、bcd95984(归属Generic Rules - Anomalous Execution)。 - Cloudflare Managed Ruleset:
规则 ID 包括c438d5dd、545d163c等。
⚠️ 重要提醒:切勿仅依赖 Cloudflare 而忽视源站防护!
很多运维人员认为开启了 Cloudflare 代理(小黄云)就绝对安全了,但实际上存在两个常见盲点:
- 源站 IP 绕过:如果你的源站
80/443端口直接对公网0.0.0.0/0开放,攻击者只需通过历史 DNS 记录、证书透明度日志(CT Logs)或全网扫描发现源站 IP,在请求头中伪造Host: 你的域名直连源站,即可完全绕过 Cloudflare WAF。 - Docker 端口映射绕过防火墙:在 Linux 主机上使用 Docker 映射端口(如
-p 80:80)时,Docker 会直接将规则写入iptables的FORWARD/DOCKER-USER链,默认绕过宿主机ufw等防火墙的INPUT规则。
因此,除了配置源站防火墙仅允许 Cloudflare 回源 IP 访问外,必须在源站 PHP 运行时内部完成实质修复。
五、 PHP2Shell 实战修复与临时阻断指南
方案一:临时阻断缓解(秒级生效,适用于所有 PHP 版本)
如果你仍在运行已停止维护的 PHP 7.4 / 8.0 / 8.1,或者所使用的容器镜像/第三方软件源(例如 OpenLiteSpeed 的 lsphp 官方团队正在为 PHP 7.4+ 全版本构建 amd64 与 arm64 软件包,推送存在数小时时间差)尚未同步最新补丁,关闭 session.upload_progress 是目前安全社区公认最有效的临时阻断手段。绝大多数学术站点、CMS 与企业应用均不依赖此功能。
1. 常规 LNMP / LAMP (PHP-FPM) 环境
找到生效的 php.ini(可通过 php --ini 查看路径),修改或追加以下配置:
session.upload_progress.enabled = Off注意:默认 php.ini 中该项通常带有分号注释(;session.upload_progress.enabled = On,底层编译默认值为开启),可用以下命令一键取消注释并重载 php-fpm:
# 取消注释并将值设为 Off(请将路径替换为你的实际 php.ini 路径)
sed -i 's/^;*session.upload_progress.enabled.*/session.upload_progress.enabled = Off/' /etc/php/8.3/fpm/php.ini
# 重载 PHP-FPM 服务
systemctl reload php8.3-fpm2. OpenLiteSpeed (lsphp) / Docker 环境
OpenLiteSpeed 使用独立的 lsphp 常驻子进程,除了修改容器或宿主机内的 /usr/local/lsws/lsphp*/etc/php/*/*/php.ini 外,还可以在虚拟主机配置 vhconf.conf 的 phpIniOverride 块中强制覆盖以确保持久化生效:
- 在
vhconf.conf的phpIniOverride块中加入:phpIniOverride { php_admin_value session.upload_progress.enabled Off } 修改容器内
php.ini并热重载lsphp进程:# 修改容器内所有 lsphp 版本的 php.ini(将 替换为你的容器名) docker exec -u 0 bash -c "sed -i 's/^;*session.upload_progress.enabled.*/session.upload_progress.enabled = Off/' /usr/local/lsws/lsphp*/etc/php/*/*/php.ini" # 重载 OpenLiteSpeed 并杀掉旧 lsphp 子进程使其自动重新拉起 docker exec /usr/local/lsws/bin/lswsctrl reload docker exec pkill lsphp
3. 验证缓解是否生效
执行以下命令,确认 Local Value 与 Master Value 均输出为 Off 即代表已成功阻断:
php -i | grep session.upload_progress.enabled
# 预期输出:
# session.upload_progress.enabled => Off => Off方案二:根本修复(升级至 PHP 官方安全版本)
临时缓解生效后,建议在对应发行版或容器镜像同步更新后,尽快将 PHP 升级至包含补丁的正式版本(8.2.35+、8.3.36+、8.4.27+、8.5.12+):
- Debian / Ubuntu (
apt):apt-get update && apt-get install --only-upgrade -y 'php8.*' systemctl reload php8.3-fpm - OpenLiteSpeed (
lsphp官方软件源):
待 LiteSpeed 官方软件源完成8.2.35/8.3.36/8.4.27等构建推送后,可直接在宿主机或容器内执行热更新并刷新lsphp进程:apt-get update && apt-get install --only-upgrade -y 'lsphp84*' pkill lsphp - Docker Compose 部署:
拉取更新后的基础镜像并重建容器:docker compose pull && docker compose up -d最后通过
php -v确认版本号已达到8.2.35/8.3.36/8.4.27/8.5.12及以上即可。
如果这一期对你有帮助
每一次支持,都在帮助这个小站继续更新。量力而行,感谢相伴。

读者讨论
最新话题优先 · 回复按时间排列