AsyncAPI npm 供應鏈攻擊導致多階段惡意軟體每週下載量超過 2 萬次

最後更新: 07/15/2026
作者: C 源追蹤
  • 2026 年 7 月 14 日,四個 @asyncapi npm 套件透過 CI/CD 管道攻擊遭到入侵,導致出現了五個惡意版本。
  • 該惡意軟體在軟體包導入時執行,而不是在安裝時執行,並從 IPFS 下載複雜的殭屍網路框架。
  • 此酬載包括憑證竊取、AI 工具投毒、蠕蟲式傳播以及使用 HTTP、Nostr、IPFS、BitTorrent、libp2p 和以太坊的多通道 C2。
  • 所有惡意版本都已從 npm 中移除,但組織必須重新產生鎖定檔案、輪換憑證並審核受影響的系統。

AsyncAPI npm 供應鏈攻擊資訊圖

2026年7月14日,一場協同供應鏈攻擊襲擊了AsyncAPI開源生態系統,導致四個廣泛使用的npm包被攻破,這些包每週的總下載量超過2.25萬次。這次攻擊利用了GitHub Actions中可信的發布管道,使得惡意程式碼無需依賴傳統的npm安裝鉤子即可繞過管道。相反,惡意軟體會在開發者導入被攻破的模組時立即激活,這使得它對CI/CD環境和開發者工作站構成了極大的威脅。

包括 StepSecurity、OX Security、Socket、Wiz 和 SafeDep 在內的多家公司的安全研究人員獨立證實了這起事件。攻擊者獲得了兩個獨立的 AsyncAPI GitHub 儲存庫的推播權限(非同步 API/生成器 以及 asyncapi/spec-json-schemas)並使用專案本身的發布工作流程發布具有有效 SLSA 出處證明的軟體包。 沒有 npm 令牌被盜。妥協利用了 GitHub Actions 工作流程設定錯誤 這使得攻擊者能夠使用佔位符 git 身分推送提交(Your Name ).

攻擊時間軸和受影響的軟體包

第一次攻擊擊中了 非同步 API/生成器 UTC時間06:58,倉庫中出現了一次惡意提交。 next 分支觸發了 release-with-changesets.yml 工作流程,發布三個植入木馬的軟體包: @asyncapi/generator@3.3.1, @asyncapi/generator-helpers@1.1.1以及 @asyncapi/generator-components@0.7.1僅僅15分鐘後,攻擊者就轉向了… asyncapi/spec-json-schemas 倉庫,向其中推送一系列提交 master 分支。這導致了另外兩個惡意版本: @asyncapi/specs@6.11.2 以及 @asyncapi/specs@6.11.2-alpha.1.所有五個版本均在 UTC 時間 07:10 至 08:30 之間發布,曝光窗口持續到 UTC 時間 11:18,軟體包最終被取消發布。

這次攻擊尤其陰險之處在於: 惡意程式碼在導入時執行,而不是在安裝時執行。有效載荷直接嵌入到每個軟體包的主 JavaScript 檔案中—無需預先安裝或後安裝腳本。例如,在 @asyncapi/generator滴管位於 apps/generator/lib/templates/config/validator.js當建置或 CI 作業呼叫該程式庫時,混淆的 JavaScript 會產生一個隱藏的子進程,該子進程從 IPFS 下載下一階段。

多階段惡意軟體:瘴氣框架

第二階段,一個名為「加密檔案」的文件 sync.js (約 8.25 MB)是從 ipfs.io/ipfs/QmQobZSp1wRPrpSEQ56qnyq7ecZh5Bg5k1fnjt4SUwwHb9 並儲存到平台特定的目錄(例如, %LOCALAPPDATA%\NodeJS\sync.js 在 Windows 系統上)。使用 HKDF-SHA256 和 AES-256-GCM 解密後,最終有效載荷出現: 3.09 MB 模組化殭屍網路框架 該框架自稱為“Miasma v3”。它捆綁了超過744個模組,並支援六個獨立的命令與控制通道,包括HTTP REST、Nostr中繼、IPFS網關、BitTorrent DHT、libp2p GossipSub,甚至還有以太坊智能合約。這種多通道設計確保即使某些端點被封鎖,攻擊者也能保持通訊。

Miasma惡意軟體攻擊鏈

該惡意軟體的功能遠不止於竊取憑證。根據靜態分析,它包含以下模組: 憑證收集 (瀏覽器密碼、SSH密鑰、npm令牌、AWS憑證、macOS鑰匙圈) AI工具中毒 (目標平台包括 Claude Code、GitHub Copilot 和 Cursor) LAN橫向移動以及 蠕蟲狀繁殖 它支援 npm、PyPI 和 Cargo 註冊表。它還包含一個變形引擎,可以重新混淆每個副本,從而增加檢測難度。值得注意的是,該操作符集 propagate.npm: false 這次部署顯示這是一場有針對性的攻擊活動,而不是大規模的蠕蟲攻擊。

補救措施和長期經驗教訓

所有五個惡意版本都已從 npm 中移除,最新的 dist 標籤現在指向的是乾淨的版本。然而, 曝光視窗期間產生的現有鎖定文件 (UTC 時間 07:10–11:18)可能仍鎖定已洩漏的版本。組織應刪除並重新產生鎖定文件,然後執行新的鎖定程式。 npm install此外,他們還必須檢查隱藏的內容。 NodeJS/sync.js 在所有受影響的系統上刪除該文件,終止任何孤立的子進程,並輪換機器上存在的所有憑證,包括 GitHub 令牌、SSH 密鑰、AWS 憑證和瀏覽器保存的密碼。

安全團隊還應審核建置和持續整合日誌,以發現與 IPFS 閘道、位於85.137.53.71 的C2 伺服器、BitTorrent 引導節點或 Nostr 中繼網域的意外出站連線。這次攻擊凸顯了一個關鍵的盲點:溯源證明 (SLSA) 可以驗證軟體包是否來自授權的工作流程,但並不能保證觸發攻擊的提交是合法的。隨著供應鏈攻擊的演變,監控執行時間行為(而不僅僅是安裝時檢查)變得至關重要。

這次事件再次警醒我們,軟體供應鏈的安全性取決於 CI/CD 管線中最薄弱的環節。攻擊者無需突破 npm 的防禦機制,只需利用專案本身的工具即可。展望未來,各組織應為新軟體包版本設定冷卻期,強制執行 GitHub Actions 的最小權限原則,並使用 Harden-Runner 等執行時間監控工具來偵測異常網路活動。 AsyncAPI 社群已迅速做出反應,但這次事件的影響範圍之廣——每週數百萬次的下載都受到影響——表明,一個被洩露的推送憑證就能在整個生態系統中引發連鎖反應。

相關文章: