Rust 生态遭遇供应链攻击:proc-macro1 等多个 crate 被植入恶意代码
Rust 安全响应团队发布公告,披露了一起针对 Rust 生态的供应链攻击。攻击者发布了多个包含恶意构建脚本的 crate,其中最知名的是 proc-macro1。这些 crate 已被删除,但已经下载的用户需要采取措施排查。
事件经过
2026 年 8 月 20 日 7:15 UTC,Rust 安全响应团队收到报告,称 proc-macro1 crate 存在恶意行为。团队经过验证确认:该 crate 的构建脚本(build script)会下载并执行恶意载荷。
除了 proc-macro1,攻击者还发布了多个类似的恶意 crate,包括:
proc-macro-enaovinearonearonenaotinymember
这些 crate 均已从 crates.io 上删除。
攻击手法
攻击者利用了 Rust 构建脚本的特性。在 Rust 中,build.rs 构建脚本在编译时执行,拥有与当前用户相同的系统权限。如果一个 crate 的构建脚本被植入恶意代码,那么任何依赖该 crate 的项目在编译时都会执行恶意代码。
这种攻击手法的危险之处在于:
- 隐蔽性强:恶意代码在构建时执行,不在运行时出现,常规的运行时安全检测难以发现
- 传播范围广:如果恶意 crate 被流行项目依赖,攻击会迅速扩散到整个依赖链
- 权限高:构建脚本拥有用户级权限,可以访问文件系统、网络、环境变量等敏感资源
与 arrayref 的关系
公告标题中提到了 arrayref,这是因为攻击者的恶意 crate 名称与一些流行 crate 相似,试图通过"名称仿冒"(typosquatting)诱导开发者误下载。arrayref 是一个流行的 Rust crate,攻击者可能试图通过相似名称进行钓鱼。
Rust 安全响应团队确认 arrayref 本身没有被入侵,是安全的。
排查建议
如果你在 2026 年 8 月 20 日之前下载过上述任何恶意 crate,建议采取以下措施:
- 检查依赖:在项目中运行
cargo tree,检查是否依赖了任何被标记的恶意 crate - 检查构建缓存:清理
target/目录和 cargo 缓存(~/.cargo/registry) - 系统排查:检查是否有异常的网络连接、定时任务、新用户等
- 轮换凭证:如果构建环境中包含 API 密钥、令牌等敏感信息,建议轮换这些凭证
crates.io 的安全措施
crates.io 团队已经采取了多项措施来防止类似攻击:
- 增强了新 crate 的审核机制
- 改进了名称仿冒检测算法
- 对构建脚本的行为增加了更多监控和告警
- 提供了
cargo audit等工具帮助开发者检测已知漏洞
供应链安全的思考
这起事件再次提醒开发者,开源供应链安全不容忽视。即使是 Rust 这样以安全性著称的语言生态,也无法完全避免供应链攻击。
对于开发者来说,几个最佳实践值得遵循:
- 定期运行
cargo audit检查依赖中的已知漏洞 - 对不熟悉的 crate 保持警惕,特别是名称与流行 crate 相似的
- 在 CI/CD 中使用沙箱环境执行构建,限制构建脚本的权限
- 关注 Rust 安全响应团队的公告,及时响应安全事件
Rust 安全响应团队表示将继续加强 crates.io 的安全机制,保护整个 Rust 生态的供应链安全。
原文链接:https://blog.rust-lang.org/2026/08/20/supply-chain-attack-on-arrayref/