一個 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 — 該 crate 的構建腳本會下載一個有效負載,將其放入 /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,事後分析。 UTC 時間凌晨兩點。
這是 The Daily Diff,事後分析
0:33 一個名為 d-tolney 的帳戶,與 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 客戶端。 用於一個令牌解析器。 07:15。維護者的帳戶將 arrayref 重新發佈為 0.3.10 並 撤銷了所有舊版本。 Cargo 打印:考慮更新到一個未被撤銷的版本。 唯一剩下的就是被感染的版本。
1:02 警告就是誘餌。 同一分鐘,一家安全公司向 Rust 報告了它。 07:54,一個 RustSec 問題。 08:29,repo 上的一個問題;攻擊者以 0.3.11 和第二個 惡意依賴項回應。08:41,已刪除。 86 分鐘。為什麼? 第一:Cargo 會構建所有聲明的依賴項,無論是否被調用。 一個清單行就足夠了。
1:21 第二:一個構建腳本在您的機器上執行,作為您,帶有您的 SSH 密鑰和 cargo
機制:build.rs,無沙盒,撤銷誘餌
1:26 令牌,在您的代碼編譯之前。 無沙盒,這是設計使然:這是 crate 查找 C 庫的方式。 第三:內部是真正的 proc-macro2,因此構建成功。 有效負載:一個信任任何證書的 TLS 客戶端會獲取一個二進制文件, 將其放入 /tmp/rust-setup 並以分離模式生成它。 在 Windows 上,它會通過 wscript 繞道以逃避 Cargo 的作業對象;一個源代碼 註釋說明了這一點。 根據 RustSec 線程,第二階段:一個針對瀏覽器和加密錢包的遠程訪問工具。
1:52 瀏覽器和加密錢包。 富有詩意,因為 arrayref 的最大用戶包括 secp256k1 和 Solana。 git blame。Cargo 的模型,百分之五十五:依賴項在編譯時在您的 機器上執行代碼,無沙盒,並且撤銷警告將人們引導到了
git blame — 分裂
2:07 毒物。一個帳戶,三十:一個憑證 重新發佈了一個 crate,有 2.5 億次 下載信任。 數字一,十五:來自 Rust 最受信任的 crate 的一個擊鍵, 沒有人讀樹。 影響範圍:在 86 分鐘內下載了 2,285 次。 不到流量的百分之十,因為大多數鎖定文件都保存了 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。 這就是今天的 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



