资讯 Rust 生态遭遇供应链攻击:proc-macro1 等多个 crate 被植入恶意代码

2026-09-05 20:29:55

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-en
  • aovine
  • arone
  • aronenao
  • tinymember

这些 crate 均已从 crates.io 上删除。

攻击手法

攻击者利用了 Rust 构建脚本的特性。在 Rust 中,build.rs 构建脚本在编译时执行,拥有与当前用户相同的系统权限。如果一个 crate 的构建脚本被植入恶意代码,那么任何依赖该 crate 的项目在编译时都会执行恶意代码。

这种攻击手法的危险之处在于:

  1. 隐蔽性强:恶意代码在构建时执行,不在运行时出现,常规的运行时安全检测难以发现
  2. 传播范围广:如果恶意 crate 被流行项目依赖,攻击会迅速扩散到整个依赖链
  3. 权限高:构建脚本拥有用户级权限,可以访问文件系统、网络、环境变量等敏感资源

与 arrayref 的关系

公告标题中提到了 arrayref,这是因为攻击者的恶意 crate 名称与一些流行 crate 相似,试图通过"名称仿冒"(typosquatting)诱导开发者误下载。arrayref 是一个流行的 Rust crate,攻击者可能试图通过相似名称进行钓鱼。

Rust 安全响应团队确认 arrayref 本身没有被入侵,是安全的。

排查建议

如果你在 2026 年 8 月 20 日之前下载过上述任何恶意 crate,建议采取以下措施:

  1. 检查依赖:在项目中运行 cargo tree,检查是否依赖了任何被标记的恶意 crate
  2. 检查构建缓存:清理 target/ 目录和 cargo 缓存(~/.cargo/registry
  3. 系统排查:检查是否有异常的网络连接、定时任务、新用户等
  4. 轮换凭证:如果构建环境中包含 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/

推荐文章

程序员茄子在线接单