觀點 · 資訊分享

Rust 熱門套件 arrayref 被植入惡意依賴:上架 86 分鐘就被撤,期間被下載 2,285 次

Rust 官方套件庫 crates.io 發現 arrayref 等 3 個套件被發布了帶惡意依賴的新版,編譯時就會下載惡意程式。官方 1 個多小時內全數撤下,並提供檢查方法。

發布
2026-08-20
篇幅
約 4 分鐘 · 1,616 字
結構
7 節 + 3 題常見問題
標籤
#Rust#crates.io#供應鏈攻擊#arrayref#資安
Rust 熱門套件 arrayref 被植入惡意依賴:上架 86 分鐘就被撤,期間被下載 2,285 次

一句話看懂:Rust 熱門套件 arrayref 被人用作者帳號發布了帶惡意依賴的新版,一編譯就會下載惡意程式;官方 86 分鐘內撤下,多數人因為鎖檔沒被波及。

Rust 套件 arrayref 供應鏈攻擊資訊圖卡:熱門套件被加上假冒的依賴,一編譯就執行惡意程式

先用白話講:供應鏈攻擊是什麼?

寫程式很少從零開始,大家都會拿別人做好的「零件」來組裝,這些零件就是套件。Rust 的官方零件倉庫叫 crates.io。

供應鏈攻擊就像有人混進零件工廠,在一顆很多人用的螺絲裡藏了東西。你什麼都沒做錯,只是照常進貨、組裝,問題就跟著進來了。

這次更麻煩的是:Rust 套件可以帶一個建置腳本,在「編譯」的時候就自動執行。所以攻擊者不用等你呼叫任何功能,你一按建置,惡意程式就開始動作。

發生什麼事

依 Rust 官方部落格與 RustSec 公告:

  • 8 月 20 日 07:15(UTC,台灣時間 15:15,自行換算),Rust 安全回應小組收到通報,確認 proc-macro1 套件的建置腳本會下載惡意程式
  • 它的名字跟常見套件 proc-macro2 只差一個數字,很容易被看成同一個
  • 熱門套件 arrayref 被發布新版 0.3.10,加上對 proc-macro1 的依賴;同一作者的 internment、append-only-vec 也被動手腳
  • 官方刪除惡意版本、恢復被惡意下架的舊版,並鎖定作者帳號;官方認為作者本人不是惡意,而是電腦或帳密可能被盜

各版本上架時間:

惡意版本 上架時間
arrayref 0.3.10 86 分鐘
internment 0.8.7 90 分鐘
append-only-vec 0.1.9 107 分鐘

另外 proc-macro1、proc-macro-en、aovine、arone、aronenao、tinymember 這 6 個套件的所有版本都被刪除。

影響有多大?

RustSec 公告寫明:惡意版 arrayref 被下載 2,285 次,不到 arrayref 全部下載流量的 10%。原因是多數專案的 Cargo.lock 鎖檔還停在舊版,沒有自動升上去。這次是鎖檔真正發揮作用的例子。

給開發者的技術細節

  • 安全版本:arrayref 0.3.9 以前不受影響,目前沒有「修補版」,鎖在 0.3.9 即可
  • 先看自己專案的鎖檔有沒有出現惡意版本:
# 在專案根目錄檢查 Cargo.lock
grep -nE 'name = "(proc-macro1|proc-macro-en|aovine|arone|aronenao|tinymember)"' Cargo.lock
grep -nA1 'name = "arrayref"' Cargo.lock
  • 再照官方部落格提供的 find 指令,檢查 ~/.cargo/registry/cache 有沒有這幾個版本的 .crate 檔;CI 建置機也要一起查
  • 首先通報這件事的是 Nextron Systems 研究團隊

我的看法

這次能把損害壓在兩千多次下載,靠的是兩件事:官方一個多小時內就處理完,以及大家的專案都有鎖檔。接案時我會要求 Cargo.lock、pnpm-lock.yaml 這類鎖檔一定要進版控,CI 也用鎖檔安裝,不要每次建置都抓最新版,這就是原因。

另一個提醒是建置環境本身。CI 機器上通常放著部署金鑰、雲端權杖,建置腳本一執行就碰得到它們。如果查到命中,不要只把套件版本改回來就算了,那台機器上的金鑰都應該當成外洩,全部換掉。

名詞小辭典

  • 套件(Crate):Rust 世界裡別人寫好、可以直接拿來用的程式零件。
  • 鎖檔(Cargo.lock):記錄專案用到的每個套件「確切版本」的檔案,讓每次建置都裝一樣的版本。
  • 建置腳本(build.rs):編譯 Rust 套件時會自動執行的一段程式。
  • RustSec:Rust 社群維護的安全公告資料庫,每個問題有一個 RUSTSEC 編號。

資料來源

常見問題

我的專案有用到 arrayref,一定中招嗎?
不一定。只有在 2026-08-20 那一個多小時內,實際下載到 arrayref 0.3.10(或 internment 0.8.7、append-only-vec 0.1.9)並執行建置的環境才有風險。Cargo.lock 鎖在 0.3.9 以前版本的專案不受影響。
為什麼沒呼叫套件的任何功能也會中招?
Rust 套件可以附一個 build.rs 建置腳本,在編譯時自動執行。這次的惡意套件就是把下載惡意程式的動作放在建置腳本裡,所以只要跑 cargo build 就會觸發。
查到本機有惡意版本的檔案,該怎麼辦?
官方公告只提供檢查方法。保守做法是把那台電腦或 CI 環境當成已外洩:停用並更換上面存過的金鑰與權杖,重建建置環境,再把依賴鎖回安全版本。
LINE