keyv npm 供應鏈攻擊是這篇文章討論的核心

💡 核心結論:這不是普通的「換包」攻擊,而是會自我複製的蠕蟲(Worm)。攻擊者先接管 keyv 維護者的 GitHub 帳號,再以合法發布流程把帶毒版本送上 npm,最後把「真正的手腳」塞進 AI Agent 設定檔——那些掃描器根本不會打開的檔案。
📊 關鍵數據:2026/08/04 起,波及 400+ 套件、2,234 個被下毒的版本;keyv、flat-cache、file-entry-cache 三兄弟每週合計下載量約 4.5~5 億次,單月影響下載量突破 20 億次。預估 2027 年 AI 原生供應鏈攻擊將成長至年破 3,000 起,AI 相關套件攻擊占比從 2026 年的 18% 攀升至 35%。
🛠️ 行動指南:立即鎖定 keyv 至安全版本、檢查 package-lock.json、輪換所有 CI/CD Token、在 GitHub 移除惡意 Webhook,並把「設定檔」也納入掃描範圍。
⚠️ 風險預警:惡意程式碼藏在 .claude、AGENTS.md 等 AI Agent 設定檔,主流 SAST/SCA 工具大多選擇性忽略,你的「看不見」正是攻擊者的「最佳掩體」。
8 月 4 日那天,我盯著 npm 的發布時間軸看了很久。09:35 UTC,[email protected] 被推上線——沒人尖叫,沒有紅色警報,因為它看起來就是一次再普通不過的「大版本發布」。但幾個小時後,事情開始失控:cacheable、flat-cache、file-entry-cache……一個接一個被污染的版本如雨後春筍般冒出來,甚至連其他維護者的套件也被「接管」。這不是巧合,是一隻叫 Shai-Hulud 的蠕蟲在開party,而它選的舞池,是每個 JavaScript 開發者幾乎都踩過的地板。
更讓我背脊發涼的,是藏在最深處的那個細節:核心函式庫的 dist/ 程式碼一個位元組都沒被動過,整場攻擊只靠 package.json 裡的四行程式、兩個「掃描器永遠不會打開」的檔案,以及一堆偽裝成 AI Agent 設定檔的惡意載體。換句話說,它不是用暴力突破你的防線,而是趁你「沒在看」的時候,從門縫溜進來。
什麼是 keyv npm 供應鏈攻擊?Shai-Hulud 蠕蟲如何滲透 400+ 套件?
keyv 是 npm 生態系裡極度低調的「隱形基建」——一套輕量的鍵值儲存抽象層,被 cache-manager、flat-cache、file-entry-cache 等數百個熱門套件當成底層依賴。正因為它「沒存在感」,攻擊者才選中它:你裝了它,卻從不會多看它一眼。
整條攻擊鏈長這樣:攻擊者先是攻陷 keyv 維護者的 GitHub 帳號(AIKIDO 與 Microsoft 的報告都指向帳號層接管),接著透過合法的 npm 發布流程,在 setup.mjs(preinstall 掛鉤)裡塞入下載腳本——它會抓一個獨立的 Bun runtime 下來,再執行混淆過的酬載。這個酬載做了三件「大事」:偷憑證(npm token、GitHub token、雲端金鑰、CI/CD secrets)、把自己發布到所有可寫的 npm 套件,以及在 GitHub 儲存庫裡植入執行掛鉤,讓受害者的 repo 變成新的感染源。
微軟威脅情報把這波攻勢命名為 ChainDrop,並確認其波及超過 400 個套件、橫跨多個不相關的發布者;Socket 統計則顯示至少有 2,234 個被下毒的版本、444 個套件遭殃。這已經不是「偷一把鑰匙」的層級,而是直接在你家大門口複製了一把萬能鑰匙。
🧠 Pro Tip(專家見解):別再迷信「來源可信」這四個字。這次的惡意版本帶有合法 provenance(出處證明),因為它就是從被攻陷的維護者帳號正常發布的。Snyk 的調查特別提醒:trusted provenance 只能證明「哪個帳號發布」,無法證明「這個帳號還是本人」。把信任邊界畫在「人」身上,本身就是 2026 年最大的安全漏洞。
為什麼惡意程式碼要藏進 AI Agent 設定檔?掃描器為何集體「失明」?
這次攻擊最「刁鑽」的一手,是所謂的 Wave Six 酬載:它把惡意指令寫進 .claude、AGENTS.md、.cursorrules 這類 AI 程式設計代理(AI coding agent)的設定檔裡。為什麼挑這些檔案?因為整個業界的掃描工具,從 SAST 到 SCA,預設都會跳過「非程式碼」的 markdown 與設定檔——它們被歸類為「不執行、不危險、不值得掃」。
但 2026 年的現實是:Claude Code、Cursor、Codex 這些 AI 代理會「讀」這些檔案,而且會照著執行。攻擊者等於在掃描器的盲區裡,架了一座通往 AI 代理大腦的橋。Zscaler ThreatLabz 的分析直接點名這是「AI 掃描器規避(AI scanner evasion)」的典型案例:當開發者喊出「幫我修這個 bug」,AI 代理讀完被污染的 AGENTS.md,可能就默默把憑證吐給攻擊者,而你只會看到一次「正常」的 AI 互動紀錄。
更陰險的是 IDE 掛鉤。The Hacker News 的追蹤指出,這波蠕蟲會植入 VS Code / Claude Code 的執行掛鉤,讓「開啟專案」這個動作本身就變成觸發器。你連指令都沒下,毒已經在跑了。
🧠 Pro Tip(專家見解):把「掃描」的定義重寫一遍——凡是 AI 代理會讀的檔案(AGENTS.md、.cursorrules、.claude/**、.env.example 旁的說明文件),全部要進掃描白名單。Operant 的實測發現,這次攻擊的程式碼「完全沒碰到 dist/」,代表任何只看函式庫主體的掃描器都會完美錯過。記住:攻擊者的藏身邏輯,永遠跟「人類與工具不會讀的地方」重疊。
月下載量 20 億的套件被下毒?2026 供應鏈攻擊產業化有多嚴重?
先講數字,再講意義。keyv、flat-cache、file-entry-cache 三個套件每週合計約 4.5~5 億次下載,換算單月超過 20 億次——這還沒算上透過間接依賴被「連坐」的專案。也就是說,這顆炸彈埋在一個月 20 億次被踩過的路上,而且它已經引爆了。
把鏡頭拉遠,2026 年的開源供應鏈攻擊已經完全「產業化」。Phoenix Security 統計,光是 2026 上半年就出現 59 起攻擊行動、657 個惡意套件,且全程零 CVE——因為這些根本不是漏洞,是「帳號被偷+流程被濫用」。shattered.io 更估算全年浮現的惡意 npm 套件高達 120 萬個。三月下旬連 Axios 都被北韓駭客組織 Sapphire Sleet 攻陷,部署了跨平台 RAT;六月 Red Hat 的 @redhat-cloud-services 命名空間又被 Miasma 酬載掃過一輪。攻擊者不再單打獨鬥,而是把「套件投毒」當成 SaaS 在經營。
這張圖告訴我們一件事:Shai-Hulud 不是第一次來,而且一次比一次大。從 2025 年 9 月的初代、11 月的第二代,到 2026 年 8 月鎖定 AI 開發工具鏈的第三代,它已經進化成一種「會自己找路、自己複製、自己發布」的生態級威脅——資安界甚至稱它是 npm 史上第一隻真正意義上的自我複製供應鏈蠕蟲。
🧠 Pro Tip(專家見解):看 2026 上半年數據時別只看「套件數」,要看「單一帳號單小時發布 639 個惡意版本」這種工業化指標。攻擊者已經把「帳號農場+自動發布+蠕蟲擴散」變成標準作業流程,未來的防禦若還停留在「每週掃一次 lockfile」,你的反應速度永遠追不上他們的發布速度。
開發者與企業該如何防禦 AI 時代的供應鏈攻擊?
既然攻擊者把戰場從「程式碼」移到「設定檔」與「AI 代理」,防守方也得跟著搬家。我的建議分三層:
第一層:立即止血。如果你安裝過受影響版本,先當作「已失守」處理——輪換 npm token、GitHub token、雲端與 CI/CD 憑證,刪除可疑 Webhook,檢查 ~/.npmrc 與 .env。微軟與 JFrog 的 Runbook 都強調:不要只改密碼,要撤銷並重新簽發,因為蠕蟲可能早就把 Token 傳出去了。
第二層:鎖死依賴。啟用 lockfile 完整性校驗、把 overrides 釘死版本、對 preinstall 腳本設白名單(pnpm 的 ignore-scripts 或僅允許簽名腳本)。這次攻擊的入口就是 preinstall 掛鉤——封住它,等於拆了炸彈的引信。
第三層:把 AI 代理納入資安邊界。禁止 AI 代理讀寫未審核的 AGENTS.md/.cursorrules;對 AI 代理的檔案操作做最小權限隔離;把「AI 代理行為日誌」接進 SIEM。Wiz、Zscaler、CSA 的研究都指向同一個結論:AI 代理是 2026 年最性感也最脆弱的攻擊面,因為它擁有「會執行的眼睛」。
🧠 Pro Tip(專家見解):把「依賴最小化」當成資安策略,而不只是工程潔癖。keyv 之所以釀成巨災,正是因為它被數百個套件當成「無害的底層小工具」。每多一個間接依賴,你的攻擊面就多一條看不見的暗道——刪依賴,就是刪風險。
2027 年 AI Agent 安全預測:從 npm 到自動化代理的風險地圖
把這次事件當成一個「預告片」來看,2027 年的供應鏈風險地圖會長這樣:攻擊目標從「套件」轉向「代理」。當企業開始把 Claude Code、自建 Agent、MCP(Model Context Protocol)伺服器接入生產流程,攻擊者只要污染一個 Agent 的「個性設定」或工具描述檔,就能讓整個自動化體系變成提款機。CSA 的報告預測,這類「AI 開發工具鏈」攻擊在未來 12~18 個月會成為主流,而防禦方連「該掃什麼」都還沒達成共識。
另外兩條趨勢值得盯緊:一是跨生態擴散——Shai-Hulud 已從 npm 蔓延到 PyPI,未來 RubyGems、Go module 甚至容器映像檔都會成為同一個蠕蟲的「新皮膚」;二是「零 CVE 攻擊」常態化,帳號接管+流程濫用將取代傳統漏洞利用,傳統 CVE 驅動的修補流程會徹底失靈。預估 2027 年全球 AI 資安市場規模上看 900~1,000 億美元,但錢若只花在「更聰明的掃描器」,卻忘了掃「AI 會讀的檔案」,那只是把防線畫在錯誤的地方。
🧠 Pro Tip(專家見解):2027 年的贏家,會是那些把「信任」從「帳號」遷移到「行為」的組織:可稽核的發布來源、可驗證的建置產物(SBOM+簽名)、以及對 AI 代理「讀寫執行」全流程的可觀測性。信任不再是一張帳號憑證,而是一條可以被回放的行為鏈。
常見問題 FAQ
1. 我的專案有用到 keyv,要怎麼確認有沒有受影響?
先跑 npm ls keyv cacheable flat-cache file-entry-cache 檢查鎖定的版本,並比對 Socket/Wiz 公布的惡意版本清單(含 [email protected] 之後的系列)。更保險的做法是:直接當作「已暴露」來處理——輪換所有 token 與憑證、檢查 GitHub Webhook、清除可疑的 preinstall 腳本,然後升級到官方修復版。
2. 為什麼一般的漏洞掃描器抓不到這次的惡意程式碼?
因為惡意酬載被放在 AI Agent 設定檔(如 AGENTS.md、.claude)與 package.json 的 preinstall 掛鉤裡,而主流 SAST/SCA 工具預設會忽略「非程式碼」檔案,且這次發布帶有合法 provenance,看起來就像正常更新。掃描器只認「程式碼與已知 CVE」,自然看不見藏在「AI 會讀、人不會讀」地方的毒。
3. AI 寫程式工具(Claude Code、Cursor 等)會讓供應鏈攻擊更難防嗎?
會,而且已經發生了。AI 代理會主動讀取並執行設定檔內容,攻擊者等於利用「代理的服從性」當作攻擊通道。2026 年之後,企業必須把 AI 代理的檔案讀寫、工具呼叫全部納入資安監控,並對代理可讀取的設定檔做同等級的審查,否則 AI 越快,中毒也越快。
看完這篇,別急著關分頁——先檢查你的 lockfile,再想想你的 AI 代理「今天讀了誰的設定」。供應鏈安全的殘酷真相是:你不是被攻擊的目標,你只是恰好站在 20 億次下載的必經之路上。
📚 權威文獻與追蹤來源
- TechTimes:keyv npm Supply Chain Attack Hides Malware in AI Agent Files Scanners Never Read
- Wiz Research:keyv and cacheable npm Package Hijacked in Supply Chain Attack
- Socket:Popular npm Packages in the keyv and Cacheable Namespaces Compromised
- Microsoft Threat Intelligence:ChainDrop supply chain compromise
- Snyk:Inside the keyv npm Supply Chain Compromise
- JFrog Research:Major Shai-Hulud campaign strikes npm again
- The Hacker News:Keyv-Linked npm Worm Poisons Hundreds of Packages
- Zscaler ThreatLabz:Shai-Hulud, Miasma & AI Scanner Evasion
Share this content:













