ChainDrop 攻陷逾 400 個 npm 套件:中招後先隔離,唔好即刻換 token
Tech News

ChainDrop 攻陷逾 400 個 npm 套件:中招後先隔離,唔好即刻換 token

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

Keyv 只係起點,開發電腦同 CI runner 都要查

Node.js 團隊今次要快手查清楚依賴樹。iThome 報道,熱門快取套件 Keyv 嘅維護者帳戶出事後,惡意版本經 npm 擴散;Microsoft Threat Intelligence 亦確認,ChainDrop 已牽連超過 400 個套件。佢會偷開發環境入面嘅憑證,再借受害者本身嘅發布權限製造下一批有毒版本,幾個鐘已經由單一維護者燒到多個互不相干嘅 publisher。

npm install 未完,惡意程式已經跑緊

受污染套件會喺 package.json 加入 preinstall,呼叫 node setup.mjs。呢個 loader 再準備 Bun runtime,執行經混淆嘅 Math_Symbol.js 載荷。關鍵係 preinstall 喺安裝完成、測試同一般應用程式檢查之前已經會跑;套件本身之後仲可以照常運作,所以一次成功嘅 npm install 都唔代表環境冇事。

ChainDrop 跟住會判斷自己身處咩環境。喺一般開發電腦,佢會另開背景程序,等安裝程序完咗仍然繼續活動;喺 CI/CD runner,佢就留喺現有 job 入面,趁機接觸 workflow secret、runner token 同 OpenID Connect 發布權限。Hosted runner 雖然個 job 跑完就會棄用,但憑證、build artifact 同共享 cache 可能一早已經流出去;調查時唔可以淨係追嗰部 runner。

ChainDrop npm 供應鏈攻擊影響範圍同惡意版本數量示意圖

圖片:StepSecurity

偷完憑證,再借你個名發布下一輪

Microsoft 分析指,載荷會翻環境變數、設定檔、shell history、SSH key、GitHub Actions runner 記憶體同各款 CLI 登入資料。搵到 token 後,佢仲會主動登入 npm、GitHub、AWS、Kubernetes 同 HashiCorp Vault,確認權限兼讀取更多資源。資料壓縮同加密後,會送去攻擊者控制嘅 HTTPS 端點;如果呢條路唔通,就會改經 GitHub repository 傳走。

如果偷到有寫入權限嘅 npm token,ChainDrop 會下載受害者有權發布嘅套件、塞入 loader 同載荷、加一個 patch 版本,再用受害者身份推上 registry。部分版本更由真正 GitHub Actions workflow 發布,連 provenance attestation 都有效。呢件事拆穿咗一個常見盲點:provenance 可以證明檔案由指定 workflow 整出嚟,但 workflow、帳戶或者入面嘅 commit 一早俾人控制,個簽名一樣可以係真。

Claude 同 VS Code 設定都變成翻生位

偷到 GitHub 權限後,載荷亦會嘗試改動 repository 分支,加入 .claude/settings.json.claude/setup.mjs.vscode/tasks.json.vscode/setup.mjs。開發者之後用 Claude Code 開 session,或者信任及打開 VS Code workspace,惡意程式就有另一條執行路徑。Microsoft 仲搵到一個條件式後備流程會裝 token monitor,偵測 token 撤銷後可觸發破壞性處理,所以見到相關痕跡時,先隔離主機同保存證據,唔好喺可疑電腦上急住換 token

444 個套件係調查快照,Keyv 唔係全線中招

StepSecurity 截至 8 月 4 日 18:10 UTC 嘅調查快照,記錄到 444 個套件、2,212 個惡意版本;集中發布時段係當日 09:35 至 13:20 UTC,即香港時間 17:35 至 21:20。呢啲數字計緊惡意 package artifact,唔等於有 2,212 部機執行過載荷,而且完整名單仍可能跟調查更新,核對時應以研究機構嘅逐項清單為準。

首批確認帶完整載荷嘅 11 個版本係 [email protected][email protected][email protected][email protected]@cacheable/[email protected][email protected]@cacheable/[email protected][email protected]@cacheable/[email protected][email protected]@cacheable/[email protected]唔可以見到 Keyv 個名就當全線版本都有毒;今次清楚確認嘅 Keyv 版本係 6.0.0,StepSecurity 列出嘅已知安全回退版本就係 5.6.0。

先查 lockfile、cache,再追有冇真正執行

第一輪要查晒 package-lock.jsonnpm-shrinkwrap.json、其他 lockfile、SBOM、node_modules、artifact repository 同 CI cache,連間接依賴都要計。亦要對照完整受影響清單,唔好淨係搜尋上述 11 個版本;今次後續 433 個套件牽涉大量歷史版本,單睇 package.json 入面幾個直接 dependency 好易漏網。曾經做過無 lockfile fresh install、Renovate 測試或者動態建立專案嘅 job,都要另外翻 CI 紀錄。

主機同網上紀錄可搜尋 setup.mjsMath_Symbol.jsMath_init.jsmath_<guid>.js,同埋 node setup.mjs 或 Bun 執行可疑 JavaScript 嘅程序鏈。Microsoft 公布嘅三個 SHA-256 IOC 分別係 54dc7ea54a1317cca0e890a2770630cf7fa6c97813e0cb9d2caa93012b350668fd3ca4007b225fdf8de7af4345a19179d5efa8c4bb9205f88cda806e5684b1eb9fc2570b7cef51c1b8df116d144d11ff4096357be7d2c4c6367cfc2509cf1bcc;網絡亦要查 npm-cache[.]compypi-get[.]comjs-mirror[.]com/router 路徑。

中招後點收拾,次序好重要

發現受影響版本而又證明唔到 install script 當時已停用,就應先當環境可能失守:隔離開發電腦或 runner、保存 log 同磁碟證據、檢查 .claude.vscode 及 token monitor 痕跡,再用可信 image 重建。共享 base image、npm 或 yarn cache、artifact store 同下游 build 產物都要重整,因為淨係刪走套件,清唔到已經留低嘅後門同外洩憑證。

完成隔離後,先喺已知乾淨裝置撤銷及更換嗰個環境接觸過嘅 npm、GitHub、雲端、Vault、Kubernetes、SSH、database 同 CI secret,跟住查 npm 發布紀錄、repository 分支、workflow 變動、雲端 audit log 同可疑 public repository。Microsoft 同篇文章有推介 Defender 系列偵測功能,呢部分屬佢自家產品方案;通用修復工作唔依賴 Defender,任何 endpoint、SIEM 或網絡紀錄只要保留到相應程序、hash 同連線資料,都可以照樣追查。

之後每次裝套件,都留一段冷靜期

npm v12 已經預設唔執行未獲批准嘅 dependency lifecycle script,團隊可配合 npm approve-scripts 建立 allowlist。舊環境調查期間亦可考慮 npm ci --ignore-scripts,不過原生 module 同真係靠 install script 嘅套件可能會壞,唔應該當永久設定盲目套用。min-release-age 就可以限制太新嘅版本即時入 build,畀保安工具同社群多幾日發現問題,但緊急安全修補亦可能俾佢擋住,要預先定好例外流程。

ChainDrop 最實際嘅教訓係,團隊要隨時答到某次 build 解咗邊個精確版本、安裝腳本有冇跑過、憑證當時有咩權限。用緊 Node.js、GitHub Actions 或自建 runner 嘅公司同自由工作開發者,應先完成版本及 IOC 核對;只要有一項對中,就按主機失守處理,唔好等套件名由 registry 消失先郁手。


參考來源

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

分享:WhatsAppThreadsTelegramFacebook