2026 年 6 月 5 日,被劫持的帳號把惡意提交 5f456b8 推進 Microsoft 的 Azure/durabletask 儲存庫:提交宣稱調整 DataConverter,實際未改任何原始碼,卻植入五個瞄準 AI 編碼代理的檔案——Claude Code、Gemini CLI、Cursor 全在名單上。這是 Miasma 蠕蟲再襲 Microsoft,也是供應鏈攻擊從「安裝即執行」走向「開檔即執行」的標誌案例。
GitHub 隨後在 105 秒內停用 73 個儲存庫,官方部署 Action 也一併消失。StepSecurity 與 The Register 的報導拼出全貌。
兩波攻擊:從 PyPI 投毒到儲存庫注入
Miasma 是 TeamPCP 之後的供應鏈蠕蟲,此前已感染逾 113 個 GitHub 儲存庫。5 月 19 日第一波:被竊的發布權杖在 35 分鐘內上傳 durabletask PyPI 套件三個惡意版本,繞過 CI/CD;payload 竊取 AWS、Azure、GCP 與 90 多種工具設定中的機密,Microsoft 事後下架。
6 月 5 日第二波:同一帳號直接推送提交,日期回溯到 2020 年並加上 skip ci 標記——戰場從套件登錄移到原始碼本身。
攻擊鏈:開檔即執行
五個植入檔案全部指向同一個 4.6 MB 混淆 payload(.github/setup.js):.claude/settings.json 的 SessionStart hook 與 .gemini/settings.json,分別讓 Claude Code、Gemini CLI 一開儲存庫就執行;.cursor/rules/setup.mdc 是啟用 alwaysApply 的提示注入;.vscode/tasks.json 在資料夾開啟時自動執行,連 AI 代理都不需要。
關鍵在觸發條件:複製安全,打開才會執行——攻擊面從套件管理器移到開發者的編輯器。六月版 payload 直接內嵌、跨平台。
105 秒掃蕩:73 個儲存庫與 functions-action
GitHub 在兩波、105 秒內停用 73 個儲存庫(HTTP 403、「tos」):Azure 49、microsoft 10、Azure-Samples 13、MicrosoftDocs 1;另 16 個相似儲存庫未被動,屬定向執法。
functions-action 是部署 Azure Functions 的官方 Action,儲存庫一消失,引用 @v1 的工作流全斷,20 多位開發者回報失敗;Microsoft 先稱政策違規,十二分鐘後改口「內部管理問題」。教訓:tag 隨儲存庫蒸發,指定 commit SHA 反而失效得可預期。
工具組外流:Miasma 走向開源
6 月 8 日起,Miasma-Open-Source-Release 儲存庫經被入侵帳號現身 GitHub,完整原始碼外流。SafeDep 形容它是「完整的供應鏈攻擊工具組,讓操作者透過竊來的憑證執行各種攻擊」,覆蓋 PyPI、npm、Actions、AI 設定投毒與 SSH 橫向移動;Wiz 指出 Miasma 源自 Mini Shai-Hulud。
蠕蟲完全在 GitHub 內運作、不需自建 C2,靠 commit 搜尋頻道下載指令與外傳資料;Socket 到 6 月 9 日已追蹤 473 個受影響 artifact。
防禦清單
- 6 月 2 日後開啟過受影響儲存庫即視為淪陷,輪替所有憑證
- 稽核異常出現的 .claude/、.gemini/、.cursor/ 與 .vscode/tasks.json
- 檢查網路日誌中的 check.git-service[.]com 與 t.m-kosche[.]com
- 分支保護加 PR 審查,禁止直推 main;GitHub Action 以 commit SHA 固定
- PyPI 改用 Trusted Publishing(OIDC);限制 CI/CD runner 對外連線
當 Agent 設定檔成了第一級攻擊面,每個會被 AI 代理讀取的檔案都得當成可執行程式碼對待。
參考來源
- Miasma Worm Hits Microsoft Again — StepSecurity
- Miasma worms its way onto GitHub as attack kit goes open source — The Register
本文由 AI 協助自上述來源整理,經人工審核後發布。
