# Rust 的一個 crate 在編譯時執行了惡意軟體。86 分鐘。

Published: 2026-09-15

一個擁有 2.6 億次下載量的四巨集 Rust crate 增加了一個依賴項，然後 \`cargo build\` 在您的機器上執行一個陌生人的二進位檔。2026 年 8 月 20 日：arrayref 0.3.10 登陸 crates.io，它依賴於 proc-macro1 —— 而不是真正的 proc-macro2 —— 其建置腳本下載一個有效負載，將其放在 /tmp/rust-setup 中，並在您的專案編譯時以分離模式啟動它。乾淨的版本被撤回，因此 Cargo 自己的警告會引導您到被感染的版本。86 分鐘後它被刪除。

Canonical: https://thedailydiff.dev/zh-TW/video/2026-09-15-arrayref-proc-macro/

## 本影片重點

- cargo build 執行陌生人的二進位檔
- 收據：Rust 部落格、SafeDep、Hacker News
- 這是 The Daily Diff，事後分析
- 時間線：02:11 暫存 → 07:15 發布 → 08:41 刪除
- 機制：build.rs，無沙箱，撤回誘餌

## 章節

- 0:00 cargo build 執行陌生人的二進位檔
- 0:20 收據：Rust 部落格、SafeDep、Hacker News
- 0:33 這是 The Daily Diff，事後分析
- 0:40 時間線：02:11 暫存 → 07:15 發布 → 08:41 刪除
- 1:25 機制：build.rs，無沙箱，撤回誘餌
- 2:05 git blame — 分裂
- 2:25 影響範圍：2,285 次下載
- 2:45 判決 + 週一線

## 翻譯文字稿

譯自英文原版旁白。可用的音訊和字幕由 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 的名字差一個字母， 他維護著 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，repo 上的一個問題；攻擊者以 0.3.11 和第二個 惡意依賴項回應。08:41，已刪除。 八十六分鐘。為什麼？ 第一：Cargo 會建置所有已聲明的依賴項，無論是否呼叫。 一行清單就足夠了。

1:21 第二：建置腳本在您的機器上執行，以您的身份，帶著您的 SSH 金鑰和 cargo

### 機制：build.rs，無沙箱，撤回誘餌

1:26 token，在您的程式碼編譯之前。 沒有沙箱，這是設計如此：這是 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 所信任的 版本。 數字一，十五：與 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。 八十六分鐘刪除，當天部落格發文，帳戶鎖定：這 部分是 SHIP IT。 但是 crate 頁面顯示什麼也沒發生，cargo audit 對於快取的

### 判決 + 週一線

2:48 副本保持沉默，而建置腳本仍然以您的身份執行。 週一：執行 Rust 部落格的查找命令，並將撤回警告視為一個 問題，而不是指示。 將您仍然不被允許談論的事件寄給我， 在評論中，或寄到 the daily diff dot dev。 這就是今天的差異。 我是 Axrisi 的 Niko。 負責任地合併。

## 來源

- [Rust Blog, "Supply chain attack on arrayref" (security-response, Aug 20, 2026)](https://blog.rust-lang.org/2026/08/20/supply-chain-attack-on-arrayref/) — blog.rust-lang.org
- [RUSTSEC-2026-0260 (arrayref)](https://github.com/rustsec/advisory-db/blob/main/crates/arrayref/RUSTSEC-2026-0260.md) — github.com
- [RustSec issue #3161 (the original report, IOCs, victims)](https://github.com/rustsec/advisory-db/issues/3161) — github.com
- [SafeDep technical analysis](https://safedep.io/arrayref-proc-macro1-rust-build-time-malware/) — safedep.io
- [GitHub issue on the repo (0.3.11 spotted)](https://github.com/droundy/arrayref/issues/33) — github.com
- [crates.io](https://crates.io/crates/arrayref) — crates.io
- [Hacker News (554 points)](https://news.ycombinator.com/item?id=49374269) — news.ycombinator.com
- [BleepingComputer](https://www.bleepingcomputer.com/news/security/hackers-poison-arrayref-rust-crate-to-push-infostealer-malware/) — www.bleepingcomputer.com
