跳到正文
Hacker News-首页· danlark1·· 5 天前精选AI 评分86

PHP2Shell:AI 揭示 PHP 中的严重远程代码执行漏洞

PHP2Shell: AI uncovers critical RCE in PHP

AI 导读

Wiz Research 披露了 PHP 核心引擎中的多个严重内存安全漏洞(统称 PHP2Shell,覆盖过去十年的所有 PHP 版本),攻击者可借此实现未经身份验证的远程代码执行和敏感内存泄露。前沿 AI 模型在漏洞发现与利用链构建中发挥了关键作用,将原本极难利用的长期缺陷转化为实际威胁。PHP 团队已于 2026 年 10 月 21 日发布修复补丁,建议立即升级。

推荐理由

文章详细披露了 PHP 核心引擎中存在十多年的严重内存安全漏洞及 AI 在漏洞挖掘与利用中的作用,读者可以据此评估基础设施层面的安全风险。

正文 · AI 翻译

执行摘要

  • Wiz Research 在核心 PHP 中发现了多个严重漏洞。PHP 是一种流行的通用脚本语言,为全球 70% 的网站提供驱动。成功利用这些漏洞可能允许攻击者控制受影响的服务器、窃取敏感数据并篡改运行在其上的网站。 

  • PHP 是网络的基石:它是驱动 WordPress、Joomla、Drupal、维基百科的 MediaWiki 以及许多其他软件的编程语言。

  • 这些漏洞包括独立于运行在其之上的应用程序的、PHP 自身中的内存泄露和未经身份验证的远程代码执行,这使每个受影响的网站都面临直接风险。 

  • 过去十年中发布的每一个 PHP 版本(可追溯到 5.4 版本)都受到其中至少一个漏洞的影响。攻击者可以远程利用这些漏洞,在某些情况下相当容易。强烈建议立即打补丁。

  • 2026 年 10 月 21 日,PHP 发布了修复补丁,修复了核心引擎中的多个内存安全漏洞。

  • 这些发现属于 PHP 中发现的最严重的漏洞,可以说也是软件历史上最严重的漏洞之一。底层缺陷已经存在了几十年,但证明其可利用性需要极其复杂的步骤链,几乎达到了人类研究人员实际能够实现的极限。前沿 AI 模型大幅降低了这一门槛,将一个长期存在的缺陷转化为了漏洞利用。

概述

在这篇文章中,我们将解释前沿 AI 如何帮助我们发现并修复了在 PHP 代码库中隐藏了十多年的漏洞。下面描述的问题都源于关键的架构决策(有些是在十多年前做出的),并被归类到两个 CVE 下,严重程度最高达到 CVSS 9.2。这项工作演变成了一项跨行业的努力,旨在保护客户、寻找变体、部署检测和缓解措施,并在协同披露前及时验证补丁。

几乎每个 PHP 版本都受到这些问题中至少一个的影响,包括可以追溯到 PHP 5.4 的版本。这些漏洞可能允许未经身份验证的攻击者在受影响的服务器上执行代码或读取敏感的进程内存。该内存可能包含属于其他请求或服务器本身的密码、身份验证令牌、API 密钥和证书。

PHP 是支撑网络大部分内容的编程语言,驱动着 WordPress、Drupal 以及运行维基百科的软件 MediaWiki。其核心引擎中的缺陷可能会影响整个生态系统中的网站,即使它们自己的应用代码是安全的。

有些漏洞之所以成为转折点,是因为它们挑战了关于安全性的基本假设。2014 年,“心脏出血”(Heartbleed)暴 露出保护互联网安全的共享基础设施的脆弱性。2021 年,Log4Shell 揭示了深度嵌入的软件依赖项如何造成广泛的风险暴露,而组织却很难识别这些风险。我们认为 PHP2Shell 可能会标志着 AI 时代的一个类似转折点,它说明了 AI 如何改变长期存在的漏洞的实际可利用性。构建该漏洞利用程序需要通过反复测试和调试,将多个缺陷串联起来,并适应每个目标的内存布局。前沿模型对于使这一过程切实可行至关重要,使我们能够在几小时内跨多个应用程序开发和调整有效的漏洞利用程序。随着这项工作所需的共和专业知识减少,复杂性可能不再构成有意义的屏障,从而改变我们对实践中何为漏洞的定义。

