跳到正文
Hacker News· 882542F3884314B·· 4 小时前精选AI 评分76

Dream 研究披露 PHP2Shell 与 Fragnesia 漏洞链攻陷 25 台服务器,含美国政府关联系统

Chained PHP2Shell Exploit Roots 25 Servers, Including US Government Servers

AI 导读

Dream 研究人员披露,他们于 10 月 25 日发现疑似中国背景且有 AI 辅助的攻击活动利用 PHP2Shell 与 Fragnesia 漏洞链取得 root 权限,攻陷 25 台服务器,包括美国政府关联系统。

推荐理由

文章拆解了从无凭据请求、权限提升到内网横向移动的完整利用链,并呈现目标筛选与域控尝试的具体过程。

正文 · AI 翻译

自定义 PHP2Shell 漏洞利用结合内核 LPE,已在野攻陷防火墙并获取 root 权限

10 月 25 日,Dream 研究人员发现了一些痕迹,显示这似乎是一场由 AI 辅助的中国攻击活动所为。该活动使 25 台服务器被攻陷并取得 root 权限,其中包括美国政府关联环境中的系统。攻击者将 PHP2Shell 与内核提权漏洞利用相结合,攻陷了暴露在外的系统。

受影响设备运行某大型厂商防火墙软件的特定版本。出于安全考虑,我们不披露厂商名称或受影响版本,并且已通知该厂商。

随后,攻击者又对 Active Directory 发起攻击。恢复出的痕迹证实发生了凭据提取和目录枚举。

此次行动表明,暴露的管理接口可能成为进入组织身份基础设施的路径。对政府防御人员而言,漏洞发现只是起点;真正的挑战从识别存在漏洞的系统,延伸至理解并遏制一次入侵可能带来的访问权限。

以下研究通过主动威胁狩猎开展,使用了 Dream 的自主网络安全研究产品 Hero。

发现

Dream 研究人员发现了一次完整的攻击行动,其中包括对 PHP2Shell 漏洞利用链(CVE-2026-109618/CVE-2026-109619)的定制化武器化,并将其与 Fragnesia 内核提权漏洞(CVE-2026-46300)配对使用;此外还发现了目标列表、漏洞利用日志以及约 40 个定制的后利用脚本。

此次发现的痕迹表明,一场攻击活动已在美国、日本、台湾和韩国取得 25 台服务器的 root 权限。取得 root 权限后,攻击者锁定了美国政府关联环境中的三台特定服务器。

发现的痕迹显示,这次行动始于实验室环境中的漏洞利用开发,最终使攻击者能够持续访问美国政府组织内部的 Active Directory 域。

攻击中的 AI 使用情况

我们还在攻击基础设施中观察到一些 AI 辅助工具的证据:

  • 已安装 Claude Code
  • 已配置一个名为 aiscan 的 AI 驱动进攻性安全平台,其中使用了中国大语言模型 DeepSeek 和 Kimi
  • 存在中国侦察平台 FOFA 的 API 密钥

尽管我们没有直接证据表明这些 AI 工具被专门用于编写漏洞利用代码或后利用脚本,但代码结构、注释风格以及 ~40 个脚本之间的一致性都表明开发过程得到了 AI 辅助。尽管如此,此次行动似乎并非一次完全自主的国家行为体攻击。

漏洞利用:两个漏洞串联为一次请求

攻击者开发了两个独立的漏洞利用代码,并将其串联起来,在不使用任何凭据的情况下,仅凭一次 HTTP 请求,便可在任何运行某大型厂商特定版本防火墙软件的防火墙上取得 root 权限。

PHP2Shell(CVE-2026-109618 / CVE-2026-109619)— 远程代码执行

我们恢复出的代码是一个定制的非公开构建版本,并非任何已知 PHP2Shell 公开漏洞利用代码的副本。它遵循相同的底层概念,但看起来是独立开发的,并专门针对目标防火墙平台进行了适配。

该漏洞针对防火墙 appweb 管理服务器上的 PHP session.upload_progress 机制。防火墙操作系统使用 PHP 8.0.30,并设有较高的内存上限,从而支持攻击中的内存破坏阶段。

