Dream 披露 PHP2Shell 与 Fragnesia 组合漏洞攻击:25 台服务器被拿下,含美国政府关联系统
Chained PHP2Shell Exploit Roots 25 Servers, Including US Government Servers
Dream 研究人员披露一起疑似中国 AI 辅助的攻击行动,利用 PHP2Shell(CVE-2026-109618/CVE-2026-109619)与 Fragnesia 内核提权(CVE-2026-46300)组合,攻陷美国、日本、台湾、韩国共 25 台服务器,其中 3 台属于美国政府关联环境。
定制的 PHP2Shell 漏洞利用与内核本地提权链结合,在野攻陷防火墙至 root 权限
10 月 25 日,Dream 研究人员发现了疑似中国 AI 辅助行动的痕迹,该行动攻陷了 25 台服务器,其中包括美国某政府附属环境中的系统。攻击者将 PHP2Shell 与内核提权漏洞结合,入侵暴露在外的系统。
受影响的设备运行某大型厂商防火墙软件的特定版本。出于安全考虑,我们不会披露该厂商及受影响版本,且已通知该厂商。
随后,攻击者对 Active Directory 发起了攻击。恢复的痕迹证实了凭据窃取和目录枚举行为。
该行动表明,暴露的管理界面可能成为进入组织身份基础设施的通道。对政府防御者而言,发现漏洞只是开始,真正的挑战在于从识别存在漏洞的系统,延伸到理解并遏制入侵所打开的访问权限。
以下研究是使用 Dream 的自主网络研究产品 Hero 进行主动威胁狩猎时开展的。
发现
Dream 研究人员识别出一次完整的攻击行动,包括对 PHP2Shell 漏洞利用链(CVE-2026-109618/CVE-2026-109619)的定制武器化,搭配 Fragnesia 内核提权(CVE-2026-46300)、目标列表、利用日志以及约 40 个定制后渗透脚本。
其中包括一次已攻陷美国、日本、台湾和韩国 25 台服务器的行动痕迹。攻陷后,攻击者将目标锁定在美国某政府附属环境中的三台特定服务器上。
发现的痕迹揭示了一次从实验室环境中的漏洞开发开始、以对美国某政府组织内部 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.33 | 2 个临时配置 | PHP 7.4——实验室已验证以 nobody 身份实现 RCE,但完整攻击链尚未校准(基础构建加一个热修复变体) |
| 已隐去 | 较新分支 | 8.0.30 | 1 个已校准,8 个临时配置 | 一个基础配置已完全通过实验室测试;其余配置继承其几何参数或与相邻构建共享偏移 |
每个配置文件都包含从该版本 libphp.so 二进制文件中提取的精确偏移——以及每个库的 SHA256 哈希、ELF 构建 ID,以及通过实验室测试调优的精确内存几何参数(块大小、填充计数、排空计数、喷射偏移)。
“已校准”与“临时”配置之间的差异值得注意——已校准意味着攻击者针对该版本的运行中 VM 测试了漏洞利用,并确认内存几何参数有效。临时意味着他们从二进制文件计算了偏移,但尚未在实时实例上验证。
攻击活动漏斗:从发现 19,000 个到利用 25 个