Wiz Research 感谢 PHP 团队、Calif 和 OpenAI 在发现、协调和补丁验证方面的工作。OpenAI 和 Calif 还发布了博客,其中包含有关该漏洞的详细信息——其历史、技术细节以及对披露过程的见解。PHP 也进行了发文。

我们还要对 Automattic、Akamai、AWS、Cloudflare、Fastly、Google、Imperva、Microsoft、Vercel 以及许多其他机构表示诚挚的谢意,感谢他们帮助为无法立即应用补丁的客户准备指南和现成的缓解措施。

Wiz 如何提供帮助?

Wiz 客户应参考 Wiz Threat Intel Center 关于 PHP2Shell 的公告,其中包含用于无代理和运行时漏洞检测的内置覆盖、通过 Wiz Defend 和 Sensor 进行的漏洞利用检测以及自动响应策略,以及修复和威胁搜寻指南。

Sensor 客户还可以启用内置响应策略,以自动终止表现出 PHP2Shell 漏洞利用典型行为的进程:

漏洞

所有披露的漏洞都是内存安全问题,源于 PHP 在处理请求时(尤其是内存不足错误时)处理致命错误的方式中的漏洞。这些错误可能会在请求意外结束后留下损坏的内部 PHP 状态。随后的请求或工作进程可以重复使用该陈旧状态,从而导致内存泄露或损坏。

您可以在下方找到一个表格,展示了我们向 PHP 报告的每个漏洞所演示的影响类型。下面列出的应用程序是我们为 RCE 演示选择的目标。它们是具有代表性的目标——漏洞利用不需要这些 CMS 之一,因为漏洞代码本身位于 PHP 中。

跟踪 ID漏洞攻击者可以实现的目标我们演示的内容
CVE-2026-109618

Upload-progress 反序列化器释放后重用 (use-after-free)

远程进程内存泄露

损坏进程内存并执行代码

未授权泄露 PHP 工作进程内存

WordPress、Drupal 和 Joomla 上的预认证 RCE

与应用程序无关的远程内存泄露

CVE-2026-109619

致命错误回溯释放后重用 (use-after-free)

OPcache 类型混淆

损坏进程内存并执行代码

损坏共享 PHP 状态并执行代码

Drupal 上的预认证 RCE

WordPress 上的预认证 RCE

虽然本博客仅涵盖遵循此问题模式的四个可利用漏洞实例(归类于两个 CVE 下),但 PHP 代码库中还有其他已跟踪且可能未跟踪的此类问题变体。这些变体对利用的要求各不相同,并可能导致不同类型的危害。无论如何,PHP 团队提供的补丁从根本上解决了该问题,并在打过补丁的版本中消除了所有变体。

影响

我们将这些漏洞组合成一个单一的利用脚本 php2shell,并证明它能够在测试时使用 WordPress (wordpress:latest)、Drupal (drupal:latest) 和 Joomla (joomla:latest) 最新容器镜像的部署上,在未经身份验证的情况下远程执行代码。

这些平台说明了其影响,但漏洞本身存在于 PHP 中。漏洞利用并不依赖于应用程序代码中的缺陷:甚至在受影响的 PHP 版本上运行的简单“Hello World”应用程序也可能是脆弱的。

另外,我们证明了攻击者无需实现远程代码执行,就可以从 PHP 进程的内存中读取敏感数据,包括密码、令牌和 API 密钥。

PHP2Shell 配合 Wordpress、Joomla 和 Drupal 的演示: 

AI 拐点

这段脆弱的代码已经存在了十多年。将这些缺陷转化为可工作的攻击需要串环多个漏洞,并考虑 PHP 如何在请求之间分配和重用内存。内存漏洞 notoriously 极其复杂;PHP 版本、配置和应用程序行为的差异可能会破坏攻击依赖的假设。在一个部署上起作用的攻击可能需要进行大幅调整才能在另一个部署上起作用,每个部署都需要进一步的分析、测试和调试。在 AI 出现之前,这种手动工作将很难实施,更难以规模化。 