攻击分为四个协调衔接的阶段:

  • A1 — 内存耗尽 (~383MB): 攻击者向服务器发送大量精心构造的 multipart POST 请求,每个请求都包含超长文件名和会话进度数据。这会使 PHP 的内存分配器达到极限,迫使系统形成可预测的内存布局。
  • B1 — 信息泄漏: 第二次请求伪造 A1 中失效的会话 ID 长度,迫使服务器执行越界读取。服务器的 Set-Cookie 响应头中包含泄漏的指针值,使攻击者得以获得运行进程中 libphp.so 的基地址。
  • A2 — 设置陈旧引用 (~500MB): 另一轮内存压力会初始化一个会话,留下仍存活的 http_session_vars 作为 zend_reference,随后触发第二次 OOM 并留下 mod_data=NULL,从而创建一个攻击者可在 B2 中伪造的陈旧引用。
  • B2 — 代码执行: 最终请求在已释放的内存区域中伪造一个 PHP HashTable 条目。伪造条目的 pDestructor 回调指向 zif_system(PHP 的 system() 函数),其数据则指向一个 shell 命令字符串。当 PHP 的清理处理器遍历 HashTable 时,会调用这个伪造的析构函数,从而以 nobody 用户身份执行任意命令。

Fragnesia (CVE-2026-46300) — 内核权限提升

以 nobody 身份获得代码执行仍不够,因为 SELinux 限制 httpd_t 修改系统文件。为了最终取得 root 权限,攻击者串联了第二个漏洞利用程序:XFRM ESP-in-TCP 子系统中的一个 Linux 内核漏洞。

Fragnesia 利用页缓存写入覆盖 /etc/pam.d/su,将其认证规则替换为 pam_permit.so(全部接受)。由于 PAM 文件只有 774 字节,该漏洞利用采用逐字节拼接变体来精确写入。覆盖后,su root 无需密码即可成功。

两个漏洞利用都在单个 B2 HTTP 请求中运行。从建立未经身份验证的 HTTPS 连接,到部署持久化 root WebShell,整条链在 15 分钟内即可完成。

实验室:大规模版本特征分析

该漏洞利用并非一次性的即发即弃载荷。它需要精确的内存偏移,而这些偏移因防火墙操作系统版本而异,包括 zval_ptr_dtor 的地址、zif_system 的地址、HashTable 结构大小,以及控制各阶段堆布局的内存布局参数。

在恢复出的材料中,我们发现了 11 个 JSON 版本特征文件,每个经过测试的防火墙操作系统版本各有一个:

防火墙版本发布分支PHP特征文件备注
已隐去较旧分支7.4.332 个暂定特征文件PHP 7.4 — 已在实验室中验证可作为 nobody 实现 RCE,但完整利用链尚未校准(基础构建加一个热修复变体)
已隐去较新分支8.0.301 个已校准,8 个暂定一个基础特征文件已在实验室中完成全面测试;其余文件沿用其内存布局结构,或与相邻构建版本共享偏移量

每个特征文件都包含从该版本的 libphp.so 二进制文件中提取的精确偏移量,以及各库的 SHA256 哈希值、ELF build ID 和精确的内存布局参数(块大小、填充次数、清空计数、喷射偏移),这些参数均通过实验室测试调优。

“已校准”和“暂定”特征文件之间的区别十分重要:已校准意味着攻击者已针对该版本的运行中 VM 测试漏洞利用,并确认内存布局可行;暂定则意味着他们根据二进制文件计算出了偏移量,但尚未在实时实例上验证。

攻击活动漏斗:从发现 19,000 个到利用 25 个

Operational timeline in ten steps across setup, exploitation, pivot and post-exploitation, from October 8 to October 24.

图 1:该攻击活动的行动时间线,涵盖从 October 8 的准备,到漏洞利用、转向内部网络,以及 October 24 的利用后行动。

在漏洞利用程序准备就绪并掌握 9 个可利用版本的配置后,攻击者发起了一场定向行动,整个过程遵循清晰的漏斗流程:

阶段 1:全球发现(19,000 个目标)

借助 FOFA——一款类似 Shodan 的中国互联网资产搜索引擎——攻击者从全球范围内的目标厂商处识别出约 19,000 台暴露在互联网中的防火墙。这些设备的管理接口暴露在互联网上,可通过证书指纹和 HTTP 响应特征进行发现。

阶段 2:版本指纹识别(5,000 台在线)

一台自定义版本扫描器以 200 个并发线程对全部 19,000 个目标进行扫描,确定哪些设备实际在线以及正在运行何种操作系统版本。大约有 5,000 台设备返回了版本信息。

阶段 3:地理位置和版本筛选(240 个目标)

攻击者从 5,000 台在线设备中筛选出仅位于美国、日本、台湾和韩国的服务器,随后进一步筛选出与其漏洞利用配置相匹配的版本(运行 PHP 8.0.30 的较新发布分支)。最终得到一份包含 240 台防火墙的目标清单。

由于美国、日本、台湾和韩国是中国国家支持的网络行动在太平洋战区的主要战略对手和情报目标,这表明可能存在国家级对手的行动。

