新闻宏观经济协同供应链攻击通过构建期恶意软件入侵热门 Rust crate

协同供应链攻击通过构建期恶意软件入侵热门 Rust crate

作者: Metaverse Post·

要点速览

  • Rust crate arrayref、internment 和 append-only-vec 的恶意版本被篡改为依赖 proc-macro1——一个 proc-macro2 的拼写抢注仿冒包,它在 Cargo 构建期间执行恶意软件。
  • 该跨平台植入体感染 Linux、macOS 和 Windows 系统,收集系统详细信息并窃取 Chromium 浏览数据,同时建立持久化并与命令与控制端点通信。
  • Rust 安全响应团队移除了受污染的发布版本并锁定了维护者账户,认定开发者的机器或发布凭证很可能已被入侵,而非维护者存在恶意行为。
  • arrayref 此前已累计约 1.52 亿次下载,并出现在包含 Solana 相关组件的依赖树中,在开发者机器和 CI/CD 基础设施间形成广泛的攻击面。
  • 由于 Cargo 在计算新的依赖树时会跳过被撤下的版本,但会沿用已记录在 Cargo.lock 文件中的版本,因此实际暴露程度取决于每个项目锁定的 lockfile。
协同供应链攻击通过构建期恶意软件入侵热门 Rust crate

2026年8月20日,安全研究人员发现了一起针对 crates.io 上三个广泛使用的 Rust crate 的协同供应链攻击。被入侵的软件包——arrayref 0.3.10 版、internment 0.8.7 版和 append-only-vec 0.1.9 版——被篡改为包含一个在标准编译过程中执行远程代码的恶意依赖。Rust 安全响应团队迅速移除了受影响的发布版本并锁定了维护者的账户,并表示合法开发者的机器或发布凭证很可能已被入侵,而非维护者本人存在恶意行为。

拼写抢注依赖投递恶意载荷

此次攻击利用了一个名为 proc-macro1 的拼写抢注(typosquat)crate,它冒充了合法的 proc-macro2 库。当 Cargo 解析该依赖时,会自动执行一个恶意构建脚本,该脚本从经过 Base64 混淆的数据中重建命令与控制(C2)地址、禁用 TLS 验证,并从攻击者控制的服务器下载特定平台的载荷。由于入侵发生在构建期,即使应用程序代码从未直接调用任何可疑函数,只要编译的项目间接依赖于这些恶意 crate 之一,就可能感染开发者工作站或持续集成主机。

此次仿冒瞄准的是 Rust 生态中最常用的基础组件之一——proc-macro2 为大量已发布 crate 的宏处理提供底层支持——而 crates.io、npm 和 PyPI 等软件仓库按“先到先得”的原则分配包名,这一政策长期以来使拼写抢注成为各语言生态中惯用的供应链攻击手法。

跨平台后门行为

该恶意软件可在 Linux、macOS 和 Windows 上运行。在 Linux 和 macOS 上,它会将一个可执行文件释放到临时目录并以分离方式启动。在 Windows 上,它利用 PowerShell 和 Visual Basic 脚本绕过执行策略并运行隐藏进程。第二阶段后门随后对受感染系统进行画像,收集用户名、主机名、已安装的应用程序以及基于 Chromium 的浏览器中的浏览数据。它通过注册表 Run 键、systemd 用户服务或 macOS LaunchAgents 建立用户级持久化,与命令与控制端点保持通信,并支持远程指令以执行进一步操作和更改配置。

安全公司 Socket 在 X 上记录了此次入侵:

Popular Rust crates compromised: Affected versions of arrayref, internment, and append-only-vec were modified to depend on proc-macro1, a malicious typosquat of proc-macro2. Its build script downloaded and executed malware during Cargo builds. Analysis:

— Socket (@SocketSecurity), August 20, 2026

更广泛的生态系统暴露与补救措施

此次事件对 Rust 生态系统及相邻的区块链基础设施具有重要影响。仅 arrayref 在被入侵前就累计了约 1.52 亿次下载,并存在于包含 Solana 相关组件和热门图形界面框架的依赖树中。除非下游项目明确解析并构建了恶意版本,否则它们本身并不必然被入侵,但该 crate 广泛的间接使用仍构成了横跨开发者环境、CI/CD 流水线和自动化发布基础设施的庞大攻击面,而这些环境通常存有敏感令牌和签名材料。

该事件发生的背景是一波更广泛的软件仓库入侵浪潮。2025年8月,一个被追踪为 rk0x 的攻击活动利用窃取的维护者凭证发布了植入恶意软件的热门 Rust crate 版本,窃取浏览器凭证和加密货币钱包;npm 和 PyPI 也曾多次遭受拼写抢注和账户接管攻击。2024年3月的 XZ Utils 后门事件同样表明,一个被广泛使用的开源库也可能成为波及大量下游系统的关键瓶颈。

调查人员还发现了攻击者控制的其他中转 crate——proc-macro-en、aovine、arone、aronenao 和 tinymember——它们随后已被从仓库中移除。威胁行为者还撤下(yank)了 arrayref 先前的合法版本,可能在管理员介入之前将依赖解析引向恶意版本。根据 Cargo 的解析规则,在计算新的依赖树时会跳过被撤下的版本,但已记录在 Cargo.lock 中的版本仍会继续构建,因此实际暴露程度取决于锁定的 lockfile,而不仅仅是仓库状态。

建议各组织审计 Cargo.lock 文件、依赖清单和构建日志,以排查受影响版本及相关指标。任何编译过其中一个恶意版本的系统都应被视为可能已被入侵,需要轮换构建环境可访问的密钥、对已知的网络和主机痕迹进行取证排查,并从经验证的干净环境重新构建软件。防御者还应监控与已识别命令与控制基础设施的连接,以及与该植入体相关的确定性域名生成算法输出。生态系统工具可支持这项排查工作:cargo tree 可列出间接依赖以供审查,而通过 cargo audit 使用的 RustSec 公告数据库则收录了已知存在漏洞的 crate 版本。

来源:Metaverse Post