Rust生态遭供应链投毒:三个热门crate被植入构建时恶意代码,下载量超2.45亿

Rust crates.io供应链攻击:arrayref等三个热门crate被植入恶意构建脚本,利用typosquat依赖proc-macro1在编译时执行后门,累计下载量超2.45亿。本文分析攻击链、IoCs及缓解措施,帮助企业检测和防御此类供应链投毒。

⛓️ Critical 供应链攻击

Rust官方于2026年8月20日删除了三个被投毒的crates(arrayref、internment、append-only-vec),攻击者通过入侵维护者账户,在恶意版本中引入typosquat依赖proc-macro1,其构建脚本在编译时下载并执行远程payload。受影响crate累计下载量超2.45亿,恶意版本在线仅86-107分钟,目前无证据显示已被实际利用,但攻击基础设施与朝鲜背景APT组织存在重叠。

来源:The Hacker News | 2026-08-20 | 原文链接

🔍 关键发现

  • 三个广泛使用的Rust crates(arrayref、internment、append-only-vec)的恶意版本被发布,恶意代码藏于typosquat依赖proc-macro1的build script中,构建即执行。
  • 攻击者通过先yank旧版本(arrayref 0.3.5-0.3.9)诱导开发者更新到恶意0.3.10,绕过Cargo的yank警告,实现投递。
  • payload按操作系统和架构定制,Windows下通过VBScript隐藏运行PowerShell,Unix/macOS下执行/tmp/rust-setup,并具备持久化、窃取浏览器凭据及C2通信能力。

⚔️ 攻击链分析

1. 攻击者入侵crate维护者David Roundy的账户(或窃取凭据),在arrayref(同时波及internment、append-only-vec)发布恶意版本0.3.10/0.8.7/0.1.9。 2. 恶意版本在Cargo.toml中添加typosquat依赖`proc-macro1`(仿冒proc-macro2),该依赖的build.rs运行时从base64片段重组C2地址,并下载下一阶段payload。 3. 攻击者同步yank掉arrayref 0.3.5至0.3.9,使恶意0.3.10成为Cargo不会警告的“推荐更新”,诱使开发者升级。 4. 项目一旦执行cargo build/check/test,即触发恶意构建脚本,在目标系统植入后门并回连C2。

🚩 失陷指标 (IOC)

  • 23.254.165.112:9089 (payload host)
  • 23.254.165.112:443 (C2)
  • hwsrv-798836.hostwindsdns.com
  • /tmp/rust-setup
  • %TEMP%\rust-setup.ps1
  • %TEMP%\rust-setup-launch.vbs
  • rust-crate_0.1.0, _0.2.0, _0.3.0, _0.4.0 (binaries)
  • dtolney (crates.io id 438608, impersonator)
  • rchaitm@gmail.com (forged author metadata)

🛡️ 缓解建议

  • ✅ 立即检查项目Cargo.lock及依赖树,确认是否存在arrayref 0.3.10、internment 0.8.7、append-only-vec 0.1.9或proc-macro1等受影响版本,并将arrayref固定为0.3.9或更早版本。
  • ✅ 删除本机~/.cargo/registry/cache和~/.cargo/registry/src下的相关恶意crate文件,并清除Cargo.lock中的缓存记录。
  • ✅ 监控企业环境中上述IoC(IP、域名、文件路径、进程名),对运行cargo构建的主机进行排查,确认是否已下载/执行恶意payload。
  • ✅ 启用Cargo.lock和依赖完整性校验,使用cargo audit或cargo vet等工具持续跟踪依赖变更,警惕yank后版本更新提示。

涉及漏洞:[]


⚠️ 本文仅供安全研究与学习,IOC 信息请勿用于非法目的。

🤖 常见问题解答(FAQ)

❓ 如何判断我的项目是否受影响?

检查Cargo.lock中arrayref版本是否为0.3.10、internment是否为0.8.7、append-only-vec是否为0.1.9,或依赖树中是否存在proc-macro1。也可用cargo tree | grep proc-macro1,并搜索本地registry缓存中的对应文件。

❓ 恶意payload是如何在构建时执行的?

恶意依赖proc-macro1的build.rs脚本在编译时运行,它从base64片段重组出payload下载地址和C2地址,然后根据操作系统下载并执行对应二进制或PowerShell脚本,整个过程无需调用crate的任何API。

❓ 攻击者身份是否已归因?

Wiz评估基础设施与朝鲜相关攻击重叠,如Mastra npm和axios事件,后两者分别被归因于Sapphire Sleet和MIDNIGHT NEPTUNE,但此次crates.io事件尚无官方归因。

[!] CONTACT_CHANNELS

如需商务合作、技术咨询或漏洞反馈,请通过以下离岸节点联系作者。

> PING_AUTHOR (@A1RedTeam)