阶段 4:自动化利用(24 台已获取 root 权限)

这 240 个目标被输入一个自动批量执行器,每次处理 5 个目标,每个目标的超时时间设为 1800 秒(30 分钟)。每次成功后,批处理程序都会:

  • 运行完整的 PHP2Shell + Fragnesia 利用链
  • 在防火墙上一个可公开访问的目录中植入 103 字节的 PHP root WebShell
  • 通过 WebShell 执行 id,验证 root 权限
  • 将目标的主机名和 IP 记录到成功 CSV 文件中
  • 转向下一个目标

此时,24 台防火墙已成功获取 root 权限。

阶段 5:分诊(优先处理 2 台防火墙)

在 24 台已获取 root 权限的防火墙中,有 22 台除了植入 WebShell 外没有采取任何其他行动。没有持久化机制,没有隧道,也没有后利用工具。这些服务器实际上已被 攻陷并停放待用,使攻击者可以随时通过 WebShell 返回。

两台似乎与某个目标有关联的服务器进展到了此阶段之后。两台看起来都属于与美国政府有关联的环境。

阶段 6:枢轴转移(从防火墙转向域)

在 24 台已获取 root 权限的防火墙中,有两台隶属于一个与美国政府有关联的组织。从第一台防火墙提取的运行配置显示,该环境具有一些表明其与政府有关联的特征:CAC(通用访问卡)认证、特定的命名前缀,以及标准化的政府式资产命名。配置文件包含该组织的完整内部网络拓扑:域控制器、中央防火墙管理服务器、Keycloak SSO 服务器、GitLab 实例、VPN 网关,以及 Active Directory 域。

第一台防火墙是在自动批处理期间于 10 月 23 日 18:14 UTC 被攻陷并获取 root 权限的。但它不久后便崩溃——可能是由于约 900MB 的漏洞利用流量——并且再也没有恢复上线。攻击者在两小时内使用 240 次自动探测持续监控它,等待其恢复上线。它未能恢复。第二台防火墙的证书数据明确将其与目标组织关联起来,但它在最初的批处理期间已经超时。

从第一台防火墙的配置中认识到该组织的价值后,攻击者另起了一场独立而专门的行动,并于 Oct 24 10:09 UTC 成功利用了它。

数小时内,攻击者:

在内部网络中建立了持久隧道。

一个 8 端口反向 SSH 隧道将已失陷的防火墙重新连接到攻击者的基础设施,并转发对以下目标的访问权限:

  • 域控制器(LDAP、LDAPS、RDP)
  • 内部防火墙管理服务器
  • VPN 基础设施
  • 用于访问任意内部网络的 SOCKS5 代理

该隧道被封装为一个 systemd 服务和一个 rc.local 启动钩子——可在重启后存活并自动重新连接。

通过隧道利用管理服务器。 11:35 UTC,在获取第二台防火墙的 root 权限后不到 90 分钟,攻击者利用新获得的服务器访问权限,以相同的 PHP2Shell + Fragnesia 链攻陷了第三台政府服务器——这是只能通过隧道访问的内部防火墙管理服务器。该服务器集中管理该组织的所有防火墙。攻陷它使攻击者得以访问每台受管防火墙的配置、凭据和网络设置。这使被利用的服务器总数增至 25 台。

从管理服务器发起 AD 攻击行动。 由于管理服务器本就能通过 LDAP 连接到 Active Directory(它需要此连接来验证 VPN 用户),攻击者将其作为发起域攻击的平台:

  • 解密了 LDAP 服务账号密码——设备配置中以加密方式存储该密码,但攻击者拥有 root 权限,因而掌握主密钥。他们以明文提取该密码,并将其硬编码到之后的每个脚本中。
  • 通过 LDAP 查询枚举了域中的每个用户和组。
  • 使用以该组织为主题的密码,对每个用户账号进行密码喷洒。该域具有 lockoutThreshold=0——意味着没有账号锁定,可以进行无限次密码喷洒尝试。
  • 尝试创建 AD 后门账号——既包括用户账号(在每个 OU 中尝试),也包括机器账号(利用默认的 MachineAccountQuota 设置)。
  • 分析了 AD ACL 链,以寻找权限提升路径。
  • 尝试从 Keycloak IdP 配置中提取 SAML 签名密钥。
  • 探测 Keycloak SSO,寻找身份验证绕过方法。

攻击结果——无论是密码喷洒是否找到有效凭据、后门账号是否创建成功,还是 SAML 密钥是否被提取——都留在管理服务器的本地文件系统中,不在我们已恢复的制品之列。这意味着我们无法确定此次入侵的完整范围。

