Wiz Research 借助 AI 发现 PHP2Shell 严重 RCE 漏洞
PHP2Shell: AI uncovers critical RCE in PHP
Wiz Research 借助 Gemini 4 Argon 等前沿模型,在 PHP 核心中发现严重漏洞并构建 PHP2Shell 未认证 RCE 利用链。这些漏洞归入 CVE-2026-109618 和 CVE-2026-109619,严重度达到 CVSS 9.2,可导致未认证代码执行或泄露密码、token、API key 等进程内存。
文章拆解多个 PHP 内存安全漏洞组成未认证 RCE 的路径,并具体呈现 AI 降低复杂利用适配与验证成本的过程。
执行摘要
Wiz Research 在核心 PHP 中发现了多个严重漏洞。PHP 是一种广受欢迎的通用脚本语言,为全球 70% 的网站提供支持。成功利用这些漏洞可能让攻击者接管受影响的服务器、窃取敏感数据,并篡改运行在这些服务器上的网站。
PHP 是 Web 的支柱:WordPress、Joomla、Drupal、Wikipedia 旗下的 MediaWiki 以及众多其他网站都使用这种编程语言。
这些漏洞包括内存信息泄露和未经身份验证的远程代码执行,问题存在于 PHP 本身,与其上运行的应用程序无关,使每个受影响的网站都立即面临风险。
过去十年发布的每个 PHP 版本都至少受到其中一种漏洞影响,最早可追溯至 PHP 5.4。攻击者可以远程利用这些漏洞,在某些情况下还相当容易。强烈建议立即安装补丁。
2026 年 10 月 21 日,PHP 发布了补丁,修复了核心引擎中的多个内存安全漏洞。
这些发现堪称 PHP 乃至软件史上最严重的漏洞之一。底层缺陷已经存在了数十年,但要证明这些缺陷可被利用 ,需要一条异常复杂的步骤链,几乎处于人类研究人员实际能够做到的上限。前沿 AI 模型大幅降低了这一门槛,将长期存在的缺陷变成了可利用的漏洞。
概述
本文将解释前沿 AI 如何帮助我们发现并修复隐藏在 PHP 代码库中十余年的漏洞。以下问题都源于关键的架构决策,其中一些决策是在十多年前做出的,并被归入两个 CVE,严重性最高达到 CVSS 9.2。这项工作后来发展为一项跨行业协作,旨在保护客户、查找同类变体、部署检测和缓解措施,并及时验证补丁以配合协调披露。
几乎每个 PHP 版本都至少受到其中一种问题影响,包括可追溯至 PHP 5.4 的版本。这些漏洞可能允许未经身份验证的攻击者在受影响的服务器上执行代码,或读取敏感的进程内存。这些内存中可能包含属于其他请求或服务器本身的密码、认证令牌、API 密钥和证书。
PHP 是 Web 大量服务背后的编程语言,支撑着 WordPress、Drupal 和 MediaWiki,其中 MediaWiki 是运行 Wikipedia 的软件。其核心引擎中的缺陷可能影响整个生态系统中的网站,即使这些网站自身的应用程序代码是安全的。
有些漏洞会成为转折点,因为它们挑战了人们对安全的根本性认知。2014年,Heartbleed 暴露了保护互联网的共享基础设施有多脆弱。2021年,Log4Shell 揭示了深度嵌入的软件依赖可能造成大范围风险暴露,以至于各组织难以甄别。我们认为,PHP2Shell 可能成为 AI 时代的类似转折点,说明 AI 如何改变长期存在的漏洞在实际中的可利用性。构建漏洞利用程序需要串联多个缺陷,并通过反复测试和调试来适应每个目标的内存布局。前沿模型是使这一过程切实可行的关键,使我们能够在数小时内针对多个应用开发并调整出可用的漏洞利用程序。随着完成这项工作所需的时间和专业知识减少,复杂性可能不再构成有意义的障碍,从而改变我们在实践中对何为漏洞的定义。
Wiz Research 谨向 PHP 团队、Calif 和 OpenAI 致谢,感谢他们在漏洞发现、协调和补丁验证方面所做的工作。OpenAI 和 Calif 还发布了博客文章,介绍了该漏洞的历史、技术细节以及披露过程的相关情况。PHP 也发布了相关内容。
我们还要向 Automattic、Akamai、AWS、Cloudflare、Fastly、Google、Imperva、Microsoft、Vercel 以及许多其他机构致以诚挚的谢意,感谢它们帮助为无法立即应用补丁的客户准备指导文件和开箱即用的缓解方案。
漏洞
所有已披露的漏洞都是内存安全问题,源于 PHP 在处理请求时,尤其是处理内存耗尽错误时处理致命错误的方式中的缺陷。请求意外结束后,这些缺陷可能会遗留损坏的 PHP 内部状态。后续请求或工作进程可能会复用这一过期状态,从而导致内存泄露或内存损坏。
下表展示了我们向 PHP 报告的每个缺陷分别被证实会造成什么影响。以下应用是我们为演示 RCE 而选择的目标。它们是具有代表性的目标——利用该漏洞并不需要使用这些 CMS 中的任何一个,因为易受攻击的代码就在 PHP 本身。
| 跟踪 ID | 缺陷 | 攻击者可以实现什么 | 我们演示的内容 |
|---|---|---|---|
| CVE-2026-109618 | 上传进度反序列化器释放后使用 远程进程内存泄露 | 破坏进程内存并执行代码 未经身份验证泄露 PHP 工作进程内存 | 针对 WordPress、Drupal 和 Joomla 的身份验证前远程代码执行 与应用程序无关的远程内存泄露 |
| CVE-2026-109619 | 致命错误回溯释放后使用 OPcache 类型混淆 | 破坏进程内存并执行代码 破坏共享 PHP 状态并执行代码 | 针对 Drupal 的身份验证前远程代码执行 针对 WordPress 的身份验证前远程代码执行 |
尽管本文仅涉及四个可利用的缺陷实例(归入两个 CVE),且这些缺陷都遵循上述问题模式,但 PHP 代码库中还存在该问题的其他已跟踪且很可能未跟踪的变体。这些变体具有不同的利用条件,并可能造成不同类型的影响。无论如何,PHP 团队提供的补丁从根本修复了该问题,并在包含补丁的发布版本中消除了所有变体。
影响
我们将这些漏洞整合为一个漏洞利用脚本 php2shell,并证明它可以在无需身份验证的情况下,利用 WordPress(wordpress:latest)、Drupal(drupal:latest)和 Joomla(joomla:latest)的部署远程执行代码;测试时使用的是这些平台最新的容器镜像。
这些平台直观展示了漏洞的影响,但漏洞实际上存在于 PHP 本身。利用过程并不依赖应用程序代码中的缺陷:即使是一个运行在受影响 PHP 版本上的简单“Hello World”应用程序,也可能存在漏洞。
此外,我们还证明攻击者无需实现远程代码执行,即可读取 PHP 进程内存中的敏感数据,包括密码、令牌和 API 密钥。
使用 Wordpress、Joomla 和 Drupal 对 PHP2Shell 的演示:
AI 转折点
漏洞代码已经存在了十余年。要将这些缺陷变成可用的漏洞利用程序,需要串联多个漏洞,并处理 PHP 如何在请求之间分配和重用内存。内存漏洞极其复杂;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 Security 负责人
行业级协作
在公开披露之前,Wiz Research 与 PHP 团队、Calif 和 OpenAI 合作开展漏洞发现、协调和补丁验证。我们还与 Google Cloud、Cloudflare、AWS、Microsoft、Automattic、Fastly、Akamai、Imperva、Vercel 以及许多其他机构合作,为无法立即更新的组织准备客户指导、检测规则和开箱即用的缓解措施。
PHP 核心中的漏洞影响远不止单个应用程序。PHP 运行于云平台、托管服务商、内容分发网络以及数百万台独立管理的服务器。在技术细节公开之前降低风险敞口,需要整个生态系统协同合作。
技术深入解析
漏洞:上传进度反序列化器释放后使用
PHP 的 Session 模块可以在处理上传进度期间,于同一个预初始化窗口内解码会话数据。反序列化器会将请求自身的状态记录存储在 BG(unserialize) 中。致命的分配失败可能中断此执行路径、销毁请求堆,并使反序列化器的全局状态继续处于已发布状态。
在由同一工作进程处理的后来请求中,PHP 可能将攻击者重新获得的内存当作有效的反序列化器状态来使用。这份陈旧状态会成为一种强大的内存破坏原语。我们将其与内存泄露结合,消除地址的不确定性,并在 WordPress、Drupal 和 Joomla 上实现了未经身份验证的远程代码执行。
WordPress、Drupal 和 Joomla 的攻击链只是具有代表性的演示。其底层原语存在于 PHP 引擎层面,可能影响运行在受影响版本上的任何 PHP 应用。
这些问题在应用层之下执行,因此应用日志可能几乎不包含相关上下文。在系统完成修补前,防御者应特别留意异常 multipart 请求之后出现的内存限制错误或反复出现的 HTTP 500 响应、异常大或格式错误的 PHPSESSID 响应 Cookie,以及无法解释的 PHP 工作进程异常波动。这些信号可为调查提供方向。应用 PHP 安全更新仍是唯一的完整补救措施。
漏洞:远程进程内存泄露
PHP 会在请求启动期间解析 RFC1867 multipart 请求,此时正常的模块初始化尚未完成。Session 上传进度处理可以在这一早期阶段初始化 Session 状态,并在 PS(id) 中发布会话 ID。内存耗尽错误可能在清理完成前中止请求。随后,PHP 会销毁请求堆,并可能让 PS(id) 继续指向已释放的内存分配。
由同一工作进程处理的后来 multipart 请求,可能在正常的 Session 初始化重置该指针之前,进入上传进度清理路径。PHP 会将这个陈旧的指针和长度视为有效的 zend_string,并对重新占用的堆内容进行 URL 编码,然后写入 PHPSESSID 响应 Cookie。即使应用从未调用 session_start(),攻击也会奏效,因此该问题与具体应用无关。我们演示了无需身份验证即可泄露工作进程仍在使用的内存中一段大小由攻击者指定的区域,其中包含攻击者请求之外的数据。
漏洞:致命错误回溯释放后使用
在受影响的版本中,PHP 会在 EG(last_fatal_error_backtrace) 中保留最近一次致命错误的回溯。致命的内存耗尽错误可能在未将执行器全局值置为未定义的情况下销毁请求堆。工作进程仍会继续运行,但其某个全局值仍指向上一个请求中的内存。
如果同一工作进程在下一个请求早期输出诊断信息,它可能会在执行器重新初始化该状态之前访问该指针。随后,PHP 会销毁或更新这个悬空回溯,并沿其访问攻击者重新获得的内存。由此产生的跨请求释放后使用可进一步利用,形成可控的内存破坏。我们利用这一原语 demonstrated 未经身份验证的远程代码执行。
漏洞:OPcache 类型混淆
OPcache 会将编译后的 PHP 结构持久化在共享内存中,并为它们分配索引,将这些索引记入每个工作进程的运行时指针映射。工作进程通过共享前沿来协调这些索引。在 zend_accel_script_persist() 期间,PHP 会推进进程本地的 CG(map_ptr_last) 前沿。只有在持久化完成后,它才会发布相应的共享前沿。如果这两个事件之间发生分配失败,进程本地的推进会保留下来,而部分持久化对象所引用的槽位在共享状态中仍被视为可用。
当另一个工作进程随后将其中一个槽位重新用于另一个运行时对象时,过期的共享元数据会解析到一个类型错误的指针。这种不匹配会造成跨工作进程的类型混淆,并破坏共享的 OPcache 状态。我们利用这一攻击原语构建了一条针对 WordPress 的无需身份验证的 RCE 攻击链。
除这四个漏洞外还存在其他变体。我们最初通过这项研究向 PHP 报告了这四个漏洞,但也意识到,该漏洞深植于 PHP 代码库之中,需要全面修复。其他变体也应归入同两项 CVE。
Wiz 能提供什么帮助?
Wiz 客户应参阅 有关 PHP2Shell 的 Wiz Threat Intel Center 公告,其中内置了对无代理漏洞检测和运行时漏洞检测的支持、通过 Wiz Defend 和 Sensor 进行的利用检测、自动响应策略,以及修复和威胁狩猎指导。
使用最新版本 (1.0.12768) 的 Sensor 客户还可以启用内置响应策略,自动终止表现出 PHP2Shell 利用典型行为的进程:
结论
互联网中有 70% 受到影响,PHP2Shell 的影响怎么夸大都不为过。它标志着 AI 的一个转折点。这段易受攻击的代码已经存在了十多年——AI 改变的是理解这些弱点并将其转化为可用攻击工具的能力。凭借前沿 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 研究团队的 Sagi Tzadik、Shir Tamari、Nir Ohfeld 和 Tomer Schwartz(@wiz_io)。我们是一群经验丰富的白帽黑客,只有一个目标:让云成为每个人更安全的地方。我们专注于发现云软件中的新攻击向量,以及揭示组织所依赖系统中的隔离问题。欢迎通过 X 或发送邮件至 research@wiz.io 与我们联系。
来源:Hacker News · wiz.io