「可信包」的崩潰? Shai-Hulud 2.0 標誌著 npm 供應鏈攻擊進入新階段 「可信包」的崩潰? Shai-Hulud 2.0 標誌著 npm 供應鏈攻擊進入新階段

「可信包」的崩潰? Shai-Hulud 2.0 標誌著 npm 供應鏈攻擊進入新階段

「可信包」的崩潰? Shai-Hulud 2.0 標誌著 npm 供應鏈攻擊進入新階段

如果安裝一個熟悉的 npm 套件成為 CI/CD 和雲端安全入侵的入口點呢?
Shai-Hulud 2.0 揭示了一個現實:僅僅添加一個依賴項就可能導致對開發環境的一系列攻擊。


Shai-Hulud 2.0 是一種供應鏈攻擊,它透過在 package.json 中新增預安裝腳本 setup_bun.js 來攻擊多個 npm 套件,該腳本會檢查或安裝 Bun 執行時,執行 bun_environment.js 來檢索 GitHub Actions Runner 歸檔,並設定一個名為 111Hulud 的執行器。

攻擊利用 TruffleHog 和 Runner.Listener 收集並洩露敏感資訊,例如雲端憑證。部分提交記錄以「Linus Torvalds」的名義提交,Zapier、PostHog 和 Postman 等項目的維護者帳戶也受到影響。

Microsoft Defender for Containers 提供偵測功能,並發出諸如「偵測到對隱藏檔案可疑使用 shred 命令」和「偵測到 Sha1-Hulud 攻擊活動 - 可能透過指令注入竊取憑證」之類的警報;而 Microsoft Defender XDR、Microsoft Defender for Endpoint、Microsoft Defender for Cloud、Microsoft Sentinel 和 Microsoft Security Copilot 等產品所提供相關的預防功能。

從: 文献リンク Shai-Hulud 2.0:偵測、調查和防禦供應鏈攻擊的指南

【社論】

Shai-Hulud 2.0 攻擊標誌著一個新時代的到來,在這個時代,開發過程本身也成為了攻擊目標。這次事件發生在 2025 年 11 月下旬(大約從 21 日開始),導致超過 700 個 npm 套件和超過 25,000 個 GitHub 程式碼庫遭到入侵,其本質與傳統惡意軟體截然不同。

它最大的特點是會在 npm 的 preinstall 階段運作。這個階段會在軟體包安裝之前進行,因此會在開發者進行程式碼審查和安全掃描之前完成。它幾乎可以繞過所有靜態分析工具,即使安裝失敗,攻擊程式碼也會執行,從而在開發者不知情的情況下提取身份驗證資訊

這次攻擊利用了一種名為 Bun 的新型 JavaScript 執行環境。 Bun 比傳統的 Node.js 速度更快,並且允許對系統進行更深層的訪問,因此對攻擊者來說極具價值。受感染的機器會自動註冊為 GitHub Actions 中的自架運行器,並利用 TruffleHog 等合法安全工具來竊取 AWS、GCP、Azure、GitHub 等平台的憑證。

這次攻擊的另一個重要特點是其蠕蟲般的特性。它利用竊取的 npm 令牌自動感染其他軟體包,從而無需人工幹預即可呈指數級傳播。 Unit 42 的分析表明,部分惡意 bash 腳本很可能是由 LLM(大規模語言模型)根據評論和表情符號的使用模式產生的。

知名專案(例如 Zapier、PostHog 和 Postman)的維護者帳號遭到入侵,影響了這些專案管理的多個軟體包。這些項目每天都被成千上萬個項目使用,因此損失範圍難以估量。在 CI/CD 管線中軟體包更新自動化的環境中,情況尤其如此,這意味著入侵無需人工幹預即可發生。

這次事件表明,「可信任軟體包」的概念本身正在瓦解。傳統的安全措施著重於安裝後的程式碼檢查和執行時間保護,但由於攻擊現在在更早的階段就已經完成,我們需要從根本上重新思考防禦的起點。 Microsoft Defender for Containers 偵測到了諸如資料銷毀和命令注入等執行時間行為,而這些行為在軟體包安裝前透過靜態掃描是無法偵測到的。

從長遠來看,這次攻擊將促使整個軟體供應鏈重新設計信任模型。雖然諸如 npm 可信任發布、基於 WebAuthn 的雙重認證和提交簽名驗證等應對措施已經存在,但採用率仍然很低。除非整個開發者社群將這些最佳實踐作為標準,否則類似的攻擊仍將繼續發生。