有了 AI,这不再是障碍。LLM 可以帮助将攻击适配到不同的 PHP 版本、配置和内存布局中。借助测试和调试工具,模型可以分析失败并迭代调整,从而减少每个目标所需的专业工作量。这大大降低了跨不同部署规模化攻击的门槛。

这改变了发现和利用的经济学。由于 AI 减少了开发和适配复杂攻击所需的工作量,曾经看起来不切实际去利用的漏洞现在变成了可行的目标。 

我们在整个研究过程中使用了 Wiz Atlas、Gemini 4 Argon 和 GPT-5.6 Sol。值得一提的是,Gemini 4 Argon 为发现漏洞、漏洞利用开发、攻击检测以及补丁验证作出了宝贵的贡献。

通过使用 Gemini 4 Argon,Wiz 团队展示了为什么前沿 AI 是网络防御的变革者。十多年来,这些关键漏洞一直未得到解决,因为漏洞发现和利用极其复杂。我们很高兴看到 Gemini 4 Argon 帮助防御者缩小这一差距,发现漏洞并协助修补。

Raluca Ada Popa,Google DeepMind Gemini 安全负责人

行业级合作

在公开披露之前,Wiz Research 与 PHP 团队、Calif 和 OpenAI 合作进行了漏洞发现、协调和补丁验证。我们还与 Google Cloud、Cloudflare、AWS、Microsoft、Automattic、Fastly、Akamai、Imperva、Vercel 以及许多其他机构合作,为无法立即更新的组织准备客户指南、检测方案和开箱即用的缓解措施。

PHP 核心中的漏洞影响远远超出了单个应用程序。PHP 运行在云、托管服务提供商、内容分发网络以及数百万个独立管理的服务器上。在技术细节公开之前减少暴露面,需要在整个生态系统中进行协调工作。

技术深度解析

Bug:Upload-progress unserializer use-after-free

PHP 的 Session 模块可以在上传进度处理期间的同一个预初始化窗口中解码会话数据。解码器将请求拥有的记账信息存储在 BG(unserialize) 中。致命的分配失败可能会中断此路径,破坏请求堆并使反序列化器的全局状态保持发布状态。

在由同一个 worker 处理的后续请求中,PHP 可能会将攻击者回收的内存作为活动的反序列化器记账信息消耗。陈旧的状态成为一个强大的内存破坏原语。我们将其与内存泄露结合起来以消除地址不确定性,并在 WordPress、Drupal 和 Joomla 上实现了未经身份验证的远程代码执行。

WordPress、Drupal 和 Joomla 的攻击链是具有代表性的演示。底层原语存在于 PHP 引擎级别,可以影响运行在受漏洞版本上的任何 PHP 应用。

这些问题在应用层以下执行,因此应用日志可能包含很少的上下文。在系统修补之前,防御者应特别注意异常的多部分(multipart)请求,随后是内存限制错误或重复的 HTTP 500 响应、意外大或畸形的 PHPSESSID 响应 Cookie,以及无法解释的 PHP worker 抖动。这些信号可以指导调查。应用 PHP 安全更新仍然是唯一彻底的修复方案。

Bug:Remote process-memory disclosure

PHP 在请求启动期间、正常模块初始化完成之前解析 RFC1867 多部分请求。会话上传进度处理可以在这个早期阶段初始化会话状态,并在 PS(id) 中发布会话 ID。内存不足错误可能会在清理完成之前中止请求。然后 PHP 会破坏请求堆,并可能使 PS(id) 指向释放的分配。

由同一个 worker 处理的后续多部分请求可以在正常的 Session 初始化重置该指针之前到达上传进度清理路径。PHP 将陈旧的指针和长度视为活动的 zend_string,并将回收的堆内容 URL 编码到 PHPSESSID 响应 Cookie 中。即使应用程序从未调用 session_start(),攻击也能奏效,这使得该问题与应用程序无关。我们演示了对包含来自攻击者请求之外的数据的活动 worker 内存的攻击者大小区域的未经身份验证的泄露。

Bug:Fatal-error backtrace use-after-free

