Hacker News AI · 2026/10/21 21:43:19
AI 发现 PHP 核心 RCE 漏洞,覆盖近十年版本
Wiz Research 利用 AI 在 PHP 核心引擎中发现多个严重内存安全漏洞,包括无需身份验证的远程代码执行(RCE)。这些漏洞影响过去十年发布的所有 PHP 版本(自 5.4 起),直接威胁全球约 70% 的网站基础设施。PHP 官方已于 2026 年 10 月 21 日发布补丁修复相关缺陷。
报道全文原始报道全文
本文目录15 个章节
执行摘要
- Wiz Research 在核心 PHP(一种流行的通用脚本语言,支撑着全球 70% 的网站)中发现多个严重漏洞。成功利用这些漏洞可能使攻击者控制受影响的服务器、窃取敏感数据并篡改其上运行的网站。
- PHP 是 Web 的基石:它是 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 是支撑现代 Web 的编程语言,驱动着 WordPress、Drupal 以及运行维基百科的 MediaWiki。其核心引擎中的漏洞可能会影响整个生态系统中的网站,即使这些网站自身的应用代码是安全的。
某些漏洞之所以成为转折点,是因为它们挑战了关于安全性的基本假设。2014 年,Heartbleed 暴露了保障互联网安全的共享基础设施的脆弱性;2021 年,Log4Shell 揭示了深度嵌入的软件依赖关系如何造成广泛的暴露风险,令组织难以识别。我们认为,PHP2Shell 可能标志着 AI 时代的类似转折点,展示了 AI 如何改变长期存在漏洞的实际可利用性。构建该利用链需要串联多个缺陷,并通过反复测试和调试来适配每个目标的内存布局。前沿模型(Frontier models)对于使这一过程具备可行性至关重要,使我们能够在数小时内针对多种应用开发并调整可用的利用代码。随着此类工作所需的时间和专业知识门槛降低,复杂性可能不再构成有意义的屏障,从而改变我们对“实际易受攻击”的定义。
Wiz Research 感谢 PHP 团队、Calif 和 OpenAI 在漏洞发现、协调及补丁验证方面所做的工作。OpenAI 和 Calif 也发布了博客,详细介绍了该漏洞——包括其历史背景、技术细节以及对披露过程的洞察。PHP 也发布了相关公告。
我们还要向 Automattic、Akamai、AWS、Cloudflare、Fastly、Google、Imperva、Microsoft、Vercel 以及许多其他公司表示诚挚的感谢,他们帮助为无法立即应用补丁的客户准备了指导方案和开箱即用的缓解措施。
Wiz 能提供什么帮助?
Wiz 客户应参考 Wiz Threat Intel Center 关于 PHP2Shell 的公告,其中包含无代理(agentless)和运行时漏洞检测的内置覆盖范围、通过 Wiz Defend 和 Sensor 进行的利用行为检测,以及自动响应策略,同时提供修复建议和威胁狩猎指南。

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

漏洞详情
所有披露的漏洞均为内存安全问题,根源在于 PHP 在处理请求时(特别是遇到内存不足错误)处理致命错误的逻辑存在缺陷。这些缺陷可能导致请求意外结束后,PHP 内部状态出现损坏。随后的请求或工作进程可能会复用这一陈旧状态,从而引发内存泄露或数据损坏。
下表展示了我们向 PHP 团队报告的每个漏洞所演示的影响类型。下列应用程序是我们为远程代码执行(RCE)演示所选定的目标。它们具有代表性——利用过程并不依赖于特定的 CMS,因为易受攻击的代码位于 PHP 核心本身。
| 追踪 ID | Bug | 攻击者可达成的效果 | 我们演示的效果 |
|---|---|---|---|
| CVE-2026-109618 | Upload-progress unserializer use-after-free<br>Remote process-memory disclosure | 破坏进程内存并执行代码<br>未经身份验证即可泄露 PHP 工作进程内存 | 在 WordPress、Drupal 和 Joomla 上实现预认证 RCE<br>应用无关的远程内存泄露 |
| CVE-2026-109619 | Fatal-error backtrace use-after-free<br>OPcache type confusion | 破坏进程内存并执行代码<br>破坏共享 PHP 状态并执行代码 | 在 Drupal 上实现预认证 RCE<br>在 WordPress 上实现预认证 RCE |
尽管本文仅涵盖了遵循此问题模式的四个可被利用的漏洞实例(归类于两个 CVE),但 PHP 代码库中还存在其他已追踪以及可能未被追踪的此类问题变体。这些变体的利用条件各不相同,并可能导致不同类型的影响。无论如何,PHP 团队提供的补丁从根本上修复了该问题,并在修补后的版本中消除了所有变体。
影响
我们将这些漏洞整合到一个名为 php2shell 的单次利用脚本中,并演示了该脚本可在无需身份验证的情况下,对 WordPress (wordpress:latest)、Drupal (drupal:latest) 和 Joomla (joomla:latest) 的部署环境进行远程代码执行,测试时使用的是上述软件当时最新的容器镜像。
这些平台展示了漏洞的影响,但根本原因在于 PHP 本身。利用过程并不依赖于应用程序代码中的缺陷:即使是在受影响的 PHP 版本上运行的简单“Hello World”应用也可能存在漏洞。
此外,我们证明攻击者可以从 PHP 进程的内存中读取敏感数据(包括密码、令牌和 API 密钥),而无需实现远程代码执行。


