
Keyv 供應鏈攻擊急救指南:ChainDrop 點樣自動散毒同偷 token
先查中毒版本同清走 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 hook 同 VS Code folderOpen task。咁就算冇再跑 npm install,開 repo 或啟動 coding agent 都可能重新執行 payload,傳統上只掃 node_modules 明顯唔夠。

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

圖片: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.mjs、math_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。
參考來源
- iThome — NPM套件Keyv供應鏈攻擊活動ChainDrop傳出源自於Shai-Hulud — original report
- StepSecurity:ChainDrop npm Worm — 攻擊時間線、自動擴散機制、provenance 限制、hooks 同受影響規模分析
- SafeDep:Keyv and cacheable npm compromise — token watcher、撤銷陷阱、持久化路徑同清理次序嘅一手技術分析
- Wiz 公開受影響套件及版本清單 — 刊出前核對完整 name@version,避免誤指所有 Keyv 版本都有問題
- npm Docs:npm approve-scripts — 核實 npm 12 對依賴 install scripts 嘅預設封鎖同逐版本批准方法
- npm Docs:Revoking access tokens — npm 官方撤銷受損 access token 指引
- GitHub Docs:Revoking your credentials — GitHub 官方憑證撤銷、重開同更新 automation 指引
本文根據原文及公開資料整理;資料有出入時,以原文及官方資料為準。







