AI News HubLIVE
站内改写

大規模NPM供應鏈攻擊波及TanStack、Mistral AI及170個軟件包

2026年5月12日,安全團隊SafeDep披露了一起針對npm和PyPI生態系統的供應鏈攻擊,超過170個軟件包被植入惡意代碼,其中包括TanStack和Mistral AI的熱門庫。攻擊者通過篡改軟件包構建流程,植入依賴下載器並利用Session協議進行憑證竊取。此外,惡意載荷還包含IDE和AI代理投毒機制,能夠自我複製並自動提交惡意配置文件到受害者的倉庫中,形成持續感染循環。

文章情報

工程師中級

要點

  • 攻擊波及TanStack、Mistral AI等170多個軟件包,通過篡改package.json和添加惡意腳本來實現。
  • 惡意載荷使用AES加密和Bun運行時執行,具備模塊化憑證竊取框架,專門針對AWS、HashiCorp Vault、GitHub令牌等。
  • 採用Session協議和Oxen網絡進行數據外傳,具有動態節點路由,難以通過固定域名進行攔截。
  • 攻擊者利用IDE配置文件和GitHub GraphQL API自動提交惡意文件到分支,使得開發者一旦拉取代碼即被感染。

為甚麼重要

這條新聞值得關注,因為攻擊波及TanStack、Mistral AI等170多個軟件包,通過篡改package.json和添加惡意腳本來實現。

技術影響

可能影響模型選型、推理成本、產品能力和評測基準。

2026年5月12日,安全研究團隊SafeDep發佈報告,揭露了一起針對npm和PyPI軟件包生態系統的重大供應鏈攻擊。該攻擊共影響超過170個軟件包,其中包括前端框架TanStack和AI公司Mistral AI的官方包。攻擊者通過多種手段實現惡意代碼注入,不僅竊取憑證,還試圖通過污染開發者環境中的IDE和AI代理設置來擴大攻擊範圍。

攻擊者篡改了軟件包的構建腳本,例如在Mistral AI的包中,他們將原有的構建命令替換為一個預安裝鈎子(preinstall hook),並添加了兩個惡意文件:setup.mjs和router_init.js。setup.mjs負責下載特定平台的Bun運行時,並執行經過高度混淆的router_init.js負載。該負載採用AES加密和字符串混淆技術,使得靜態分析變得困難。值得注意的是,由於攻擊者複用了針對TanStack包的模板,導致Mistral包中的文件命名不一致(實際文件為router_init.js,而setup.mjs中引用的是tanstack_runner.js),這導致了執行錯誤。

而對於TanStack包,攻擊者採用了更為隱蔽的方式。他們利用npm的optionalDependencies字段,引入了一個指向GitHub倉庫中惡意提交的依賴。該依賴在安裝時會觸發prepare腳本,直接執行惡意負載,並且通過exit 1強制腳本失敗以隱藏後續輸出。此外,攻擊者還獲得了TanStack GitHub倉庫的寫權限,表明其GitHub憑證和npm發佈令牌均已被攻陷。

router_init.js負載是一個2.2MB的單行JavaScript文件,內部實現了模塊化的憑證竊取框架。該框架包含多個專門針對不同目標的服務類,例如AWS憑證(通過IMDS端點)、HashiCorp Vault令牌、GitHub Actions令牌以及npm令牌等。負載利用正則表達式匹配並收集各種令牌,並通過嵌入的Session客户端將數據外傳。Session是一個基於Oxen網絡的開源加密通信協議,支持洋葱路由和端到端加密。負載通過連接Session的種子節點獲取服務節點列表,然後通過動態解析的節點將加密消息路由到攻擊者的Session ID。由於路由信息是動態獲取的,傳統的基於固定域名或IP的攔截策略難以生效。

除了憑證竊取,該負載還具有自我複製和傳播的能力。它定義了一系列文件映射,包括VS Code和Claude Code的配置文件,以及一個自我副本。當負載在受害者的CI/CD環境(如GitHub Actions)中運行時,它會讀取環境變量GITHUB_REPOSITORY,並利用GitHub的GraphQL API查詢當前倉庫的分支。然後,它會過濾掉主分支(main、master等),選擇功能分支作為目標,並通過createCommitOnBranch變異向這些分支提交惡意配置文件。這些配置文件會配置IDE或AI代理在項目加載時執行setup.mjs,從而形成完整的感染循環:任何開發者克隆或拉取被污染的分支後,打開項目便會觸發負載,進而竊取其憑證並繼續傳播。

SafeDep團隊在報告發布後已向npm和GitHub安全團隊報告了相關情況,目前惡意版本已被下架。然而,由於攻擊者使用了Session協議和GitHub的內置功能,這種攻擊的追蹤和清除難度較高。建議開發者立即檢查項目依賴中@tanstack/router版本是否在1.169.5以及@mistralai/mistral版本是否在0.0.297範圍內,並輪換所有可能暴露的令牌。此外,建議加強GitHub賬户的多因素認證,並定期審計GitHub倉庫的提交記錄。