摘要: 被劫持帳號於 2026 年 6 月 5 日把惡意提交 5f456b8 推進 Microsoft 的 Azure/durabletask 儲存庫,植入鎖定 Claude Code、Gemini CLI、Cursor 與 VS Code 的檔案。攻擊觸發點從套件安裝改為開啟資料夾。GitHub 在 105 秒內停用四個組織下共 73 個儲存庫,也使引用官方 functions-action 的工作流斷線。
惡意提交 5f456b8 於 2026 年 6 月 5 日落進 Microsoft 的 Azure/durabletask 儲存庫,動手的是被劫持的帳號。提交訊息宣稱要調整 DataConverter,實際上原始碼一行都沒動;真正被塞進去的,是五個鎖定 AI 編碼代理的檔案——Claude Code、Gemini CLI、Cursor 全數在列。Miasma 蠕蟲再次撲向 Microsoft,這次也成了供應鏈攻擊轉型的標記:由「安裝即執行」邁入「開檔即執行」。
GitHub 的反應很快:105 秒之內,73 個儲存庫遭停用,連官方部署 Action 也跟著消失。StepSecurity 與 The Register 先後發表的報導,把整起事件拼出完整樣貌。
前後兩波:先毒化 PyPI,再直搗儲存庫
Miasma 這隻供應鏈蠕蟲接續在 TeamPCP 之後現蹤,先前遭它感染的 GitHub 儲存庫已超過 113 個。第一波落在 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 代理。
要害就在觸發條件:clone 安全,開啟才出事——攻擊面離開套件管理器,搬進開發者的編輯器。六月版的 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 日為止,受影響的 artifact 已達 473 個。
防護檢查表
- 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 代理會讀到的檔案,防護上都得比照可執行程式碼處理。
