一个 Rust crate 在编译时运行了恶意软件。86 分钟。
一个拥有 2.6 亿次下载量的四宏 Rust crate 添加了一个依赖项,`cargo build` 会在你的机器上运行陌生人的二进制文件。
一个拥有 2.6 亿次下载量的四宏 Rust crate 添加了一个依赖项,`cargo build` 会在你的机器上运行陌生人的二进制文件。2026 年 8 月 20 日:arrayref 0.3.10 在 crates.io 上发布,依赖于 proc-macro1——而不是真正的 proc-macro2——其构建脚本会下载一个有效载荷,将其放到 /tmp/rust-setup 中,并在你的项目编译时将其作为分离进程启动。干净的版本被撤回,因此 Cargo 自己的警告会引导你到被污染的版本。86 分钟后它被删除。
本视频涵盖的内容
- cargo build 运行了陌生人的二进制文件
- 依据:Rust 博客、SafeDep、Hacker News
- 这是 The Daily Diff,事后分析
- 时间线:02:11 暂存 → 07:15 发布 → 08:41 删除
- 机制:build.rs,无沙盒,撤回诱饵
翻译的文字记录
译自英文原版旁白。可用音频和字幕由 YouTube 控制。
cargo build 运行了陌生人的二进制文件
0:00 一个拥有 2.5 亿次下载量的四宏 Rust crate 添加了一个 依赖项,`cargo build` 会在你的机器上运行陌生人的二进制文件。 2026 年 8 月 20 日。 arrayref 0.3.10 发布在 crates.io 上,依赖于 proc-macro1。 不是 proc-macro2,真正的那个:差了一个数字,其构建脚本会在你的项目编译时运行一个 有效载荷。 Rust 安全团队在 86 分钟后将其删除。
依据:Rust 博客、SafeDep、Hacker News
0:22 SafeDep 发布了拆解报告。 Hacker News:554 分。 它是如何发生的,为什么 Cargo 允许它,以及谁该承担责任。 这是 The Daily Diff,事后分析。 世界标准时间凌晨两点。
这是 The Daily Diff,事后分析
0:33 一个名为 d-tolney 的账户,与 David Tolnay 仅差一个字母, David Tolnay 维护着 Rust 的一半,他发布了 proc-macro1 1.0.106:真实的
时间线:02:11 暂存 → 07:15 发布 → 08:41 删除
0:41 proc-macro2,重命名。暂存。 07:11。版本 1.0.107 添加了一个构建脚本,以及 base64、TLS 和一个 HTTP 客户端。 用于一个 token 解析器。 07:15。维护者的账户将 arrayref 重新发布为 0.3.10,并 撤回了所有旧版本。 Cargo 打印:考虑更新到未被撤回的版本。 唯一剩下的就是被污染的版本。
1:02 这个警告是诱饵。 同一分钟,一家安全公司向 Rust 报告了它。 07:54,一个 RustSec 问题。 08:29,仓库上出现一个问题;攻击者以 0.3.11 和第二个 恶意依赖项作为回应。08:41,删除。 八十六分钟。为什么? 一:Cargo 会构建所有声明的依赖项,无论是否被调用。 一个清单行就足够了。
1:21 二:构建脚本在你的机器上运行,以你的身份,使用你的 SSH 密钥和 Cargo
机制:build.rs,无沙盒,撤回诱饵
1:26 令牌,在你的代码编译之前。 没有沙盒,这是故意的:这是 crate 查找 C 库的方式。 三:内部是真实的 proc-macro2,所以构建成功。 有效载荷:一个信任任何证书的 TLS 客户端会获取一个二进制文件, 将其放到 /tmp/rust-setup 中,并将其作为分离进程启动。 在 Windows 上,它会通过 wscript 绕过 Cargo 的 job object;一个源代码 注释说明了这一点。 第二阶段,根据 RustSec 帖子:一个针对
1:52 浏览器和加密钱包的远程访问工具。 很有诗意,因为 arrayref 最大的用户包括 secp256k1 和 Solana。 git blame。Cargo 的模型,百分之五十五:依赖项在编译时在你的机器上运行代码, 没有沙盒,并且撤回警告将人们引向了
git blame — 分割
2:07 毒药。一个账户,百分之三十:一个凭据 重新发布了一个拥有 2.5 亿次 下载量的 crate。 数字一,百分之十五:来自 Rust 最受信任的 crate 的一个按键, 而没有人阅读整个树。 影响范围:86 分钟内 2,285 次下载。 不到总流量的百分之十,因为大多数 lockfile 都保留了 0.3.9。 crates.io 表示没有使用证据。
影响范围:2,285 次下载
2:27 RustSec 帖子中有两个人不同意;一个人发现了一个 systemd 服务。 在 Hacker News 上,最热门的帖子不是关于恶意软件的。 它是关于 crate 页面,现在 0.3.10 似乎从未存在过。 结论,事后分析:NEEDS REVIEW。 86 分钟删除,当天发布博客文章,账户被锁定:这 部分是 SHIP IT。 但是 crate 页面显示什么也没发生,cargo audit 对缓存的副本保持沉默,
结论 + 星期一的底线
2:48 并且构建脚本仍然以你的身份运行。 星期一:运行 Rust 博客的查找命令,并将撤回警告视为一个 问题,而不是指令。 将你仍然不允许谈论的事件发送给我, 在评论中,或者发送到 daily diff dot dev。 这就是今天的 Daily Diff。 我是 Axrisi 的 Niko。 负责任地合并。
来源
- Rust Blog, "Supply chain attack on arrayref" (security-response, Aug 20, 2026)blog.rust-lang.org
- RUSTSEC-2026-0260 (arrayref)github.com
- RustSec issue #3161 (the original report, IOCs, victims)github.com
- SafeDep technical analysissafedep.io
- GitHub issue on the repo (0.3.11 spotted)github.com
- crates.iocrates.io
- Hacker News (554 points)news.ycombinator.com
- BleepingComputerwww.bleepingcomputer.com



