top of page

JFrog | Shai-Hulud : NPM 近年最大規模軟體供應鏈攻擊

Updated: Nov 3

ree

前言

短短一週,Shai-Hulud 被下載超過 200 萬次,涉及 20 餘個惡意 OSS 套件,npm生態系統再度面臨重大攻擊。


這已經是繼 NX 套件被入侵、以及其他熱門套件被攻擊之後的又一次大型事件。最早由 Daniel Pereira 報告,指出受攻擊套件為 @ctrl/tinycolor@4.1.1。同日,JFrog 的惡意程式掃描器發現,在 338 個受感染版本中,共有 164 個獨立的惡意套件。特別是金融科技(FinTech)企業(如加密貨幣交易所、銀行、券商等)往往成為主要攻擊目標。


不過,一些採用了自動化治理工具(如 JFrog Curation 與 Xray)的企業,因提前建立了套件過濾與相依掃描流程,得以有效阻擋此次攻擊帶來的風險。這也凸顯了套件治理與安全工具的重要性,例如 JFrog 的 Curation 功能與 Xray,就能在軟體供應鏈中提供即時的風險檢測與過濾,幫助企業強化安全防護。




惡意套件 vs 帶有漏洞的套件:有什麼不同?

在軟體供應鏈安全領域,「惡意套件」與「有漏洞的套件」是兩種常見但是本質不同的風險類型。


  • 惡意套件(Malicious Packages)


    • 定義:旨在傷害使用者或系統的軟體,通常包含惡意程式、間諜軟體、後門等。

    • 目的:可能進行未經授權存取、資料盜取、系統控制等。

    • 舉例偽裝成合法函式庫,但在安裝時開啟後門、注入惡意行為。



  • 帶有漏洞的套件(Vulnerable Packages)


    • 定義:設計或實作本身有缺陷的套件,可能被利用成攻擊媒介。

    • 目的:原本可能無惡意,但因缺陷可能被攻擊者濫用。


了解這兩者的差別,有助於我們更精準地設計防禦機制。



為什麼社群驅動的 OSS 相依成為攻擊手段?

社群型 OSS 被廣泛使用,但其特性也使它成為攻擊者的目標。主要原因包括:


  1. 公開性:開源程式碼公開,攻擊者容易分析、發現弱點。


  2. 複雜的相依關係:一個專案可能依賴多層套件,攻擊者可從間接相依下手。


  3. 開發速度與品質不一:為了快速上線,安全測試可能被壓縮。


  4. 信任關係被濫用:在 OSS 社群中,信任關係可能被利用,將惡意程式隱藏在正常更新中。


  5. 審核機制不足:許多 OSS 專案缺乏嚴格的安全審核流程。


因此,在高度依賴 OSS 的開發生態中,零信任觀念與多層防禦相當重要。



Shai-Hulud 是什麼?

2025 年 9 月 15 日,有工程師發現 npm 庫受到一種自我複製型惡意軟體(類似蠕蟲 worm)的攻擊。該攻擊不同於過去的 npm 入侵模式,而是會自行擴散、複製並攻擊其他套件。


至本文撰寫時,約有 200 個受感染套件被發現,其中包括熱門套件如 @ctrl/tinycolor,甚至與 CrowdStrike 相關的多個倉儲也遭影響。


此惡意程式運作如下:


  1. 竊取認證資料(GitHub token、npm token、SSH 金鑰、雲端平台憑證)


  2. 嘗試將資料外流(例如寫入公開 GitHub 倉儲、webhook 傳送)


  3. 找到有效的 npm token 後,向對應的 maintainer 發布惡意版本,使感染能在體系內蔓延


  4. 在可用的私人倉儲中植入惡意 GitHub Actions 工作流程,以維持長期滲透與竊取


該攻擊可被視為 npm 生態中首批成功的自我增殖型蠕蟲之—其影響力與進展令人警惕。



攻擊機制詳解:Shai-Hulud 的 Data Stealer Payload

