掃描下載 Gate App
qrCode
更多下載方式
今天不再提醒

NPM 投毒分析 — Shai-Hulud 攻擊重現

作者:Joker & Ccj

背景

近日,NPM 社區再次爆發大規模 NPM 包投毒事件,本次事件與 2025 年 9 月的 Shai-Hulud 攻擊事件高度相關,本次的 NPM 包中的惡意代碼竊取開發者密鑰和 API 密鑰以及環境變量等敏感信息,利用密鑰創建公開倉庫並上傳這些竊取的敏感信息。

慢霧(SlowMist) 自主研發的 Web3 威脅情報與動態安全監控工具 MistEye 第一時間響應,迅速推送相關威脅情報,爲客戶提供關鍵的安全保障。

同時,後臺會在第一時間保存惡意樣本,並計算其對應的 SHA-256 等特徵值。

分析過程

以 @asyncapi/php-template@0.1.1 包爲例,在對比舊版本 @asyncapi/php-template@0.1.0 時可以發現,0.1.1 版本比 0.1.1 版本新增了兩個 js 文件,爲 setup_bun.js 和經過混淆的 bun_environment.js 文件。

在 package.json 中新增了 preinstall 腳本,使得在依賴安裝之前會自動執行 setup_bun.js。

在 setup_bun.js 中,首先會去檢查系統是否已經安裝了 Bun,如果未安裝,會自動從官方下載並安裝 Bun,並且正確設置環境變量以便找到 Bun 可執行文件。

最後使用 bun 執行 bun_environment.js 文件,該 bun_environment.js 是一個經過高度混淆的惡意文件。

經過將惡意腳本的部分代碼反混淆後,可知 aL0() 是整個惡意腳本的主入口函數,大概的可以看出此惡意腳本進行了敏感信息的竊取,會先對運行環境進行檢查是否存在 NPM 或 GitHub 等憑據,若檢測到這些憑據,它會利用 NPM 憑據進行供應鏈傳播,並且所有收集到的系統信息和敏感數據最終會被打包並上傳到攻擊者控制的 GitHub 倉庫,用於後續利用。

憑據竊取

AWS:該惡意腳本實現 runSecrets() 和 listAndRetrieveAllSecrets() 方法,runSecrets() 方法會遍歷所有能找到的雲訪問憑據以及所有可能的區域,最大化掃描範圍;而 listAndRetrieveAllSecrets() 則在指定憑據與區域內進行“深度挖掘”,遍歷出所有 Secret,並獲取其最新明文內容。兩者配合後,攻擊者能夠將受害者 AWS 帳號中可訪問的所有 SecretString 和 SecretBinary 一次性全部導出。

而 enumerateValidCredentials() 方法主要用來全面搜集所有能用的雲服務密鑰。它會從環境變量、配置文件、CLI 登入等各種來源逐一嘗試,凡是能成功驗證的憑據都會被記錄下來,供後續竊取雲端機密時使用。

GCP:該惡意腳本中實現的另一個 listAndRetrieveAllSecrets() 方法主要是針對 GCP 模塊,它會先根據指定的 Project ID 列出該 GCP 項目下所有的 Secret,然後直接定位每個 Secret 的最新版本,並調用 accessSecretVersion 讀取其明文內容。最終將所有獲取到的機密(如 API Key、數據庫密碼等)逐一收集起來。

Azure:該惡意腳本中實現的另一個 listAndRetrieveAllSecrets() 方法主要專門針對 Azure 模塊。它會先通過 Azure Resource Manager 掃描整個訂閱,找出所有 Key Vault;隨後使用獲得的憑據逐一連接每個 Vault;最後枚舉其中的所有 Secrets,並調用 getSecret 獲取每個機密的明文值。

在竊取敏感信息的實現中,還使用合法的安全工具來攻擊受害者。在 extractAndInstall() 方法中,解壓並提取出 TruffleHog 的二進制文件,TruffleHog 本是用於在代碼庫中檢測和驗證泄漏的機密信息,如 API 密鑰和憑證,則被攻擊者使用來對受害者的整個文件系統進行掃描。

NPM 供應鏈傳播

該惡意腳本實現了個 updatePackage() 函數用於進行 NPM 供應鏈傳播。首先使用竊取的 NPM Token,下載受害者擁有發布權限的合法 NPM 包的原始碼,然後修改 package.json 文件,在 scripts 字段中插入惡意的 preinstall 腳本命令。同時將惡意腳本放入包中,自動將包的版本號加 1,以觸發用戶的自動更新,將帶有惡意腳本的 NPM 包推送到 NPM 官方倉庫中。

後門與 C2

在竊取完信息後,將利用竊取的 GitHub Token 在其帳號下創建一個隨機名稱的倉庫,並獲取註冊令牌,將受害者的電腦僞裝成該倉庫的自托管 GitHub Actions Runner。隨後,攻擊者在倉庫中植入惡意工作流,使得任何被觸發的 Actions 任務都會在受害者機器上執行,從而實現遠程代碼執行。

並把這些竊取的信息經過雙重 base64 加密上傳到創建的倉庫裏,這些創建的倉庫的描述都是“Sha1-Hulud: The Second Coming.”。

經過解密後可以看到用戶泄漏的敏感數據。

總結

本次的 NPM 倉庫投毒結合了蠕蟲和自托管運行程序的長期持久性且利用了 TruffleHog 進行攻擊。慢霧安全團隊建議開發者在構建和發布新迭代時,應採用依賴包版本鎖定策略。若依賴包存在必要的安全或功能更新,應通過內部嚴格的安全審計流程進行更新,並同步更新鎖定版本,避免盲目更新引入新的風險。

查看原文
此頁面可能包含第三方內容,僅供參考(非陳述或保證),不應被視為 Gate 認可其觀點表述,也不得被視為財務或專業建議。詳見聲明
  • 讚賞
  • 留言
  • 轉發
  • 分享
留言
0/400
暫無留言
交易,隨時隨地
qrCode
掃碼下載 Gate App
社群列表
繁體中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)