漏洞利用已准备就绪,并针对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次自动化探测对其进行监控,等待其恢复。它没有恢复。第二个防火墙的证书数据明确将其与目标组织关联,但它在原始批处理过程中超时。
攻击者从第一台防火墙的配置中识别出该组织的价值后,创建了一个单独的专用行动,并于 10 月 24 日 10:09 UTC 成功利用。
在数小时内,攻击者:
在内部网络中建立了持久隧道。
一个 8 端口反向 SSH 隧道将被攻陷的防火墙连接回攻击者的基础设施,转发对以下内容的访问:
- 域控制器(LDAP、LDAPS、RDP)
- 内部防火墙管理服务器
- VPN 基础设施
- 用于任意内部网络访问的 SOCKS5 代理
该隧道被包装在 systemd 服务和 rc.local 启动钩子中——它能在重启后存活并自动重新连接。
通过隧道攻陷了管理服务器。在 11:35 UTC,即攻陷第二台防火墙后不到 90 分钟,攻击者利用新获得的服务器访问权限和相同的 PHP2Shell + Fragnesia 攻击链,攻击了第三台政府服务器——只能通过隧道访问的内部防火墙管理服务器。该服务器集中管理该组织的所有防火墙。攻陷它使攻击者能够访问每台受管防火墙的配置、凭据和网络设置。这使被攻陷的服务器总数达到 25 台。
从管理服务器发起了 AD 攻击行动。由于管理服务器已经具备到 Active Directory 的 LDAP 连接(它需要此连接来认证 VPN 用户),攻击者将其用作域攻击的发起平台:
- 解密了 LDAP 服务账户密码——设备配置以加密形式存储该密码,但拥有 root 访问权限的攻击者持有主密钥。他们以明文提取该密码,并将其硬编码到后续每个脚本中。
- 通过 LDAP 查询枚举了域中的每个用户和组。
- 使用以组织为主题的密码对每个用户账户进行密码喷洒。该域具有
lockoutThreshold=0——意味着没有账户锁定,允许无限次喷洒尝试。 - 尝试创建后门 AD 账户——既包括用户账户(在每个 OU 中尝试),也包括机器账户(利用默认的
MachineAccountQuota设置)。 - 分析了 AD ACL 链以寻找权限提升路径。
- 尝试从 Keycloak IdP 配置中提取 SAML 签名密钥。
- 探测 Keycloak SSO 以寻找认证绕过。
攻击结果——密码喷洒是否找到有效凭据、后门账户是否创建、SAML 密钥是否被提取——留在了管理服务器的本地文件系统上,不在我们恢复的工件中。这意味着我们无法确定此次攻陷的完整范围。

管理服务器 → 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 攻击性安全平台中配置的大语言模型是中文语言模型。 |
| UTC+8 时间戳 | 基础设施的时钟运行在中国标准时间,通过将日志时间戳与目标的 HTTP Date: 响应头进行比对得到确认。 |
| 中文提示词 | aiscan 会话日志中包含中文用户消息。 |
结论
此次行动展现出的准备程度和能力水平,使其有别于机会主义式利用。攻击者在漏洞研究上投入了大量精力——获取厂商固件、解密、提取 PHP 库、为 9 个不同软件版本构建精确的内存配置文件,并通过实验室测试校准利用几何参数。利用过程本身自动化且高效:单批次尝试 240 个目标,自动选择版本特定的配置文件。
对政府目标有明确聚焦。
攻击者扫描了 19,000 台防火墙,拿下 24 台,并立即锁定了其中真正重要的两台。在攻陷一台美国政府附属防火墙后的数小时内,他们便隧道进入内网,使用相同的 PHP2Shell 漏洞攻陷了第三台服务器,并发动了完整的 Active Directory 攻击行动——这一切都始于对管理界面的一个未认证 HTTPS 请求,而该界面本不应暴露在互联网上。
另外 22 台被拿下的防火墙仍处于闲置状态,webshell 保持活跃。通往美国政府组织的持久隧道很可能仍在运行。攻击者手中仍有 19,000 个已指纹识别的目标,随着他们开发出更多操作系统版本的配置文件,可随时再次光顾。
一如既往,我们建议各组织尽快部署相关补丁。请遵循厂商指南以获取有关此问题的更多信息。
弥合发现与防御之间的差距
对政府和关键基础设施而言,发现漏洞只是开始。防御者需要识别暴露的系统、确定攻击者可以利用什么,并在立足点演变为更大范围入侵之前采取行动。
Dream 通过两个互补的网络防御平台应对这一挑战:
- Sphere 扩展国家网络防御。它映射暴露面、划分风险优先级,并检测和响应政府网络中的攻击,针对每个国家的威胁和基础设施量身定制。
- Hero 扩展网络研究。其自主研究代理帮助专家调查威胁、发现并验证漏洞——包括在没有源代码的软件中——并制定修复指南和补丁。这正是 Dream 研究人员用来开展本文详述调查的工具。
两者结合,将更深入的调查与国家攻击面上的防御连接起来。
来源:Hacker News · dreamgroup.com