該惡意程式通常以 bundle.js 打包散布,偽裝成系統最佳化工具;其實際功能為一套以竊取與擴散為目的的資料竊取器與自我傳播機制。主要行為包括:


  • 蒐集環境資訊:擷取系統資訊、程序環境變數與相依模組清單。


  • 檢查憑證:檢查 GitHub / npm / AWS / GCP / Azure 認證


  • 主動搜尋敏感資料:執行如 TruffleHog 等工具,以自動化方式掃描可能外洩的秘密與憑證。


  • 資料外流:若發現敏感憑證或資料,會將資料多重 Base64 編碼後上傳或寫入公開 GitHub 倉儲,或透過其他通道傳輸出去。

  • 惡意版本發布:在取得有效 npm token 後,嘗試向受害套件發佈惡意版本以擴散感染。


  • 植入持續化機制:在可控倉儲中加入惡意的 GitHub Actions 工作流程(例如 shai-hulud-workflow.yml),以維持長期滲透與持續資料擷取。


此外,研究團隊觀察到至少 8 種變體在野,功能大致相同但在細節上有微調,例如某些版本會隱蔽倉儲為私人模式、或額外嘗試竊取 Azure 認證等。



受影響使用者應採取的行動

如果你的系統或建置流程中曾安裝下列受影響套件,可能已經暴露敏感資訊或被滲透。建議儘速做以下處置:


  1. 旋轉(Revocation / Rotate)相關憑證

    包括 GitHub token、npm token、AWS、GCP、Azure 等憑證


  2. 掃描與清理敏感資訊 使用 TruffleHog 或類似工具,檢查環境中是否存在外洩的憑證,並及時撤銷。


  3. 評估安裝紀錄

    確認是否曾下載或安裝受感染套件,若有,將相關環境視為高風險系統進行處理。


  4. 導入軟體供應鏈安全機制 採用如 JFrog Curation 之類的解決方案,在套件下載與快取前即進行風險過濾,避免惡意或高風險套件進入內部環境。


強化治理的策略並非只能事後補救,而應持續在軟體發佈與相依管理流程中貫穿安全控制。


背後攻擊者與可疑線索

目前尚無足夠證據指認 Shai-Hulud 與之前 NX CLI 入侵攻擊是否同一攻擊者群。雖然工具與 payload 設計有些許相似性,但歸屬仍然未知。


攻擊手法如 GitHub 倉儲資料外流、token 濫用等,確實與此前某些事件有重疊特徵,值得後續觀察。



已知受感染的套件清單(部分)

以下為該篇報導中列出的部分受感染套件版本,僅供參考與風險通報:


ree

由於 JFrog 安全研究團隊仍在追蹤更多新發現的惡意套件,建議持續關注後續更新。



如何用 JFrog 平台強化軟體供應鏈安全

為應對本次 Shai-Hulud 事件,報導中指出有三大策略方向:


  1. 即時治理:阻止惡意套件的下載與使用


  2. 整體相依掃描與管理:針對開發與生產環境進行套件掃描與風險通報


  3. 控制與管理緩存:利用 Artifactory 的遠端倉儲機能,掌控外部套件拉取的快取策略


在這些策略中,JFrog 的解決方案各自扮演關鍵角色:


  • Curation(策選)

    • 可在套件進入組織時進行過濾與分級,僅允許符合安全政策的版本通過

    • 能針對不同版本進行風險管理與阻擋

    • 支持策略化治理與合規性審查


  • Xray

    • 提供即時的脆弱性/惡意程式掃描

    • 可深度解析複雜的依賴樹,揭露隱藏風險

    • 支援警示機制,快速通知團隊進行補救


  • Artifactori 遠端倉儲 / 緩存控制

    • 透過遠端倉儲功能,控制外部資源的快取與下載

    • 可與 Curation 和 Xray 搭配,以確保僅安全資源被納入組織環境


透過上述功能組合,企業可以在供應鏈入口就進行安全把關,減少惡意套件進入內部系統的風險。


結語與展望

這次 Shai-Hulud 事件具有幾個值得特別注意的點:


  • 是少數已知的、具自我複製能力的 npm 惡意程式之一

  • 它將憑證竊取惡意套件發布合併為一體式攻擊

  • 即時的套件治理與信任管控顯得格外重要

  • 商業化的安全工具(如 JFrog 平台)在這類攻擊中可扮演有效的防線


對於 DevOps / DevSecOps 團隊而言,此案再次敲響警鐘:僅靠被動偵測不夠,安全治理必須從源頭 (source) 阻攔惡意套件,並引入策略與自動化機制。




若希望更進一步了解如何利用 JFrog 的 Curation 與 Xray 來強化供應鏈安全,歡迎與戴博斯科技團隊聯繫,我們能協助您從源頭提升軟體供應鏈的防護能力。









Comments


bottom of page