+− THE DAILY DIFFdev & AI news
NEEDS REVIEW

一個 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。 負責任地合併。

來源

  1. Rust Blog, "Supply chain attack on arrayref" (security-response, Aug 20, 2026)blog.rust-lang.org
  2. RUSTSEC-2026-0260 (arrayref)github.com
  3. RustSec issue #3161 (the original report, IOCs, victims)github.com
  4. SafeDep technical analysissafedep.io
  5. GitHub issue on the repo (0.3.11 spotted)github.com
  6. crates.iocrates.io
  7. Hacker News (554 points)news.ycombinator.com
  8. BleepingComputerwww.bleepingcomputer.com

相關影片

postmortem · zh-HK · 2026年9月13日

十一行JavaScript搞垮了整個互聯網。一次取消發佈。

2016年3月22日,世界標準時間21:30:一名開發人員取消發佈了他所有273個npm套件,此前npm將套件名稱「kik」交給了即時通訊應用程式Kik,Kik的專利代理人曾威脅說「律師會找上門來」。這273個套件之一是left-pad:十一行程式碼,用於在字串前加上空格,每月下載量達250萬次。幾分鐘內,全球範圍內的Babel、React和Node構建失敗,每分鐘數百次。一個分支在十分鐘內出現並

2:52 ↗
postmortem · zh-HK · 2026年9月22日

重啟令 Telstra 倒退回 2006 年。九百萬部電話。

墨爾本的一名工程師在凌晨 2 時 50 分重啟計時機箱,到早餐時,澳洲最大的流動網絡竟以為是 2006 年 11 月。2026 年 7 月 8 日:Telstra NTP 機箱中的 GPS 卡在更換電源期間重啟,其韌體從未有 GPS 週數滾動更新,因此它選擇了舊的紀元,倒退了 1,024 週。由於 2025 年 10 月的變通方法使該卡成為網絡唯一的 stratum-1 來源 — 以及 2020

3:15 ↗