Mini Shai-Hulud 蠕蟲:NPM 供應鏈安全的警鐘

JavaScript 生態系統再次因一場重大的供應鏈攻擊而動盪。"Mini Shai-Hulud" 蠕蟲瞄準了知名套件,包括來自 TanStack 生態系統和 Mistral AI 的套件,透過劫持 CI/CD 流水線並竊取開發者機密資訊。這次事件是一個嚴峻的提醒,說明了現代依賴鏈是多麼脆弱,以及為什麼目前發布套件的信任模型是不夠的。

攻擊剖析

根據報告和 TanStack 的事後檢討,這次攻擊並非簡單的憑證洩漏,而是對 CI/CD 流水線的複雜滲透。該蠕蟲透過劫持構建過程來竊取 OIDC token 並取得其他開發者機密資訊。

這次攻擊最令人擔憂的面向之一是其自我傳播的特性。該惡意軟體使用 prepare hook——一個在安裝期間執行的生命週期腳本——來執行其有效載荷(payload)。透過自動化安裝 Bun(一個快速的 JavaScript 執行環境)來執行有效載荷,該蠕蟲可以從一個受害套件傳播到另一個套件,有效地將流水線轉變為分發媒介。

"Dead-Man's Switch" 與報復性有效載荷

對有效載荷的技術分析揭示了一種特別具侵略性的持久化與報復手段。安全研究人員指出,該有效載荷會在受害者的機器上安裝一個 "dead-man's switch":

請在撤銷 token 時保持謹慎。看起來有效載荷會在 ~/.local/bin/gh-token-monitor.sh 安裝一個 dead-man's switch,作為一個 systemd 使用者服務 (Linux) / LaunchAgent com.user.gh-token-monitor (macOS)。它每 60 秒使用竊取的 token 輪詢 api.github.com/user,如果 token 被撤銷 (HTTP 40x),它就會執行 rm -rf ~/

這種報復程度在供應鏈攻擊中非常罕見,攻擊者通常傾向於保持隱蔽以最大化數據外洩。在 token 被撤銷時威脅要刪除整個家目錄的行為,使得受影響的開發者在進行修復過程時變得更加危險。

生態系統中的關鍵失效

這次事件引發了開發者之間關於 NPM registry 的系統性失效以及我們所使用的工具的激烈辯論。

生命週期腳本的危險性

生命週期腳本(例如 preinstallpostinstallprepare)被廣泛批評為主要的攻擊媒介。因為這些腳本會在安裝時自動執行,它們為惡意軟體提供了一條直接路徑,讓其在無需經過開發者明確同意的情況下,在開發者的機器或 CI 環境中執行代碼。

"Trusted Publishing" 的缺口

雖然 GitHub 的 "Trusted Publishing" (OIDC) 旨在消除對長期有效機密資訊的需求,但批評者認為這是一種不充分的安全邊界。正如社群成員所指出的,如果攻擊者控制了 CI 流水線或儲存庫管理員的 token,他們就可以在沒有第二因子驗證 (2FA) 控管最終發布的情況下,發布惡意版本的套件。

Registry 政策限制

TanStack 報告稱,由於 NPM 的政策規定若存在依賴項則禁止取消發布(unpublish),導致許多受影響的套件無法使用 unpublish 功能。這迫使團隊必須依賴 NPM 安全團隊在伺服器端拉回 tarballs,這在惡意套件仍可供下載的期間增加了數小時的關鍵延遲。

如何保護您的環境

在這次攻擊之後,安全專家和社群建議採取以下立即措施來強化您的開發環境:

  1. 停用生命週期腳本:在您的 .npmrc 檔案中設置 ignore-scripts=true。這可以防止套件在安裝期間執行任意代碼。

  2. 實施依賴項冷卻期:使用 "minimum release age" 來避免安裝 "zero-day" 惡意發布版本。這可以在各種管理工具中進行配置:

    • npm: min-release-age=7 (天)
    • pnpm: minimum-release-age=10080 (分鐘)
    • bun: minimumReleaseAge = 604800 (秒)
  3. 使用隔離環境:考慮在專用的虛擬機 (VM) 中運行專案,而不僅僅是使用容器,因為容器並非設計用於作為主要的安全性邊界界限。

  4. 審核 CI/CD 流水線:確保發布步驟與主構建過程完全隔離,且不執行任何來自儲存庫本身的代碼,而是發布一個預先構建且經過驗證的產物(artifact)。

結論

Mini Shai-Hulud 蠕蟲不僅僅是一個技術故障;它是依賴重度文化中信任是隱含的、且攻擊面極大的症狀。除非產業向「生命週期腳本預設停用」以及「發布需要帶外(out-of-band)第二因子驗證」的模型轉型,除非如此,JavaScript 生態系統將繼續成為供應鏈攻擊的高價值目標。

Sources