Attack path from the attacker across the internet to a firewall at the perimeter, through a tunnel to the firewall management server, and on to the domain controllers.

图 2:攻击路径。PHP2Shell 和 Fragnesia 获取外围防火墙的 root 权限,反向 SSH 隧道接入内部管理服务器,解密后的 LDAP 服务账号则打通 Active Directory。

管理服务器 → Active Directory

状态活动
✓从配置中解密 LDAP 密码
✓完整的用户 & 组枚举
?密码喷洒(所有用户,无锁定)
?创建后门用户账号 + 机器账号
?SAML 签名密钥提取

攻击者现在掌握了什么

根据已恢复的制品,我们可以确认攻击者拥有:

  • 通过可跨重启存活的反向隧道和 SOCKS 代理,对该组织的内部网络进行持久远程访问——很可能仍处于活动状态
  • 两台防火墙和防火墙管理服务器上的 root webshell——很可能仍处于活动状态
  • 完整的 Active Directory 用户和组列表——一份完整的组织架构蓝图
  • 解密后的 LDAP 服务账户凭据——可随时直接查询 AD
  • 从防火墙文件系统中收集的私钥——HA 复制密钥、SSL/TLS 证书密钥和设备认证密钥
  • 完整的网络拓扑——每个 IP、主机名、子网、服务器角色和 VPN 网关
  • 安全设置薄弱的 SAML IdP 配置(validate-idp-certificate: no)
  • 另外 22 台保留待用的防火墙,分布于美国、日本、台湾和韩国——随时可用于漏洞利用

我们无法确定密码喷洒、后门账户创建或 SAML 密钥提取是否成功。如果其中任何一种攻击奏效,失陷范围将远超边界防火墙,深入该组织的身份基础设施。

归因指标

我们不将该活动归因于任何具名威胁行为体。然而,多项指标表明该行动与中国存在关联:

指标详情
目标选择仅限美国、日本、台湾和韩国。这些是中国国家力量相关行动在太平洋地区的主要战略情报目标。
FOFA用于发现目标的互联网侦察平台是一家中国服务。
iox在已恢复的工具中发现的中国自主开发隧道工具。
DeepSeek 和 Kimi在 aiscan 进攻性安全平台中配置的 LLM 均为中文语言模型。
UTC+8 时间戳通过将日志时间戳与目标的 HTTP Date: 响应头进行比对,证实该基础设施的时钟采用中国标准时间。
中文提示词aiscan 会话日志包含用中文编写的用户消息。

结论

本次行动所展现的准备程度和能力,使其有别于机会主义式的漏洞利用。攻击者在漏洞研究上投入了大量精力——获取厂商固件、对其进行解密、提取 PHP 库、为 9 个不同软件版本构建精确的内存特征配置,并通过实验室测试校准漏洞利用几何结构。漏洞利用本身实现了自动化且高效:单批次尝试了 240 个目标,并自动选择了按版本区分的特征配置。

其目标明确聚焦于政府。

攻击者扫描了 19,000 台防火墙,成功攻陷了其中 24 台,并立即找出了真正重要的两台。在攻陷一台与美国政府有关联的防火墙后数小时内,他们便通过隧道进入内部网络,利用同一个 PHP2Shell 漏洞攻陷了第三台服务器,并发起了一场全面的 Active Directory 攻击行动——这一切都始于一次对管理界面的未经身份验证的 HTTPS 请求,而该界面本不应暴露在互联网上。

其余 22 台已攻陷的防火墙仍被保留待用,且 webshell 仍处于活跃状态。通往该美国政府组织的持久隧道很可能仍在运行。攻击者手中仍有 19,000 个已识别指纹的目标,可在开发其他 OS 版本的特征配置时再次访问。

与往常一样,我们建议组织迅速部署相关补丁。有关此问题的更多信息,请遵循您所用厂商的指导。

弥合发现与防御之间的差距

对于政府和关键基础设施,发现漏洞只是开始。防御者需要识别暴露的系统,确定攻击者能够利用什么,并在初始立足点演变为更大范围失陷之前采取行动。

Dream 通过两个互补的网络防御平台应对这一挑战:

  • Sphere 将国家级网络防御规模化。 它梳理风险暴露情况、确定风险优先级,并检测和响应政府网络中的攻击,同时针对每个国家所面临的威胁和基础设施进行定制。
  • Hero 将网络安全研究规模化。 它的自主研究代理帮助专家调查威胁、发现并验证漏洞(包括无源代码软件中的漏洞),并制定补救指南和补丁。Dream 研究人员正是使用该工具开展了本文详述的调查。

二者结合,将更深入的调查与覆盖全国攻击面的防御相连。

来源:Hacker News · dreamgroup.com