Shai hulud - npm 包 - 供應鏈攻擊

Shai-Hulud:npm 包蠕蟲詳解

TL博士

2025年9月14日,研究人員發現 夏胡魯德一種隱藏在體內的自我複製蠕蟲 npm 包將例行相依性更新變成全面更新 供應鏈攻擊首次發現於 @ctrl/tinycolor 由 Daniel dos Santos Pereira 開發的 Shai-Hulud 軟體包會竊取金鑰,透過 GitHub 程式碼庫和工作流程將其洩露,並使用竊取的憑證在註冊表中重新發布自身。短短幾天內,受感染的軟體包數量就從幾十個激增至幾百個,證實了這一點。 沙伊胡魯德 它不僅僅是另一個木馬程序,而是一種蠕蟲病毒,旨在自動在 npm 生態系統中傳播。

影響: 任何開發者或 CI 運行人員安裝公共 npm 套件都存在風險。

立即採取的行動: 阻止已知版本,切換到僅使用 lockfile 進行安裝,輪換 npm 和 GitHub 令牌,審核工作流程,並監控入侵指標 (IoC)。

發生什麼事?

npm 包中的 Shai-Hulud 供應鏈攻擊 這是近年來最具破壞性的事件之一。與孤立的木馬程式不同,這種蠕蟲混合了… 憑證竊取、自動化資料外洩和自我複製因此,感染時間從數週縮短到僅數小時。

對於 DevOps 團隊來說,教訓很明確:如果每次安裝都能執行程式碼,那麼每次依賴項更新都可能成為安全漏洞。

可能的初始向量和目標憑證

早期分析 這表明攻擊很可能始於 憑證被盜例如,網路釣魚活動會偽裝成 npm。 login 或者,多因素身份驗證 (MFA) 提示可能已捕獲了開發者令牌。一旦攻擊者獲得第一個立足點,蠕蟲病毒就會透過嵌入 npm 套件並從中竊取更多金鑰而傳播:

  • npm 設定檔 点讚 .npmrc通常包含發布令牌。
  • 環境變量 以及與 GitHub PAT 的配置 CI/CD 秘密。
  • 雲端元資料端點 (AWS、GCP、Azure)提供用於橫向遷移的短期憑證。

因此,憑證竊取成為了其傳播的跳板。憑藉有效的 npm 令牌和 GitHub 金鑰,Shai-Hulud 無需額外的人工幹預即可在多個軟體包和程式碼庫中自我複製。

Shai-Hulud供應鏈攻擊事件對高階主管的影響

Shai-Hulud至今仍活躍。這種蠕蟲病毒加快了病毒傳播的速度。以前木馬程序需要數週才能完成的工作,現在只需幾個小時就能完成。因此, 病毒傳播速度更快,更難控制。 它透過以下方式推進:

  • 竊取 npm 發布令牌和 GitHub 金鑰。
  • 重新發佈到其他 npm 套件中。
  • 新增惡意 GitHub Actions 工作流程以實現持久化。

受影響族群:

任何安裝公共 npm 套件的團隊都面臨風險。此外,快取了 npm 或 GitHub 令牌的開發者也面臨高風險。使用廣泛的金鑰的 CI 運行器也容易受到攻擊。

商業風險

業務影響迅速成長。被盜令牌可能導致帳戶被盜、軟體包被劫持,甚至雲端濫用。此外,GitHub 工作流程中的持久性也使得清理工作更加困難。因此各團隊必須將 Shai-Hulud 事件視為正在發生的事件,而不是已經結束的事件。

Shai-Hulud供應鏈攻擊在npm包中的工作原理

攻擊者的目標和動機

此行銷活動主要針對以下三個面向進行最佳化:

  • 首要目標是 大規模竊取憑證 從開發者筆記型電腦和持續整合運行器中竊取資訊。這包括 npm 發布令牌、GitHub 令牌和雲端憑證。事實上,多項分析證實了系統性的秘密資訊竊取行為,例如執行 TruffleHog 並查詢雲端元資料端點。
  • 第二個目標是 自動傳播 透過濫用受感染維護者的發布權限。結果,一個立足點迅速擴展到多個立足點,因為無需額外人為操作,其他軟體包的新感染版本就會出現。
  • 第三個目標是 持續可靠地滲漏 透過 GitHub 基礎設施。攻擊者創建了一個名為「Shai-Hulud」的公共倉庫,該倉庫包含雙重 base64 編碼。 data.json此外,他們還植入了一個序列化工作流程。 ${{ toJSON(secrets) }} 並將其發佈到靜態 webhook。