在受影响的版本中,PHP 在 EG(last_fatal_error_backtrace) 中保留了最近一次致命错误的追溯信息。致命的内存不足错误可能会破坏请求堆,而不会取消定义该执行器全局值。worker 存活下来,其全局变量仍然指向来自上一个请求的内存。

如果同一个 worker 在下一个请求的初期发出诊断,它可以在执行器重新初始化该状态之前访问指针。随后 PHP 会销毁或更新悬空回溯(dangling backtrace),并跟随攻击者回收的内存。由此产生的跨请求释放后重用(use-after-free)漏洞可被开发为受控的内存破坏。我们利用这种基础漏洞演示了针对 Drupal 的未经身份验证的远程代码执行。

Bug: OPcache 类型混淆

OPcache 将编译后的 PHP 结构持久化保存在共享内存中,并为每个 worker 的运行时指针映射分配索引。Worker 通过共享边界(shared frontier)来协调这些索引。在 zend_accel_script_persist() 期间,PHP 会推进进程本地的 CG(map_ptr_last) 边界。它仅在持久化完成后才发布相应的共享边界。这两个事件之间如果发生分配失败,就会导致进程本地的推进状态保留在原地,而部分持久化的对象则会引用共享状态仍然认为可用的槽位。

当另一个 worker 随后为不同的运行时对象重用其中一个槽位时,陈旧的共享元数据就会解析为错误类型的指针。这种不匹配会导致跨 worker 的类型混淆,并破坏共享的 OPcache 状态。我们利用这种基础漏洞构建了针对 WordPress 的未经身份验证的 RCE 攻击链。

除了这四个 bug 之外,还存在其他变体。虽然我们最初向 PHP 报告了这四个 bug,但通过这次研究我们意识到该漏洞根植于 PHP 代码库深处,需要进行全面修复。其他变体也应归入相同的两个 CVE 之下。

结论

由于影响了 70% 的互联网,PHP2Shell 的影响怎么高估都不为过。它标志着一个 AI 拐点。脆弱的代码在那里存在了十多年之久——AI 改变的是理解这些弱点并将其转化为可用利用(exploit)的能力。借助前沿 AI 模型和合适的工具,一名研究人员在一周内就完成了过去需要世界级团队几个月的工作。

这改变了漏洞发现和利用的经济学。曾经看起来不切实际去利用的漏洞变成了可行的目标。这些相同的功能也为防御者提供了机会,去发现并修复经受了多年审查而幸存下来的缺陷。

Wiz 在整个研究过程中使用了 Wiz Atlas、Gemini 4 Argon 和 GPT-5.6 Sol,其中 Argon 在发现和协助修复该漏洞方面作出了极其显著的贡献。 

我们的目标是将这项工作常规化:系统性地发现现有软件中的缺陷,并在它们进入生产环境之前拦截新的缺陷。我们与 PHP、OpenAI 和 Calif 的协同努力推进了这一目标,运用 AI 来巩固我们共享的软件基础。

负责任披露时间线

  • August 19, 2026: Wiz Research 使用 Wiz Atlas、Gemini 4 Argon 和 GPT-5.6 Sol 发现了第一个 PHP 漏洞。

  • August 20, 2026: 确认针对 Drupal 的未经身份验证的 RCE。

  • August 21, 2026: 确认针对 WordPress 的未经身份验证的 RCE。

  • August 24, 2026: Wiz Research 向 PHP 安全团队报告了这些漏洞。

  • September 21, 2026: PHP 确认了报告并开始开发协同修复方案。

  • October 21, 2026: 修补后的 PHP 版本发布。

  • October 21, 2026: 公开披露。

保持联系

大家好!我们是来自 Wiz 研究团队(@wiz_io)的 Sagi Tzadik、Shir Tamari、Nir Ohfeld 和 Tomer Schwartz。我们是一群资深的白帽黑客,目标只有一个:让云端对所有人而言更加安全。我们专注于寻找云软件中的新攻击向量,并揭露组织所依赖系统中的隔离问题。欢迎通过 X 或 research@wiz.io 与我们联系。

来源:Hacker News-首页 · wiz.io