[術語]

npm(Node 套件管理器)
全球最大的 Node.js 套件管理系統,這是一個用於分發和安裝 JavaScript 程式庫和工具的平台,被數百萬開發者每天使用。

預先安裝腳本
該腳本會在安裝 npm 套件之前自動執行。它編寫在 package.json 檔案中,並在依賴項解析和安全性檢查之前運行,因此很難檢測它是否被濫用。

供應鏈攻擊<br>一種針對軟體開發供應鏈(依賴套件、建構工具、分發平台等)的攻擊方法。透過攻破受信任的組件,它會影響所有使用該組件的系統。

CI/CD 管線
持續整合和持續交付是自動測試、建置和部署程式碼變更的開發過程,是現代軟體開發中的標準做法。

包子
這是一個全新的 JavaScript 和 TypeScript 執行環境。它比 Node.js 更快,並整合了打包器、測試運行器和套件管理器。該環境於 2022 年發布,並迅速普及。

GitHub Actions
一項用於自動化 GitHub 上 CI/CD 工作流程的服務。自託管運行器可讓您在自己的伺服器上執行建置和測試,而此次攻擊正是利用了這一機制。

松露豬
開源安全工具,可從 Git 程式碼庫和檔案系統中偵測敏感資訊(API 金鑰、密碼、令牌等)。該工具最初用於安全審計,但已被攻擊者重新利用以竊取憑證。

WebAuthn
一種支援無密碼身份驗證的網路標準。它使用生物識別或安全金鑰提供強大的雙重認證,並且比基於 TOTP 的身份驗證更能抵禦網路釣魚攻擊。

蠕蟲型惡意軟體<br>具有自我複製能力的惡意軟體。它能夠在無需人為幹預的情況下自動將感染傳播到其他系統,導致損害呈指數級增長。

[參考連結]

npm 官方網站(外部連結)
Node.js Package Registry 是世界上最大的 JavaScript 生態系統,託管超過 200 萬個軟體包,每週下載量達數十億次。

GitHub (外部)
全球最大的源碼管理平台。擁有超過1億開發者用戶,它還提供GitHub Actions等開發自動化功能。

Bun 官方網站(外部連結)
一個快速的 JavaScript/TypeScript 運行時,旨在取代 Node.js,並整合了套件管理器、打包器和測試運行器。

TruffleHog GitHub (外部)
一種用於偵測金鑰的開源工具,可發現 Git 儲存庫和檔案系統中意外提交的憑證。

Microsoft Defender for Cloud (外部)
為多雲環境提供整合安全態勢管理和威脅防禦的雲端原生應用程式保護平台。

微軟安全部落格(外部)
微軟官方安全博客,提供最新的威脅分析、產品更新和防禦策略方面的技術見解。

Zapier (外部)
一個無需編寫程式碼的平台,可自動實現不同 Web 應用程式之間的協作。可與超過 7000 個應用程式整合。

[參考文章]

「Shai-Hulud」蠕蟲在供應鏈攻擊中破壞npm生態系(外)
Palo Alto Networks Unit 42 的技術分析詳細介紹了超過 25,000 個 GitHub 儲存庫遭到入侵、潛在的 LLM 生成程式碼以及蠕蟲狀的自我傳播機制。

Shai-Hulud 2.0:第二次降臨內幕(外在)
Check Point 對此次攻擊進行了全面分析。技術細節包括從 2025 年 11 月 21 日開始的攻擊時間軸、受影響的軟體包詳情以及預先安裝階段的執行機制。

Shai-Hulud 2 惡意軟體攻擊活動瞄準 GitHub 和雲端憑證(外部連結)
Endor Labs 分析了 Bun 運行時濫用情況,並報告了 GitHub Actions 自託管運行器自動註冊和 TruffleHog 憑證收集機制。

[編者註]

你對日常使用的開發工具和函式庫的可靠性有何看法? Shai-Hulud 2.0 事件表明,「知名軟體包就是安全的」這一假設正在瓦解。特別是那些運作 CI/CD 流水線的人員,必須面對自動化環境中可能發生的不易察覺的入侵風險。

針對這種在安裝前階段發動的攻擊,您的團隊採取了哪些措施?如果是的話,能否請您談談在實際操作中遇到的挑戰和遇到的難題?