keyv 引爆 npm 蠕蟲攻擊:444 個套件中招,開發團隊而家要查乜
Tech News

keyv 引爆 npm 蠕蟲攻擊:444 個套件中招,開發團隊而家要查乜

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

惡意更新會偷憑證再自行擴散,清機同換 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 installsetup.mjs 就會下載 Bun,再啟動第二階段程式。Socket 分析指,程式會搜 npm token、GitHub token、GitHub Actions OIDC 資料、AWS/GCP/Azure 憑證、SSH key、Kubernetes 同 Vault token,跟住用搶到嘅發佈權限包裝更多帶毒版本。真正麻煩位係好多項目冇直接寫低 keyv,佢可能沿住 eslintfile-entry-cacheflat-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 個名。

ChainDrop npm 蠕蟲由 keyv 向其他套件擴散嘅攻擊範圍圖

圖片:StepSecurity

先搵感染痕跡,唔好即刻換 GitHub token

第一步係暫停相關 CI job,再將懷疑中招嘅 runner 或開發電腦斷網隔離。 翻查 package-lock.jsonyarn.lockpnpm-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 製作嘅 keyv npm 供應鏈攻擊研究配圖

圖片: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,保留足夠安裝同發佈紀錄,先可以喺下一次事故快速答到邊部機曾經真正執行過帶毒版本。


參考來源

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

分享:WhatsAppThreadsTelegramFacebook