
keyv 引爆 npm 蠕蟲攻擊:444 個套件中招,開發團隊而家要查乜
惡意更新會偷憑證再自行擴散,清機同換 token 次序尤其重要
iThome 報道,熱門 npm 套件 keyv 嘅維護者 GitHub 帳戶遇襲,攻擊者改動原始碼同 release tag,再借項目原有嘅發佈流程推出首批 11 個帶毒版本,再靠偷返嚟嘅 npm、GitHub 同 CI 憑證向外擴散。StepSecurity 喺 8 月 4 日 09:40 至 13:20 UTC 呢段時間點算到 444 個套件、2,212 個惡意版本;SafeDep 後續統計已去到 2,234 個版本,反映名單仍然郁緊。呢啲數字講緊確認帶有惡意程式嘅指定版本,唔代表所有裝過 keyv 嘅人都已經中招。
一次 npm install 已經可以出事
首個確認帶毒版本係 [email protected]。套件加入咗 preinstall 指令,開發者、CI runner 或部署環境一執行 npm install,setup.mjs 就會下載 Bun,再啟動第二階段程式。Socket 分析指,程式會搜 npm token、GitHub token、GitHub Actions OIDC 資料、AWS/GCP/Azure 憑證、SSH key、Kubernetes 同 Vault token,跟住用搶到嘅發佈權限包裝更多帶毒版本。真正麻煩位係好多項目冇直接寫低 keyv,佢可能沿住 eslint、file-entry-cache、flat-cache 呢類依賴鏈入場。
第一批 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]。StepSecurity 話呢批套件其後已回復安全版本,惡意發佈亦陸續撤走,不過舊 lockfile、npm cache、CI cache 同已裝好嘅 node_modules 唔會跟住自動變乾淨。其餘 433 個套件牽涉大量版本,核對時要用 Socket 或研究機構持續更新嘅完整名單,唔好淨係望住以上 11 個名。

圖片:StepSecurity
先搵感染痕跡,唔好即刻換 GitHub token
第一步係暫停相關 CI job,再將懷疑中招嘅 runner 或開發電腦斷網隔離。 翻查 package-lock.json、yarn.lock、pnpm-lock.yaml 同 8 月 4 日之後嘅安裝紀錄,連間接依賴都要對版本;亦要查 npm 發佈紀錄、GitHub audit log、突然出現嘅 release、tag、commit、repository 同 workflow 改動。單靠 npm audit 唔夠,因為事件發展得快,惡意版本名單同 registry 狀態未必同步,而一個已撤回嘅版本仍然可以留喺 cache 或現有 lockfile 入面。
換憑證之前要先拆走蠕蟲裝落部機嘅監察程式。 StepSecurity 同 SafeDep 都發現佢會監察 GitHub token;一見 token 撤銷後回傳 HTTP 4xx,就執行攻擊者預先放低嘅指令。macOS 同 Linux 要搵 ~/.local/bin/gh-token-monitor.sh、~/.config/gh-token-monitor/、~/Library/LaunchAgents/com.user.gh-token-monitor.plist、~/.config/systemd/user/gh-token-monitor.service 同 /tmp/gh-token-monitor.*.log。保安團隊確認停咗相關 service、刪走 implant 同隔離部機之後,先撤銷及重開 npm token、GitHub PAT、SSH key、雲端 key、Vault/Kubernetes token,同所有喺該環境出現過嘅 CI secrets。

圖片:SafeDep
Claude Code 同 VS Code 設定都要逐份睇
今次攻擊仲改咗 keyv repository 入面嘅 .claude/settings.json 同 .vscode/tasks.json。前者用 SessionStart hook,後者靠 runOn: folderOpen,開啟項目或者啟動 Claude Code session 已經可以執行 dropper,未必等到 npm install。團隊要查 .claude/、.vscode/、workspace trust 同 VS Code 嘅 task.allowAutomaticTasks,再對照 Git history 睇呢啲檔案幾時加入、邊個帳戶提交、有冇 force-push 或刪 tag。VS Code 官方文件亦確認 folderOpen task 可以自動執行;調查期間應關掉 automatic tasks,陌生 repository 亦唔好先設成 trusted workspace。
有簽名都唔等於段碼安全
[email protected] 經項目本身嘅 GitHub Actions、npm OIDC trusted publishing 同 SLSA provenance 正常發佈,所以驗證結果可以係綠色。呢份 provenance 證明某個 workflow 確實由指定 commit 砌出套件,但嗰個 commit 已經俾人落毒,簽名自然照樣成立。公司若果只靠「有 provenance 就放行」,今次一樣攔唔住。短期可以鎖實 exact version 同 integrity hash、限制依賴安裝 script、為新版本加冷靜期;長遠仲要收窄 CI 權限、減少長效 token,保留足夠安裝同發佈紀錄,先可以喺下一次事故快速答到邊部機曾經真正執行過帶毒版本。
參考來源
- iThome — 【資安日報】8月5日,熱門NPM套件keyv遭植入竊密蠕蟲,至少400個套件受感染 — original report
- StepSecurity:ChainDrop npm Worm — 技術分析、首批 11 個惡意版本、時間線、感染痕跡同處理次序來源。
- Socket:keyv and Cacheable Compromise — 解釋 preinstall、Bun 載入器、憑證盜取、IDE hooks 同持續更新名單。
- SafeDep:keyv npm Supply Chain Compromise — 提供另一套持續更新統計、完整受影響名單同 dead-man’s switch 調查資料。
- npm Docs:npm install — 確認 lockfile、ignore-scripts、exact version 同新版本冷靜期相關行為。
- Visual Studio Code:Tasks — 確認 folderOpen task、automatic tasks 同 workspace trust 嘅官方設定。
- GitHub Docs:Identifying audit log events performed by an access token — GitHub token 遇襲後追查 audit log 嘅官方指引。
本文根據原文及公開資料整理;資料有出入時,以原文及官方資料為準。







