Keyv 供應鏈攻擊急救指南:ChainDrop 點樣自動散毒同偷 token
Tech News

Keyv 供應鏈攻擊急救指南:ChainDrop 點樣自動散毒同偷 token

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

先查中毒版本同清走 hooks,再撤銷各類開發憑證

Keyv 呢次出事,麻煩位遠超一個熱門 npm 套件中毒。StepSecurity 指,ChainDrop 喺 8 月 4 日不足四個鐘內污染 444 個套件名稱、2,212 個版本;iThome 報道亦引述多間資安公司,話佢同 Shai-Hulud 用咗相近嘅偷憑證、散毒同外洩手法。不過呢個係研究機構嘅技術歸因,暫時唔代表 npm、GitHub 或執法部門確認咗幕後身份。

裝一次套件,跟住自己向外散

已確認嘅起點係 [email protected]。惡意版本喺 package.json 加入 preinstall,所以開發者、CI runner 或 production build 一跑安裝,正式編譯同測試都未開始,setup.mjs 已經執行。佢會下載正常嘅 Bun runtime,再開一個大型混淆 payload,搜刮 npm、GitHub、AWS、Kubernetes、Vault、資料庫、SSH、Stripe、Slack 等憑證,連 GitHub Actions runner 記憶體同 OIDC token 都係目標。

ChainDrop 攞到 npm token 後,會查嗰個身份有權發布咩套件,下載現有 tarball、塞入同一組惡意檔案,再推新版本上 npm。GitHub token 則用嚟改其他 repo 同分支,加入 Claude Code SessionStart hookVS Code folderOpen task。咁就算冇再跑 npm install,開 repo 或啟動 coding agent 都可能重新執行 payload,傳統上只掃 node_modules 明顯唔夠。

ChainDrop npm 蠕蟲供應鏈攻擊影響範圍示意圖

圖片:StepSecurity

點解 valid provenance 都擋唔到

今次套件有正常 GitHub Actions 簽發嘅 provenance,原因係攻擊者控制咗維護者嘅 GitHub 帳戶,直接改 source、落 tag,再借原本嗰條 OIDC trusted publishing pipeline 出版。簽章可以證明「呢個套件由指定 workflow 用呢個 commit 整出嚟」,但判斷唔到個 commit 係維護者真心批准,定係賊人入帳戶後落嘅。靠 provenance 一票放行,遇到呢類正常渠道出貨嘅惡意版本仍然會失手。

Keyv 同 Cacheable npm 供應鏈攻擊技術分析配圖

圖片:SafeDep

先對版本,唔好見到 Keyv 就亂刪

Wiz 8 月 6 日公開清單確認嘅核心惡意版本包括 [email protected][email protected][email protected][email protected][email protected][email protected]@cacheable/[email protected]@cacheable/[email protected]@cacheable/[email protected]@cacheable/[email protected]。呢份清單仲有大量其他組織套件,數字亦可能繼續更新,唔好當上述幾個就係全部。

先保存 lockfile、安裝紀錄同 CI log,再用 npm ls keyv cacheable cache-manager flat-cache file-entry-cache cacheable-request @cacheable/utils --all 查實際依賴;Yarn、pnpm 同 monorepo 亦要逐個 lockfile 對。之後拎 Wiz CSV 比對完整 name@version,清走中毒版本、node_modules、套件快取同 CI cache,再由可信 lockfile 同乾淨 runner image 重建。只係升級 package.json,唔等於已經清理執行過 payload 嘅電腦。

換 token 前,先停咗個 watcher

SafeDep 分析發現,惡意程式會裝 GitHub token watcher,每 60 秒驗證一次 token;一收到 40x,即 token 俾人撤銷,就會執行攻擊者預先保存嘅 command。所以處理次序好重要:先隔離受影響電腦同 runner,停用 watcher、刪除持久化,再喺另一部乾淨電腦撤銷憑證。 先查 ~/.config/gh-token-monitor/~/.local/bin/gh-token-monitor.sh~/Library/LaunchAgents/com.user.gh-token-monitor.plist~/.config/systemd/user/gh-token-monitor.service/tmp/gh-token-monitor.*.log;Linux 帳戶仲要檢查 lingering,確認後停 service 同跑 loginctl disable-linger <user>

跟住逐批撤銷及重開 npm publish token、GitHub PAT/App/SSH key、雲端 access key、Kubernetes 同 Vault 憑證、CI secret、資料庫密碼,同埋 Anthropic、OpenAI、GitHub Copilot 等開發及 AI 工具 token。同步查 npm 發布紀錄、GitHub audit log、陌生 commit/tag/workflow、雲端登入同資源操作。凡係喺中毒環境出現過嘅 secret,都當已經外洩處理。換新 token 時收窄權限、設有效期,CI 可以轉用短命 OIDC 就唔好再擺長期 publish token。

Repo 同 install scripts 都要封口

凡係受影響帳戶有權改動嘅 repo,都要搜尋 .claude/settings.json.claude/setup.mjs.claude/math_init.js.vscode/tasks.json.vscode/setup.mjsmath_init.js 同可疑 GitHub Actions workflow;未清理前唔好直接用 VS Code 或 Claude Code 開啟。CI 暫時可用 npm ci --ignore-scripts,而 npm 12 已預設封鎖未批准嘅依賴 install scripts,可用 npm approve-scripts --allow-scripts-pending 逐項檢查。之後只按確實用途、指定版本批准,唔好一次過 --all


參考來源

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

分享:WhatsAppThreadsTelegramFacebook