• 🎉小站の店正式开业试营运,欢迎大家捧场&反馈
  • 订阅小站 TG频道获取更多小福利
  • 欢迎访问小站,如果您觉得本站还不错,请Ctrl+D 收藏本站
  • 任何虚假邮箱的留言评论将一律不通过,你的邮箱不会被公开,请放心留言交流
  • 网站今后如果无法访问,请自行使用代理访问
小站公告
  1. 🎉小站の店正式开业试营运,欢迎大家捧场&反馈
  2. 订阅小站 TG频道获取更多小福利
  3. 欢迎访问小站,如果您觉得本站还不错,请Ctrl+D 收藏本站
  4. 任何虚假邮箱的留言评论将一律不通过,你的邮箱不会被公开,请放心留言交流
  5. 网站今后如果无法访问,请自行使用代理访问

THE JOURNAL · Tech

PHP 史诗级高危漏洞 PHP2Shell (CVE-2026-109618 / 109619) 深度解析与防护指南

CrazyJoe6 阅读♡ 0 赞0 条讨论

PHP 史诗级高危漏洞 PHP2Shell (CVE-2026-109618 / 109619) 深度解析与防护指南

近期(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):

  1. CVE-2026-109618(OOM 内存耗尽控制流与未初始化内存):
    当 PHP 在处理请求过程中发生内存耗尽(Out-of-Memory)错误时,会调用 longjmp() 跳出当前上下文并中止请求。但在特定路径(如处理 RFC 1867 multipart/form-data 表单文件上传及进度追踪)中,代码未能妥善处理该异常跳转,导致内部请求数据结构在仅完成部分初始化时被中断,随后的请求清理流程会将未初始化的内存误判为有效数据指针。
  2. 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)
PHP2Shell
CVE-2026-109618
CVE-2026-109619
🔴 极高危【必须立即处理】 各类 PHP 网站、博客 CMS 及 Web 数据库管理面板均属直击目标。请立即关闭 session.upload_progress.enabled 并升级 PHP。
PHP CLI 常驻内存架构
(Swoole / RoadRunner / Workerman)
PHP2Shell
CVE-2026-109618
CVE-2026-109619
🟠 中低危【建议配置加固】 此类框架由底层自行解析 HTTP 请求,不走传统 SAPI 的 rfc1867 上传进度钩子;但因 Worker 进程长期驻留内存,仍建议显式关闭 upload_progress 并更新 PHP 基础镜像。
Node.js 服务端架构
(Express / Fastify / NestJS / Next.js SSR 等)
Node.js
CVE-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 客户端)
Go
CVE-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 代理(小黄云)就绝对安全了,但实际上存在两个常见盲点:

  1. 源站 IP 绕过:如果你的源站 80 / 443 端口直接对公网 0.0.0.0/0 开放,攻击者只需通过历史 DNS 记录、证书透明度日志(CT Logs)或全网扫描发现源站 IP,在请求头中伪造 Host: 你的域名 直连源站,即可完全绕过 Cloudflare WAF。
  2. 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 查看路径),修改或追加以下配置:

INI
session.upload_progress.enabled = Off

注意:默认 php.ini 中该项通常带有分号注释(;session.upload_progress.enabled = On,底层编译默认值为开启),可用以下命令一键取消注释并重载 php-fpm:

BASH
# 取消注释并将值设为 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-fpm

2. OpenLiteSpeed (lsphp) / Docker 环境

OpenLiteSpeed 使用独立的 lsphp 常驻子进程,除了修改容器或宿主机内的 /usr/local/lsws/lsphp*/etc/php/*/*/php.ini 外,还可以在虚拟主机配置 vhconf.conf 的 phpIniOverride 块中强制覆盖以确保持久化生效:

  1. 在 vhconf.conf 的 phpIniOverride 块中加入:
    APACHE
    phpIniOverride {
    php_admin_value session.upload_progress.enabled Off
    }
  2. 修改容器内 php.ini 并热重载 lsphp 进程:

    BASH
    # 修改容器内所有 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 即代表已成功阻断:

BASH
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):
    BASH
    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 进程:

    BASH
    apt-get update && apt-get install --only-upgrade -y 'lsphp84*'
    pkill lsphp
  • Docker Compose 部署:
    拉取更新后的基础镜像并重建容器:

    BASH
    docker compose pull && docker compose up -d

    最后通过 php -v 确认版本号已达到 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12 及以上即可。


xzの小站 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP 史诗级高危漏洞 PHP2Shell (CVE-2026-109618 / 109619) 深度解析与防护指南

如果这一期对你有帮助

每一次支持,都在帮助这个小站继续更新。量力而行,感谢相伴。

支付宝 支付宝支持作者二维码或图片 一杯咖啡,也是鼓励
微信 微信支持作者二维码或图片 一杯咖啡,也是鼓励
PayPal PayPal支持作者二维码或图片 一杯咖啡,也是鼓励 前往支持 ↗

THE CONVERSATION

一起聊聊0

认真分享 · 友善交流

留下你的想法

无需注册。邮箱不会公开,不会发送订阅或回复邮件。游客评论审核后展示。

支持 **加粗**、*斜体*、`代码`、引用、列表与链接。不支持任意 HTML。

点击发布评论后将自动进行 Cloudflare Turnstile 验证,必要时会提示交互。

读者讨论

最新话题优先 · 回复按时间排列
还没有公开评论。来分享第一条想法吧。