AsyncAPI 五個 npm 毒版中招點算?由 lockfile 查到全面換憑證
Tech News

AsyncAPI 五個 npm 毒版中招點算?由 lockfile 查到全面換憑證

圖片:via iThome — https://www.ithome.com.tw/news/177815
TechLab 編輯部(譯)·

惡意碼等到 import 先郁手,停用 install script 都擋唔住

7 月 14 日,AsyncAPI 有四個 npm 套件俾人加咗惡意碼,再由項目本身嘅 GitHub Actions 發布。毒版只喺 npm 活躍咗約四個鐘,不過 @asyncapi/specs 可以經其他工具間接裝入項目,淨係靠記憶去諗有冇用過 AsyncAPI,根本查唔清實際影響。今次最麻煩係惡意碼等到 importrequire 先執行,npm install --ignore-scripts 都擋唔住。

先對清楚五個有問題版本

受影響清單係 @asyncapi/[email protected]@asyncapi/[email protected]@asyncapi/[email protected],同 @asyncapi/[email protected]6.11.2-alpha.1。AsyncAPI 官方話呢五個版本已經由 npm 清走;事故時列出嘅上一個安全版本,就分別係 3.3.01.1.00.7.06.11.1。團隊亦要查內部 registry、npm/Yarn cache、container image 同長期保存嘅 build artifact,因為公開 registry 清走套件,唔會順手清埋公司內部副本。

第一輪可以用 npm ls @asyncapi/specs @asyncapi/generator @asyncapi/generator-helpers @asyncapi/generator-components --all 睇現有 dependency tree,再喺 package-lock.jsonnpm-shrinkwrap.jsonyarn.lockpnpm-lock.yaml 搜版本號。lockfile 出現毒版只證明套件曾經俾 dependency resolver 揀中,未足以證明惡意碼已經行過。 不過呢個結果已經值得保留相關 cache、runner 同紀錄,唔好急住淨係刪 node_modules 當處理完。

由 GitHub Actions 遭入侵、毒版套件發布,到 import 時下載 payload 嘅完整攻擊鏈圖

圖片:Microsoft Security

CI 有跑 build、test 或文件生成,就要再查深一層

今次套件冇用 preinstallinstallpostinstall hook。Microsoft、Socket 同 JFrog 嘅分析都指出,loader 藏喺正常匯出路徑,程式、測試、CLI、文件生成器或 build script 載入模組嗰刻先開一個隱藏 Node.js process,再由 IPFS 下載 sync.js。換句話講,CI log 淨係見到 npm ci 成功,未代表 payload 已經啟動;同一個 job 跟住有冇跑 generator、測試、build 或啟動 app,先係判斷重點。

要逐個查 7 月 14 日起曾經解出上述版本嘅 GitHub Actions run、self-hosted runner、開發機同 container build。可疑痕跡包括背景 node -e process、指向 IPFS 嘅連線、85.137.53[.]71 嘅 8080/8081/8091 連線,同藏喺假 NodeJS 目錄入面嘅 sync.js。Linux 亦可查 ~/.config/systemd/user/miasma-monitor.service,macOS 查 shell 設定檔有冇 ### Node Auto-Update Script ###,Windows 就查使用者 Run key 入面嘅 miasma-monitor

sync.js 入面 Miasma 執行框架已啟用同停用功能嘅分析圖

圖片:Microsoft Security

真係載入過,就當部機已經失守處理

一旦 log、endpoint telemetry 或網絡紀錄顯示受污染模組行過,先隔離主機同保留證據,再由可信環境重建 runner、開發機同相關 image。清走毒版、重建 lockfile 同清 cache 只係移除入口;payload 有持續存取同遠端 shell,刪除依賴未必會停低已經行緊嘅後門。若果 CI 紀錄太短、runner 已回收,根本判斷唔到有冇 import 過,保守做法都係按已執行處理。

跟住要喺乾淨主機撤銷及更換嗰個環境接觸到嘅 npm token、GitHub PAT/App token、SSH key、AWS 同其他雲端憑證、簽署金鑰、部署 secret、container registry token 同 CI secret。研究人員發現今次樣本內置嘅自動收集功能處於停用狀態,但遠端 shell 本身仍可讀取受感染帳戶有權見到嘅資料,所以唔可以據此假設憑證安全。亦要翻查中招時段之後推出嘅 package、image 同部署,確認攻擊者冇借 CI 身份改過下游產物。

合法 provenance 都可以簽住惡意碼

事故源頭方面,AsyncAPI 官方交代,攻擊者利用配置危險嘅 pull_request_target workflow 處理外來 PR 程式碼,之後以高權限 asyncapi-bot 憑證直接推送惡意 commit;正常 OIDC 發布流程再替毒版產生有效 provenance。Microsoft 對公開紀錄嘅判斷較審慎:時間線證明高權限 workflow 先運行、bot 身份其後推 code,但公開 log 未能單獨證實憑證點樣外洩。可以肯定嘅係,provenance 證明產物由指定 workflow 建出,唔會替 source commit 做安全審批。

iThome 報道提到 payload 內有 M-RED-TEAM v6.4 標記,同 Miasma 共用部分命名及設計。各間研究機構嘅講法仍有差異:JFrog 稱佢為 Miasma v3,AsyncAPI 官方就話同較廣泛嘅 Miasma 家族只有有限關聯。公開工具同字串可以俾其他攻擊者重用,現階段未夠證據把事故穩陣歸到某個團體。開發團隊眼前要做嘅,仍然係查清五個版本有冇真係載入過,再按結果重建環境同換走可能曝光嘅憑證。


參考來源

本文根據原文及公開資料整理;資料有出入時,以原文及官方資料為準。

分享:WhatsAppThreadsTelegramFacebook