可能的收益包括長期存取註冊表和原始碼、快速橫向遷移到雲端帳戶,以及進一步利用供應鏈。公開報告顯示,私有程式碼庫已轉為公用程式碼庫。 “-遷移” 後綴可以增加資料曝光度和動量。

Shai-Hulud酬載內部結構: bundle.js 在 npm 套件中

Shai-Hulud 飛船作為 體積龐大,經過 Webpack 打包和高度壓縮 JavaScript文件 (bundle.js(約 3–3.7 MB)安裝後 鉤子 的package.json。 最後, 每次安裝都會自動觸發有效載荷。這種設計隱藏了標識符,壓縮了控制流,並將所有邏輯推入在安裝期間執行的單一工件中。分析人員持續證實了 Webpack 打包、檔案大小異常以及安裝時執行等問題。

你會在樣本中看到混淆和反分析的特徵:

  • 最小化模組圖 採用數位模組 ID、稀疏註解和扁平化控制流。, 這種結構使得人工審核極為困難。
  • 字串隱藏 透過 base64 層和構造輔助函數。例如, 重複的 base64 編碼和解碼通常出現在資料外洩程式中。
  • 動態調度 通過 評估-風格模式和產生的函數體,因此能夠使程式碼在運行時改變行為。
  • 作業系統過濾 優先選擇 Linux 和 macOS 系統執行,尤其是在 CI 運行器和開發人員筆記型電腦上。

從功能角度來看,該軟體包是模組化的。 文件描述了用於作業系統發現、檔案系統和 Git 金鑰掃描、雲端 SDK 存取、GitHub API 操作以及用於編輯維護者擁有的其他軟體包的傳播引擎的模組。事實上,StepSecurity 和 ReversingLabs 都重點介紹了一個可以自動更新帶有惡意鉤子的軟體包的功能。

Shai-Hulud 中的安裝時執行:npm 套件如何觸發蠕蟲

攻擊始於 postinstall 運行 node bundle.js. 此時,腳本初始化並在記憶體中解包工作狀態,為蠕蟲的全面運作做好準備。

發現與收穫

  • 此有效載荷會轉儲 process.env 文件,並掃描本地文件以查找高熵密鑰和令牌前綴。此外,它還會運行 TruffleHog 來擴展覆蓋範圍。
  • 它查詢雲端元資料端點以收集短期憑證。 例如, 呼籲 169.254.169.254 在 AWS 上或 metadata.google.internal GCP 上常出現在受感染的宿主身上。
  • 因此, 找到的任何憑證都可以立即用於發布新的 npm 套件或推送 GitHub 工作流程。

滲出

  • 蠕蟲創建了一個名為「.」的新GitHub倉庫 夏胡魯德 並寫入一個雙重 base64 編碼的資料。 data.json 包括平台詳情、環境轉儲和密鑰。可以看出,如果防禦者知道從哪裡入手,這種異常行為很容易被發現。
  • 它還會部署一個 GitHub Actions 工作流程,通常位於一個名為 `<branch_name>` 的分支上。 沙胡魯德,該序列化 ${{ toJSON(secrets) }} 並將資料發佈到靜態 webhook。此外,此工作流程會持續,直到有人主動將其刪除。

傳播

  • 利用任何已發現的 npm 令牌,該攻擊負載會列舉所有由受感染的維護者擁有的軟體包。然後,它會取得每個 tar 包,注入 bundle.js 檔案和一個 postinstall 條目,並重新發布該軟體包。
  • 因此,幾個小時內可能會出現數十個受感染的包裹,從而倍增整個生態系統的爆炸半徑。

持續性和暴露

  • 該蠕蟲會維持惡意工作流程的運行,並且在某些情況下,也會將私有倉庫變成公共倉庫。 “-遷移” 後綴。總而言之,這確保了攻擊者能夠保持立足點並最大限度地洩露資料。

關鍵檢測筆記
這種不尋常的用法 ${{ toJSON(secrets) }} 在 Actions 工作流程中很少見。 因此, 狩獵隊伍應將其視為高訊號指示器。

你應該尋找的經過最佳化的工作流程模式

這種不尋常的用法 JSON(秘密) 在本事件中,「行動」是一個重要的訊號指標。

高階傳播偽代碼(安全、描述性強)

分析師觀察到這種循環大規模發生,這解釋了受感染包裹數量從數十個迅速增加到數百個的原因。

為什麼說這是軟體包生態系中的蠕蟲

蠕蟲是一種無需人工幹預即可自行傳播的惡意軟體。在作業系統中,蠕蟲通常利用網路漏洞從一台機器傳播到另一台機器。相比之下,Shai-Hulud 則在 npm 註冊表內部運作。它的有效傳播路徑是透過… 憑證重用.

該蠕蟲利用竊取的 npm 發布令牌進行攻擊。一旦獲得有效的憑證,它就會將感染的版本重新發佈到同一維護者擁有的其他軟體包下。隨後,這些軟體包會被不知情的開發者或 CI 運行器安裝,如此循環往復。

因此,包括以下在內的安全分析師 黑暗閱讀將沙伊-胡魯德歸類為 自我複製蠕蟲 這與簡單的木馬程式或網域搶注事件截然不同。差別在於:木馬程式通常只感染單一宿主,而蠕蟲病毒則會自動將其影響擴展到整個生態系統。

“工作原理”速查表

概括沙伊-胡魯德的生命週期,以下是一個…cis主要步驟分解:

  • 一個包裹 安裝後 已安裝,並且 bundle.js 執行。
  • 有效載荷會轉儲環境變數、掃描檔案和 Git 歷史記錄並運行 松露豬並查詢雲端元資料服務。因此,找到的任何秘密都將立即派上用場。
  • 資料外洩有兩種方式:首先,透過建立一個名為「公共倉庫」的倉庫。 夏胡魯德 採用雙重 Base64 編碼。 data.json其次,透過植入 GitHub Actions 工作流程來發佈內容。 ${{ toJSON(secrets) }} 發送到 webhook。
  • 利用竊取的 npm 令牌,蠕蟲會將受感染維護者擁有的所有其他軟體套件重新發布,並植入相同的惡意鉤子。這樣一來,感染便會迅速擴散。
  • 最後,攻擊者掌握了更多秘密訊息,更多資料包可供傳播,而且 堅持 在 GitHub 帳戶和儲存庫內部。

如何實際避免此類攻擊

Shai-Hulud 是一個警鐘。竊取代幣並自我複製的蠕蟲病毒並非未來風險,它已經存在。 npm 包生態系統 今天。為了防止此類情況發生 供應鏈攻擊團隊需要可程式化、自動化且可直接強制執行的控制措施。 CI/CD pipeline這些防禦措施您現在就可以實施。 Xygeni.

阻止邪惡文物進入大門

您應該在 npm 套件和 tar 套件到達開發人員或 CI 作業之前對其進行掃描。過大 bundle.js 文件,可疑的安裝後文件 hooks混淆標記和代碼混淆標記都是早期預警訊號。此外,強制執行冷卻期和版本鎖定也至關重要。 pipelines 防止未經審核的新版本被自動消費。

硬化 CI/CD 默認情況下,

Guardrails in CI/CD 至關重要。它們會拒絕引入新腳本或二進位檔案的合併或安裝。同時,它們會阻止序列化金鑰或嘗試外部發布的工作流程。團隊還應要求僅使用鎖定檔案進行安裝(npm ci在所有 pipeline這樣可以確保依賴關係集的可復現性和安全性。

減小代幣爆炸半徑

密鑰絕不能成為單點故障。持續掃描代碼、配置和 pipeline 輸出為 洩漏的憑證令牌的作用範圍應嚴格限定,有效期應短,並在偵測到外洩時自動輪換。通常情況下,應將任何在執行過可疑安裝後操作的主機上使用的令牌視為已洩漏。

及早觀察蠕蟲行為

異常檢測 這一點至關重要。例如,npm 發布事件的突然激增、無故出現的新工作流程,或充斥著奇怪編碼文件的全新公共倉庫,都可能是蠕蟲活動的徵兆。因此,團隊應迅速發出警報,並將出現這些警告信號的任何維護者或運行者隔離。

快速修復,無需破壞建置。

速度與安全必須兼顧。自動化 pull requests 可以將受感染的 npm 套件替換為經過驗證的版本。此外, 可達性 以及 可利用性 分析確保升級操作保持在最小限度且穩定。最後,一旦確認暴露,就使用乾淨的鏡像重建受影響的 CI 運行程序,以防止攻擊進一步擴散。

妥協指標 (IoC)

分析沙伊-胡魯德組合時,各隊應該同時關注這兩方面。 靜態 IoC 在文件中和 行為 IoCs in pipeline這些訊號共同作用,有助於及早發現感染,並在蠕蟲進一步擴散之前做出反應。

靜態 IoC

以下 SHA-256 摘要與觀察到的結果相符 bundle.js 樣本:

  • 46faab8ab153fae6e80e7cca38eab363075bb524edd79e42269217a083628f09
  • 81d2a004a1bca6ef87a1caf7d0e0b355ad1764238e40ff6d1b1cb77ad4f595c3
  • dc67467a39b70d1cd4c1f7f7a459b35058163592f4a9e8fb4dffcbba98ef210c

此外,也要注意以下這些反覆出現的模式:

  • A bundle.js 在軟體包根目錄。
  • "postinstall": "node bundle.js"package.json.
  • 名為 夏胡魯德.
  • 包含 GitHub 工作流程 ${{ toJSON(secrets) }}.

行為 IoCs

除了文件簽名之外,蠕蟲活動也會透過其行為表現出來。例如:

  • 一位維護者突然發布了一系列 npm 發布事件。
  • 將資料推送至外部端點的新工作流程。
  • 由 CI 運行器觸發的出站 POST 請求。
  • 最近建立的包含編碼資料區塊的公共倉庫。

快速狩獵

結論:來自沙伊·胡魯德的教訓

沙伊-胡魯德供應鏈攻擊 npm 套件的出現表明,如今的軟體供應鍊是多麼脆弱。這種蠕蟲病毒不僅僅是添加惡意程式碼,它還會竊取令牌、發送數據,然後自動重新發布自身。正因如此,攻擊在短短幾小時內就傳播開來,而不是幾週。

對於開發人員和DevOps團隊來說,教訓顯而易見:

  • 每次安裝都會運行程式碼。 即使是普通的 npm 套件也可能隱藏安裝後蠕蟲病毒。
  • 每個代幣都具有很高的價值。 一旦被盜,就可以用來進一步傳播惡意軟體。
  • 祇限 pipeline 需要核查。 沒有 guardrails 在依賴關係、工作流程和金鑰方面,一個小小的妥協就可能迅速影響生產環境。

因此,要阻止類似 Shai-Hulud 的攻擊,需要自動化且易於執行的控制措施。團隊應在安裝前掃描 npm 包,使用 lockfile 構建,檢測異常發布活動,並縮短令牌的有效期。這些步驟不再是可選項,而是現代系統彈性的基礎。 pipelines.

在 Xygeni,我們認為 Shai-Hulud 供應鏈攻擊是對整個開源生態系統的警告。永續的未來發展方向是將供應鏈安全直接融入開發流程,在程式碼、npm 套件等環節進行安全保障。 pipeline連接。

以下是 Shai-Hulud 中報告的受影響的 npm 套件及其版本的完整清單。請使用此清單檢查您的鎖定檔案、註冊表和 CI。 pipeline曝光度。

受感染軟體包列表

📦 受損 npm 套件預覽

軟件包名稱 版本 發布日期
簡化的 json 規則引擎0.2.12025-09-14T17:58:51.203Z
飛行員0.8.82025-09-14T18:35:07.600Z
mcp知識圖1.2.12025-09-14T18:35:09.494Z
空軍司令0.3.12025-09-14T18:35:09.521Z
躍遷門0.0.22025-09-14T18:35:09.651Z
tvi-cli0.1.52025-09-14T18:35:10.996Z
@thangved/callback-window1.1.42025-09-14T20:31:38.479Z
@tnf-dev/api1.0.82025-09-14T20:31:39.547Z
@tnf-dev/js1.0.82025-09-14T20:31:41.251Z
@tnf-dev/mui1.0.82025-09-14T20:31:41.259Z
@tnf-dev/core1.0.82025-09-14T20:31:42.728Z
@teselagen/react-table6.10.202025-09-14T20:37:08.597Z
@hestjs/demo0.1.22025-09-14T20:45:52.348Z
@nexe/eslint-config0.1.12025-09-14T20:45:53.625Z
@hestjs/eslint-config0.1.22025-09-14T20:45:55.044Z
@nexe/config-manager0.1.12025-09-14T20:45:55.066Z
@nexe/logger0.1.32025-09-14T20:45:55.170Z
@hestjs/logger0.1.62025-09-14T20:45:55.197Z
@hestjs/驗證0.1.62025-09-14T20:45:55.595Z
@hestjs/core0.2.12025-09-14T20:45:55.888Z
➡️ 查看所有受影響包裹的完整列表
軟件包名稱 版本 發布日期
簡化的 json 規則引擎0.2.12025-09-14T17:58:51.203Z
飛行員0.8.82025-09-14T18:35:07.600Z
mcp知識圖1.2.12025-09-14T18:35:09.494Z
空軍司令0.3.12025-09-14T18:35:09.521Z
躍遷門0.0.22025-09-14T18:35:09.651Z
tvi-cli0.1.52025-09-14T18:35:10.996Z
@thangved/callback-window1.1.42025-09-14T20:31:38.479Z
@tnf-dev/api1.0.82025-09-14T20:31:39.547Z
@tnf-dev/js1.0.82025-09-14T20:31:41.251Z
@tnf-dev/mui1.0.82025-09-14T20:31:41.259Z
@tnf-dev/core1.0.82025-09-14T20:31:42.728Z
@teselagen/react-table6.10.202025-09-14T20:37:08.597Z
@hestjs/demo0.1.22025-09-14T20:45:52.348Z
@nexe/eslint-config0.1.12025-09-14T20:45:53.625Z
@hestjs/eslint-config0.1.22025-09-14T20:45:55.044Z
@nexe/config-manager0.1.12025-09-14T20:45:55.066Z
@nexe/logger0.1.32025-09-14T20:45:55.170Z
@hestjs/logger0.1.62025-09-14T20:45:55.197Z
@hestjs/驗證0.1.62025-09-14T20:45:55.595Z
@hestjs/core0.2.12025-09-14T20:45:55.888Z
@hestjs/cqrs0.1.62025-09-14T20:45:55.966Z
@hestjs/scalar0.1.72025-09-14T20:45:56.386Z
ng2文件上傳7.0.32025-09-15T02:44:29.555Z
電容器通知處理程序0.0.22025-09-15T04:54:48.431Z
電容插件1.0.22025-09-15T04:54:48.501Z
電容器插件健康應用0.0.22025-09-15T04:54:48.704Z
電容器安卓權限0.0.42025-09-15T04:54:48.753Z
voip-callkit1.0.22025-09-15T04:54:49.223Z
電容器插件-ihealth1.1.82025-09-15T04:55:08.113Z
@art-ws/common2.0.222025-09-15T05:21:15.411Z
@art-ws/config-eslint2.0.42025-09-15T05:21:17.199Z
ngx-ws1.1.52025-09-15T05:21:17.514Z
@art-ws/slf2.0.152025-09-15T05:21:17.524Z
@art-ws/http-server2.0.212025-09-15T05:21:17.745Z
pm2-gelf-json1.0.42025-09-15T05:21:18.413Z
@art-ws/di2.0.282025-09-15T05:21:18.488Z
@art-ws/di-node2.0.132025-09-15T05:21:18.849Z
@art-ws/config-ts2.0.72025-09-15T05:21:19.408Z
@art-ws/db-context2.0.212025-09-15T05:21:19.814Z
@art-ws/openapi0.1.92025-09-15T05:21:19.969Z
@art-ws/web-app1.0.32025-09-15T05:21:20.383Z
@art-ws/ssl-info1.0.92025-09-15T05:21:20.927Z
sca-tools-software-composition-analysis-tools
優先處理、補救並保護您的軟體風險
註冊免費帳號。
不需要信用卡。

確保您的軟體開發和交付安全

使用 Xygeni 產品套件