新聞加密貨幣Rust 供應鏈攻擊影響多個廣泛使用的 Crates,Solana 生態系存在潛在曝險

Rust 供應鏈攻擊影響多個廣泛使用的 Crates,Solana 生態系存在潛在曝險

作者: Hokanews·

重點速覽

  • 資安研究人員回報 Rust 生態系中出現 arrayref@0.3.10、internment@0.8.7 與 append-only-vec@0.1.9 的惡意版本。
  • 遭入侵的套件使用了仿冒 proc-macro1 的相似名稱相依套件,其建置腳本可在編譯期間下載並執行遠端酬載。
  • 由於 Cargo 會自動執行建置腳本,開發者與 CI 環境可能僅因編譯受影響版本就暴露於風險。
  • Rust 資安團隊已移除惡意版本,並鎖定與這些套件相關聯的維護者帳號。
  • 受影響的 crates 出現在某些與 Solana 相關的相依鏈中,但報告並未顯示 Solana 或下游專案已遭入侵。
Rust 供應鏈攻擊影響多個廣泛使用的 Crates,Solana 生態系存在潛在曝險

一起有組織的供應鏈攻擊襲擊了多個廣泛使用的 Rust 套件,令相依鏈中包含 Solana 生態系相關元件的開發者與專案感到憂心。SlowMist、Socket 與 StepSecurity 的資安研究人員回報,惡意版本影響了 arrayref@0.3.10、internment@0.8.7 與 append-only-vec@0.1.9

遭入侵的版本引入了一個仿冒正規 proc-macro1 套件的 typosquatting 相依套件,其建置腳本會在 Cargo 建置期間下載並執行遠端酬載。因此,只要編譯相依於任一受影響版本的專案,開發者與持續整合(CI)系統就可能暴露於風險之中。根據 @WuBlockchain 在 X 上分享的資訊,Rust 資安團隊已移除惡意版本並鎖定受影響的維護者帳號。

惡意套件透過相依鏈植入

這起事件的核心在於 Rust 的套件生態系:開發者普遍仰賴第三方 crates 來為應用程式與軟體專案提供功能。在本案例中,研究人員發現三個 crates 的惡意版本:arrayref@0.3.10、internment@0.8.7 與 append-only-vec@0.1.9

這些惡意版本內含一個刻意仿冒正規 proc-macro1 套件的相依套件。這種手法稱為「typosquatting」(名稱仿冒),目的是讓惡意套件看起來與正規相依套件相似。這是開源登錄庫(包括 npm 與 Python 的 PyPI)中反覆出現的手法,近似的套件名稱曾多次被用來透過例行相依更新植入惡意程式碼。

這起攻擊之所以特別值得重視,是因為該惡意相依套件內含建置腳本,能在受影響套件被編譯時下載並執行遠端酬載。因此,資安風險不一定僅限於手動安裝或執行明顯可疑程式的使用者:開發者工作站或 CI 環境也可能在正常軟體編譯過程中受到影響。

建置流程構成潛在資安風險

Cargo 是 Rust 的套件管理器與建置系統,開發者經常使用它來取得相依套件並編譯專案。本次回報的攻擊正是利用了這套工作流程。由於 Cargo 會在編譯過程中自動執行 crate 的建置腳本,這類腳本會以執行建置的使用者或 CI 帳號權限運行。

當受影響的相依套件被編譯時,惡意建置腳本便可能下載並執行遠端酬載,這為攻擊者開啟了在開發者電腦或 CI 主機上執行程式碼的潛在途徑。

CI 系統在現代軟體開發中格外重要,因為它們會自動建置、測試並部署程式碼。因此,遭入侵的建置環境所帶來的風險可能超出單一開發者工作站,因為建置機器與開發者工作站經常持有 API 權杖、部署金鑰與簽署憑證等機密資訊。有鑑於此,資安團隊通常會將建置期間的程式碼執行視為輪替受影響系統上所有機密的正當理由。

這起事件凸顯了軟體供應鏈更廣泛的資安挑戰:惡意程式碼可能透過開發者本身未必撰寫或審查過的相依套件,間接進入專案。

與 Solana 相關的相依鏈引發關注

arrayref crate 廣泛用於 Rust 生態系,並出現在涉及 Solana 相關元件的相依鏈中。Solana 的驗證器軟體及其周邊工具大多以 Rust 撰寫,這正是 arrayref 這類通用 crates 會出現在 Solana 相關相依樹中的原因——儘管這些 crates 本身並非區塊鏈專用。然而,相依鏈中存在受影響的 crate,並不代表下游的 Solana 相關專案已遭入侵。

這一區別相當重要,因為開源軟體經常依賴多層相依套件。一個有漏洞或遭入侵的套件可能出現在專案相依樹的某處,但不一定會導致最終應用程式或網路被成功入侵。

因此,資安研究人員會區分「曾接觸惡意相依套件」與「有證據顯示惡意程式碼確實在某個下游專案或環境中執行」。本次回報的事件證實受影響版本含有惡意程式碼,但並未證實每個使用相關相依套件的專案都已遭入侵。

Rust 資安團隊移除惡意版本

Rust 資安團隊的因應措施是移除惡意版本,並鎖定與這些套件相關聯的維護者帳號。根據目前回報的資訊,該維護者的電腦或發布憑證很可能已遭入侵。

在開源生態系中,遭入侵的發布帳號可能構成重大風險,因為攻擊者可能以正規維護者的身分散布惡意軟體。移除受影響版本可限制其在套件生態系中進一步散布,而鎖定帳號則能防止再以遭竊憑證發布新版本。遭入侵 Rust crates 的資安通報由社群維護的 RustSec 資安公告資料庫追蹤,這是開發者除了 crates.io 登錄庫之外可以監控的管道之一。

這起事件也顯示監控相依套件與審視非預期套件更新的重要性,尤其是在專案依賴龐大且複雜的相依樹時。

對 Rust 開發者的更廣泛影響

供應鏈攻擊已成為軟體開發領域的重大資安隱憂,因為其目標是用來建置應用程式的基礎設施與相依套件,而非直接攻擊最終應用程式。在本案例中,惡意程式碼被內嵌於套件發布版本中,並於建置過程中被觸發。此類手法有明確的前例可循,包括 2024 年 3 月揭露的 XZ Utils 後門事件——攻擊者利用了維護者在基礎開源壓縮函式庫中的職位——以及 2024 年 12 月 npm 上 @solana/web3.js 套件遭入侵的事件,該事件影響了 Solana 開發者廣泛使用的 JavaScript 函式庫。這兩起事件與本次事件都顯示,對維護者帳號或套件身分的信任本身可能成為攻擊面。

使用 Rust 專案的開發者可透過監控相依套件版本、審視非預期變更,以及使用能識別可疑套件或相依行為的資安工具,來降低遭遇類似事件的風險。就本次事件而言,具體做法包括:在 Cargo.lock 等鎖定檔案中搜尋三個受影響版本、檢查 CI 與建置日誌中是否有非預期的對外網路活動,以及在曾編譯過受影響版本的機器上輪替憑證。依賴自動化 CI 環境的組織也需要審視其建置基礎設施的安全性,因為惡意相依套件可能在應用程式部署前就執行程式碼。

Rust 生態系的因應展現了協同資安監控與快速移除遭入侵套件的重要性。雖然受影響的 crates 與涉及 Solana 相關元件的相依鏈有關聯,但現有資訊並未證實 Solana 本身或特定下游專案已遭入侵。這起事件反而提醒我們:當發布憑證或維護者環境遭入侵時,廣泛使用的開源相依套件可能成為潛在的攻擊途徑。

來源:Hokanews