在 WordPress、Joomla 和 Drupal 上演示 PHP2Shell 的效果:
AI 的拐点
这段易受攻击的代码已存在十多年。将这些缺陷转化为可用的利用程序需要串联多个 Bug,并考虑 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 安全负责人
行业级协作
在公开披露之前,Wiz Research 与 PHP 团队、Calif 和 OpenAI 合作进行了漏洞发现、协调以及补丁验证工作。我们还与 Google Cloud、Cloudflare、AWS、Microsoft、Automattic、Fastly、Akamai、Imperva、Vercel 等众多合作伙伴携手,为无法立即更新系统的组织准备了客户指南、检测方案和开箱即用的缓解措施。
核心 PHP 中的漏洞影响远超单一应用程序。PHP 运行于云端、托管服务提供商、内容分发网络(CDN)以及数百万台独立管理的服务器之上。在技术细节公开之前降低暴露风险,需要整个生态系统范围内的协同努力。
技术深度解析
Bug:Upload-progress 反序列化器 Use-After-Free
PHP 的 Session 模块可以在上传进度处理期间的同一预初始化窗口中解码会话数据。解码器将请求所属的记录信息存储在 BG(unserialize) 中。致命的分配失败可能会中断此路径,销毁请求堆内存,并使反序列化器的全局状态保持发布状态。
在同一工作进程处理的后续请求中,PHP 可能会将攻击者回收的内存当作活跃的反序列化器记录信息进行消费。这种陈旧状态变成了一个强大的内存破坏原语。我们将它与内存泄露相结合,消除了地址不确定性,从而在 WordPress、Drupal 和 Joomla 上实现了未经身份验证的远程代码执行。
WordPress、Drupal 和 Joomla 的攻击链是具有代表性的演示。底层原语存在于 PHP 引擎层面,可能影响任何运行易受攻击版本的 PHP 应用程序。
这些问题发生在应用层之下,因此应用日志可能包含极少的上下文信息。在系统完成补丁修复之前,防御者应特别关注以下异常迹象:不寻常的多部分(multipart)请求随后出现内存限制错误或重复的 HTTP 500 响应、意外过大或格式错误的 PHPSESSID 响应 Cookie,以及无法解释的 PHP 工作进程频繁重启。这些信号可以指导调查方向。应用 PHP 安全更新仍然是唯一彻底的补救措施。
Bug:远程进程内存泄露
PHP 在请求启动期间解析 RFC1867 多部分请求,此时正常的模块初始化尚未完成。会话上传进度处理可能会在此早期阶段初始化 Session 状态,并在 PS(id) 中发布一个会话 ID。内存不足错误可能在清理完成前中止请求。随后 PHP 会销毁请求堆,并可能使 PS(id) 指向已释放的分配区域。
由同一工作进程处理的后续多部分请求,可能在正常 Session 初始化重置该指针之前,就到达了上传进度清理路径。PHP 信任这个过期的指针和长度,将其视为有效的 zend_string,并将回收后的堆内容进行 URL 编码后写入 PHPSESSID 响应 Cookie。即使应用程序从未调用 session_start(),攻击依然有效,这使得该问题与应用无关。我们演示了未经身份验证即可泄露攻击者指定大小的活动工作进程内存区域,其中包含来自攻击者请求之外的数据。
Bug:致命错误回溯中的 Use-After-Free
在受影响的版本中,PHP 会在 EG(last_fatal_error_backtrace) 中保留最近一次致命错误的回溯信息。致命的内存不足错误可能会在不取消定义该执行器全局值的情况下销毁请求堆。工作进程存活下来,但其全局变量仍指向前一个请求的内存。
如果同一工作进程在下一个请求的早期发出诊断信息,它可能会在执行器重新初始化该状态之前访问该指针。随后 PHP 会销毁或更新悬空的后溯,并跟随攻击者回收的内存。由此产生的跨请求 use-after-free 可被发展为可控的内存损坏。我们利用此原语演示了针对 Drupal 的未经身份验证的远程代码执行。
Bug:OPcache 类型混淆
OPcache 将编译后的 PHP 结构持久化存储在共享内存中,并为每个工作进程(worker)的运行时指针映射分配索引。各工作进程通过一个共享前沿(shared frontier)来协调这些索引。在 zend_accel_script_persist() 执行期间,PHP 会推进进程本地的 CG(map_ptr_last) 前沿。只有在持久化完成后,它才会发布对应的共享前沿。如果在这两个事件之间发生分配失败,进程本地的推进状态将被保留,而部分持久化的对象则会引用那些在共享状态中仍被视为可用的槽位。
当另一个工作进程随后将这些槽位之一复用于不同的运行时对象时,过时的共享元数据会解析为错误类型的指针。这种不匹配导致了跨工作进程的类型混淆,并破坏了共享的 OPcache 状态。我们利用这一原语构建了一个针对 WordPress 的未认证远程代码执行(RCE)攻击链。
除了这四个漏洞之外,还存在其他变体。虽然最初我们将这四个漏洞报告给了 PHP 团队,但通过这项研究,我们意识到该漏洞深植于 PHP 代码库中,需要进行全面的修复。其他变体也应归入相同的两个 CVE 编号之下。
结论
鉴于互联网上 70% 的网站受到影响,PHP2Shell 的影响不容小觑。这标志着人工智能的一个拐点。易受攻击的代码已存在十余年——AI 改变的是理解弱点并将其转化为可用漏洞利用的能力。借助前沿 AI 模型和合适的工具,一名研究人员在一周内完成了过去需要世界级团队数月才能完成的工作。
这改变了漏洞发现和利用的经济格局。曾经看似难以利用的漏洞如今成为可行的目标。同样的能力也为防御者提供了机会,使其能够发现并修复那些历经多年审查仍幸存的缺陷。
在整个研究过程中,Wiz 使用了 Wiz Atlas、Gemini 4 Argon 和 GPT-5.6 Sol,其中 Argon 在发现漏洞及协助修复方面做出了特别重要的贡献。
我们的机遇在于使这项工作常态化:系统地查找现有软件中的缺陷,并在新缺陷进入生产环境之前将其捕获。我们与 PHP、OpenAI 和 Calif 的协同努力正朝着这一目标迈进,应用 AI 技术来加固我们共同依赖的软件基础。
负责任披露时间线
- 2026 年 8 月 19 日: Wiz Research 利用 Wiz Atlas、Gemini 4 Argon 和 GPT-5.6 Sol 发现了首个 PHP 漏洞。
- 2026 年 8 月 20 日: 确认 Drupal 存在未经身份验证的远程代码执行(RCE)漏洞。
- 2026 年 8 月 21 日: 确认 WordPress 存在未经身份验证的远程代码执行(RCE)漏洞。
- 2026 年 8 月 24 日: Wiz Research 向 PHP 安全团队报告了这些漏洞。
- 2026 年 9 月 21 日: PHP 团队确认收到报告,并开始开发协同修复方案。
- 2026 年 10 月 21 日: 已修补的 PHP 版本发布。
- 2026 年 10 月 21 日: 公开披露。
保持联系
大家好!我们是来自 Wiz Research 团队的 Sagi Tzadik、Shir Tamari、Nir Ohfeld 和 Tomer Schwartz (@wiz_io)。我们是一群经验丰富的白帽黑客,目标只有一个:让云端对每个人来说都更安全。我们专注于发现云软件中的新攻击向量,并揭示组织所依赖系统中的隔离问题。欢迎在 X 上或通过 [email protected] 与我们联系。