2026 年 10 月 21 日,PHP 官方披露了两个评分高达 9.2 的严重漏洞(CVE-2026-109618 与 CVE-2026-109619),攻击者可在未经身份验证的情况下实现远程代码执行。
所有低于修复版本的 PHP 都存在风险。这包括了仍在支持周期内的 8.2、8.3、8.4、8.5 分支,以及早已停止支持的 5.x、7.x、8.0 和 8.1 分支。
修复方案
根据你的服务器环境,选择以下一种方式:
方案一:使用服务器面板提供的打包版本(最简便)
如果你使用的是宝塔面板,宝塔已应用官方补丁并打包了修复版本。你可以登录宝塔面板,进入“软件商店” → “已安装”,更新软件列表后,找到 PHP 并点击更新升级。
如果你使用的是其他面板(如 cPanel、Plesk)或云服务商,请检查其软件源中是否已提供包含补丁的更新版本。
方案二:自行应用补丁并重新编译(适合自行管理服务器的用户)
如果你自行编译 PHP,需要从 PHP 官方 Git 仓库获取针对相应分支的修复补丁,应用到源码后重新编译。PHP 官方在 GitHub 上提供了相应的修复分支。部分第三方也提供了预编译的补丁版本(如针对 Windows 或 Ubuntu 的重建包),但使用前需自行评估信任风险。
方案三:升级到受支持的 PHP 版本(根本解决)
PHP 官方为 8.2 及以上分支发布了正式的修复版本(8.2.35、8.3.36、8.4.27、8.5.12),升级后即可获得完整修复。
临时缓解措施(仅作过渡)
如果暂时无法立即升级或打补丁,PHP 官方建议将 session.upload_progress.enabled 设置为 Off。这可以阻断其中一条已确认的攻击路径(针对 CVE-2026-109619),但不能防御另一个漏洞,因此不能替代真正的补丁。
你可以尝试在 php.ini 中修改,或在网站根目录创建 .user.ini 文件并写入 session.upload_progress.enabled = Off(前提是你的主机支持 .user.ini)。修改后需重启 PHP 服务或等待其生效。
官方编号分别是 CVE-2026-109618 和 CVE-2026-109619,它们都源于 PHP 核心在处理请求时的内存管理缺陷,最终可导致未经身份验证的远程代码执行(RCE)。简单来说,攻击者不需要你的网站代码有漏洞,只要 PHP 本身存在缺陷,他们就能直接在你的服务器上执行任意命令。
🧠 漏洞一:CVE-2026-109618(内存耗尽导致的释放后使用)
这个漏洞的根源在于 PHP 处理“内存耗尽”(Out-of-Memory)错误的方式。
当 PHP 处理请求时如果内存不足,它会使用一个叫 longjmp() 的机制来紧急中止当前请求。问题在于,这个紧急中止可能发生在某些内部数据结构初始化到一半的时候。于是,这些结构体就处于一种“损坏”或“未初始化”的状态,但后续的清理流程却会照常读取或操作它们。攻击者可以故意构造请求(例如利用 multipart 表单处理)来触发内存耗尽,从而控制这块被损坏的内存,最终劫持程序执行流,运行自己的代码。
🧠 漏洞二:CVE-2026-109619(全局状态残留导致的释放后使用)
这个漏洞与 PHP 的“全局状态”有关。PHP 的 worker 进程在处理完一个请求后,会重置全局状态,准备迎接下一个请求。但在某些场景下,这个重置并不彻底,或者重置后又被意外地重新填充了。
结果就是,全局状态的某个指针可能仍然指向上一个请求已经被释放的内存。当新的请求到来时,PHP 可能会在初始化完成前就读取或依赖这个“悬空指针”,攻击者同样可以利用这一点来操控内存,实现代码执行。研究显示,这个漏洞的触发甚至不依赖于 session.upload_progress 功能,通过普通的 multipart/form-data POST 请求就可能触发底层的解析器缺陷。
⚔️ 攻击是如何进行的?
综合来看,攻击者通常会利用这两个漏洞中的一个,通过以下步骤实施攻击:
- 发送恶意请求:攻击者向你的服务器发送特制的 HTTP 请求。这些请求的目的不是利用你的网站应用,而是触发 PHP 引擎自身的缺陷。对于 CVE-2026-109618,请求会故意耗尽内存;对于 CVE-2026-109619,请求会试图利用残留的全局状态。
- 操控内存与信息泄露:在触发漏洞后,攻击者往往需要绕过 ASLR(地址空间布局随机化)等防护。公开的分析指出,攻击者可以通过分析服务器返回的
Set-Cookie头等信息,来泄漏内存地址,从而计算出关键函数(如zif_system)在内存中的位置。 - 执行任意代码:一旦获得了足够的信息并操控了内存,攻击者就能让 PHP worker 进程执行他们指定的系统命令。由于 PHP 通常以
www-data等 Web 服务账户运行,攻击者因此获得了与 Web 服务器同等权限的代码执行能力,可能导致服务器被完全控制。
by DeepSeek.
相关链接: