大約喺 2026年8月4日 UTC 時間 09:00,黑客控制咗 Jared Wray 嘅 GitHub 帳戶(jaredwray)。利用呢個權限,佢哋直接將惡意程式碼推送去 keyv 儲存庫嘅 main 分支,並即刻成個 keyv 同 cacheable 套件家族發佈新版 。
第一批被污染嘅套件有 11 個,橫跨兩個命名空間:keyv、cacheable-request、cache-manager、@cacheable/utils、flat-cache、file-entry-cache 等 。Aikido Security、StepSecurity(將呢款蠕蟲追蹤為「ChainDrop」)、Socket 同 Chainguard 等多間安全公司喺事件發生後最初幾粒鐘內,都獨立確認咗呢次入侵 。
每個被污染嘅套件都加入咗相同嘅感染模式:兩個新檔案(setup.mjs 同 Math_Symbol.js),同埋喺 package.json 入面加咗一句 "preinstall": "node setup.mjs" 。
當任何開發者或者 CI 系統執行 npm install 嘅時候,個 setup.mjs dropper 就會喺安裝完成之前自動執行。佢嘅工作係從 GitHub Releases 下載一個正版嘅 Bun JavaScript 執行環境二進制檔,然後執行混淆咗嘅第二階段載荷(Math_Symbol.js,大約 710–728 KB)。
Microsoft Threat Intelligence 確認咗呢個載荷係 Mini Shai-Hulud 嘅一個變種 。佢會從受感染嘅環境入面偷取大量憑證同秘密 :
呢次攻擊最危險嘅地方,在於蠕蟲有能力自行擴散。偷咗 npm 發佈令牌同 GitHub PAT 之後,蠕蟲會用呢啲權限去發佈更多惡意版本嘅其他套件,而嗰啲套件嘅維護者同 jaredwray 完全無關 。
受影響嘅範圍急速擴大:
蠕蟲跨越咗命名空間嘅界限——佢冇留喺最初嘅 keyv/cacheable 家族入面。佢跳咗去好多其他機構擁有嘅套件,包括 Deliveroo、Ornikar、OneReach、Picsart、Qlik 同 ServiceTitan 等等 。
偷返嚟嘅憑證會被外洩去一個由黑客控制嘅 GitHub 儲存庫——蠕蟲會自己開一個新儲存庫,或者用一個專用嘅外洩儲存庫 。載荷入面內置咗多個備用嘅外洩渠道 ,令到即使單一渠道被截斷,攻擊都仲可以繼續運作。
多家安全公司嘅研究人員都強烈呼籲團隊,要將任何接觸過受影響套件嘅系統,當作完全失守嚟處理。以下係大家一致建議嘅補救步驟 :
用 npm/yarn/pnpm 嘅 overrides(例如喺 package.json 用 "overrides")嚟防止唔小心重新安裝有毒版本 。檢查 lockfile(package-lock.json、yarn.lock、pnpm-lock.yaml)睇吓有冇包含任何受影響嘅套件版本,包括過渡性依賴 。
千祈唔好就咁刪除機器上面嘅惡意檔案就算——呢部機執行過受影響版本嘅 npm install 。要假設部機上面所有秘密都已經外洩。
撤銷並重新產生所有可能已經外洩嘅憑證 :
一個好重要嘅細節:呢款惡意軟件有時會設定 GitHub workflow 監視器,當你開一個新令牌嗰陣,佢可以即刻再次外洩 。研究人員建議,喺輪換憑證之前,要先去停用或者移除任何監控服務 。
清除開發者機器同 CI/CD runner 上面嘅 npm/pnpm/yarn 快取同 Docker 構建快取 。將所有構建產物由頭開始重建,避免有毒嘅依賴殘留喺構建快取或者 Docker 層入面 。
睇吓有冇新開嘅儲存庫或者未經授權嘅 workflow 。搵吓有冇持久化嘅痕跡,例如 .claude/settings.json 或者 .vscode/tasks.json,呢啲可能係蠕蟲建立嘅 。
2026年8月4日嘅 Shai-Hulud 蠕蟲攻擊,係 JavaScript 生態圈安全嘅一個分水嶺。佢展示咗,一個被入侵嘅維護者帳戶——即使佢冇直接權限存取大部分受影響嘅套件——都可以喺幾粒鐘之內,引發一場污染過千個套件嘅蠕蟲攻擊。呢次攻擊用到正版 Bun 執行環境二進制檔嚟執行載荷、用偷到嘅令牌自我傳播、同埋內置備用外洩渠道,手法比之前嘅供應鏈攻擊更加精密 。
對工程團隊同安全團隊嚟講,呢次事件再次提醒大家固定依賴版本、喺可能嘅情況下停用 pre/post-install 腳本、監察異常嘅 GitHub 活動、同埋準備好供應鏈入侵嘅應變手冊,係有幾咁重要。