↑

PHP 曝出两个高危远程代码执行漏洞,攻击者无需身份验证即可触发

程序员辉哥|阅读 1
2026/10/22 20:04
PHP高危漏洞PHP2shellCVE-2026-109618CVE-2026-109619
PHP今日爆出PHP2shell远程代码执行漏洞风险通告,披露PHP存在两个远程代码执行漏洞,编号分别为CVE-2026-109618和CVE-2026-109619,风险等级为高风险。

被誉为“世界上最好的语言”的 PHP 今日被曝存在两个远程代码执行漏洞,编号分别为 CVE-2026-109618 和 CVE-2026-109619,风险等级均为高风险。

image.png

据介绍,攻击者无需身份验证,即可通过发送特制的 multipart POST 请求触发漏洞,造成内存破坏,最终实现远程代码执行,严重情况下可能导致服务器被完全控制。

具体来看,CVE-2026-109618 与 PHP 处理内存耗尽(OOM)错误时的异常退出机制有关。在特定情况下,内存分配失败可能导致请求内存处于无效状态,后续处理过程中进而引发内存破坏和远程代码执行。

另一个漏洞 CVE-2026-109619 则与 PHP 工作进程跨请求保留的全局状态有关。由于部分状态未在请求内存释放前完全重置,后续请求可能访问已经失效的内存,进而引发释放后使用等内存安全问题,最终可能导致远程代码执行。

攻击者成功利用上述漏洞后,可以 Web 工作进程账户的身份执行任意代码,可能造成服务器完全沦陷、敏感数据泄露或恶意软件植入等后果。

image.png

受影响版本

以下 PHP 版本存在漏洞:

  • PHP 8.2:低于 8.2.35 的版本,建议升级至 8.2.35 或更高版本。
  • PHP 8.3:低于 8.3.36 的版本,建议升级至 8.3.36 或更高版本。
  • PHP 8.4:低于 8.4.27 的版本,建议升级至 8.4.27 或更高版本。
  • PHP 8.5:低于 8.5.12 的版本,建议升级至 8.5.12 或更高版本。

针对上述漏洞,PromptTree 建议用户及时开展安全自查,评估业务是否受到影响,并尽快升级至对应安全版本。升级前应做好数据备份,避免修复过程中出现意外。

PHP 8.5.12、8.4.27、8.3.36 和 8.2.35 修复了两个可能导致未经身份验证的远程代码执行的严重漏洞。强烈建议所有 PHP 用户立即更新。

哪些人面临风险

所有提供 Web 服务请求的 PHP 安装均面临风险,包括 PHP-FPM、带有 mod_php 的 Apache、php-cgi、FrankenPHP 和 LiteSpeed。PHP 安全团队认为 mod_php 的风险最高,因为已有演示表明,未经身份验证的请求可以在任何应用程序代码运行之前触发攻击。

漏洞详情

  • 通过内存溢出(OOM)漏洞实现远程代码执行(RCE),CVE-2026-109618(GHSA-w8hw-w9fx-j79w):内存溢出处理程序可能会在内部请求数据尚未完全初始化时中断 PHP 的执行,请求清理程序随后可能会将无效数据视为有效数据。
  • 利用过时的全局状态进行远程代码执行(RCE),CVE-2026-109619(GHSA-6wmf-4rv5-p3rp):请求拥有的内部状态在其底层内存被释放后仍然存在,同一工作进程处理的后续请求可能会在正常初始化重置该过时状态之前使用它。

如何更新

请更新至 PHP 8.5.12、8.4.27、8.3.36 或 8.2.35 版本。源代码下载请访问 PHP 官方下载页面,Windows 源代码和二进制文件也在同一页面上。

Linux 发行版和 LTS 供应商已提前收到补丁,请向您的供应商查询更新的软件包。

PHP 8.1 及更早版本已停止接收 PHP 项目提供的更新。部分发行版和长期支持(LTS)供应商会提供向后移植的修复程序,详情请联系您的供应商,或升级到受支持的版本。

鉴于这些漏洞的严重性,PHP 安全团队为 PHP 7.4、PHP 8.0 和 PHP 8.1 提供了最小的源代码向后移植,以帮助从源代码构建或无法访问 LTS 供应商的用户。

无法立即更新的缓解措施

虽然只有更新才能彻底解决问题,但以下措施可以减少特定攻击途径带来的风险,但并不能保证安装安全。

针对 CVE-2026-109618(内存溢出 RCE):

  • 设置 memory_limit=-1 内存限制,最好采用应用程序无法覆盖的方式,例如在 FPM 池或 Apache 配置中通过 php_admin_value 设置,并检查是否有任何池、目录或应用程序重新设置了内存限制。这可以消除可控的 PHP 内存限制故障,但底层分配故障仍然可能触发漏洞。
  • 设置较低的 post_max_size。对于不需要文件上传的应用,设置 post_max_size = 8M;如果需要文件上传,则设置 post_max_size = 32M。保持 upload_max_filesize 低于某个 post_max_size 阈值。考虑在 Web 服务器或代理级别强制限制解码后的请求大小、输入字段数量、多部分请求体数量、请求头数量和嵌套深度。这些限制还必须涵盖没有可用参数的请求 Content-Length。
  • 使用容器或 cgroup 限制作为可用性边界,最好采用仅终止受影响工作进程的策略。不要使用 RLIMIT_AS、RLIMIT_DATA 等其他方法,因为这可能会导致易受攻击的分配失败。

针对 CVE-2026-109619(过时全局状态 RCE):

  • 设置 session.upload_progress.enabled=0 并重启每个工作进程。使用在请求解析之前应用的 FPM 池或服务器配置中的 php.ini。不要依赖 ini_set() 或 FPM .user.ini。这会阻塞已确认的会话路径,但不会阻塞其他变体。
  • 在 PHP 8.5 中,设置 fatal_error_backtraces=0 并重启每个 worker。这只会阻塞已确认的致命回溯路径。
  • 移除初始化前每个请求中应用的无效或已弃用的诊断设置。使用 --hash-extends 隐藏诊断信息,并确保 error_reporting 和 display_errors 不会帮助攻击者。
  • 修复攻击者可触及的致命错误和执行超时,包括回调、上传或导入处理和清理中的失败。