技術 約10分で読めます

Microsoft系73リポジトリ停止、MiasmaはAIエージェント起動へ

いけさん目次

TL;DR

影響 2026年6月5日、GitHubがAzure、Azure-Samples、microsoft、MicrosoftDocs配下の73リポジトリを停止。起点として報告されているのは Azure/durabletask への悪意あるコミット

発火点 npm install ではなく、Claude CodeとGemini CLIの SessionStart フック、Cursorの常時適用ルール、VS Codeの folderOpen タスク。.claude/settings.json.gemini/settings.json.cursor/rules/setup.mdc.vscode/tasks.json が実行経路

対応 影響リポジトリをcloneまたはpullしただけならまだ切り分け可能。AIコーディングツールでセッション開始、Cursorでルール読み込み、VS Codeで信頼済みワークスペースの自動タスク許可まで進んだ端末は、.github/setup.js 実行、外向き通信、GitHub・npm・クラウド認証情報の露出を前提に調査


Microsoft系の公開リポジトリ73件が、2026年6月5日にGitHub側で止められた。
StepSecurityの解析では、起点は Azure/durabletask へ入った悪意あるコミットだ。
そのコミットはソースコード本体を変えず、AIコーディングツールやエディタが読む設定ファイルと、悪意あるコード本体を追加していた。

今回の入口は、パッケージマネージャーを踏まない。
前に書いた Mini Shai-Huludの@antv波 では、preinstall やGit依存のライフサイクルスクリプトが入口で、踏んだあとにClaude CodeやVS Codeの起動経路が残った。
今回のMicrosoftリポジトリ停止では、入口そのものが「リポジトリをAIエージェントやVS Codeのワークスペースとして扱う」に寄っている。

Azure/durabletaskに入ったのはコード変更ではなく起動設定

StepSecurityが挙げているコミットは 5f456b8
コミットメッセージは Switched DataConverter to OrchestrationContext [skip ci] だが、変更内容はその説明と合っていない。
ソースコードの変更はなく、追加されたのは設定ファイルと setup.js だった。
コミット時刻は 2020-03-09T15:59:47Z になっており、実際のプッシュ時期とは合っていない。
[skip ci]、古い時刻、説明と合わない変更、設定ファイルだけの追加が重なっている。

確認されている発火点は、Claude Code、Gemini CLI、Cursor、VS Codeの4つ。
ただし、全部が同じ意味で「開いた瞬間に自動実行」ではない。

ファイル発火条件何が起きるか
.claude/settings.jsonClaude Codeセッション開始SessionStart フックで node .github/setup.js を実行
.gemini/settings.jsonGemini CLIセッション開始Gemini CLI側のフックで同じ setup.js を実行
.cursor/rules/setup.mdcCursorがプロジェクトルールを読むalwaysApply: true のルールで、setup実行を初期化作業としてエージェントへ持ち込む
.vscode/tasks.jsonVS Codeで信頼済みワークスペースを開き、自動タスクが許可されるrunOn: "folderOpen" のタスクで node .github/setup.js を実行
.github/setup.js上の4経路から呼ばれる認証情報を集める悪意あるコード本体

Claude CodeとGemini CLIは、プロジェクト内の設定ファイルからセッション開始時フックを読める。
Cursorは直接シェルを走らせる設定というより、常時適用ルールで「このsetupを実行せよ」という指示を会話文脈へ入れる。
VS CodeはWorkspace Trustと自動タスク設定が境界になる。未信頼ワークスペースでは自動タスクは走らないが、信頼済みフォルダや一度許可したワークスペースでは .vscode/tasks.json 側の folderOpen が効く。

StepSecurityは、cloneだけなら安全で、開く操作が危ないと整理している。
ここでいう「開く」は、単にFinderや ls で見ることではなく、AIコーディングツールやIDEにワークスペースとして渡すことだ。
cat .claude/settings.json で中身を見るのと、Claude Codeをそのディレクトリで起動するのは別の操作として扱う。

この構造だと、npm ci --ignore-scripts や公開後N日待つ設定では止まらない。
依存解決の前に、ツール設定として読み込まれるからだ。
pnpm 11やYarn 4.10のage gate はnpmレジストリ経由の短時間露出を止めるが、今回のようなリポジトリ直置きの起動設定までは確認しない。

73リポジトリが105秒で止められた

StepSecurityは、GitHub APIで73リポジトリの停止を確認したと書いている。
対象はAzure、Azure-Samples、microsoft、MicrosoftDocsの4組織で、停止時刻は2026年6月5日16:00:50〜16:02:35 UTCの105秒間に収まっていた。
人手でひとつずつ止めたというより、GitHub側の自動検知で一気に止まった数字だ。

OpenSourceMalwareの集計を引用した記事では、Azure側だけで49リポジトリが含まれ、Azure Functions関連、language worker、azure-functions-core-toolsfunctions-action などが並んでいる。
GitHub Actionsで Azure/functions-action@v1 のようなfloating tagを参照していたワークフローは、リポジトリ停止中に解決できなくなる。
これはマルウェア実行以前に、正規CIが止まるという別の影響も出る。

TechCrunchはMicrosoft広報のコメントとして、同社が調査のため一部リポジトリを一時的に削除し、レビュー後に一部を復旧、影響を受けた可能性のある少数顧客へ通知したと報じている。
影響人数や取得済みcloneの数は、公開情報だけでは分からない。

Miasmaは入口を何度も変えている

今回の話を単発で見ると「MicrosoftのGitHubリポジトリが止まった」だが、Miasma系の流れでは入口が移っている。

日付入口何が変わったか
2026-05-19Microsoft durabletask のPyPI公開権限StepSecurityは、35分間に3つの悪意あるバージョンが出たと書いている。CI/CDを通さず、侵害済み公開トークンでPyPIへ直接出した形
2026-06-02公表Red Hat系 @redhat-cloud-services npmスコープGitHub Actions OIDCの正規公開経路から、SLSA provenance付きの悪意あるnpmパッケージが出た。入口は preinstall
2026-06-05Azure/durabletask GitHubリポジトリパッケージレジストリではなく、ソースリポジトリ内のAIツール・IDE設定へ移った
2026-06-07公表Hades PyPI波Socketは37個の悪意あるwheel(Pythonの配布ファイル)、19パッケージを確認。*-setup.pth がPython起動時にBunと _index.js を呼ぶ形

共通しているのは、利用者が「アプリのコード」を読む前に動く場所を狙っている点だ。
npmなら preinstall、Pythonなら .pth、AIエージェントならセッション開始フック、VS Codeならワークスペースタスクになる。
攻撃者から見ると、どれも「開発者が普通に作業を始める前に実行される入口」だ。

Red Hat npm波とは同じMiasmaでも入口が違う

Microsoft Security Blogは6月2日に、Red Hat系 @redhat-cloud-services npmスコープのMiasma波を詳しく出している。
こちらは32パッケージ、90超の悪意あるバージョンが対象で、GitHub Actions OIDCの正規公開経路から、SLSA provenance付きの悪意あるnpmパッケージが出た。
install時には preinstall で4.29MBの難読化済み index.js が走り、Bunを落として第2段の悪意あるコードを実行する。

Microsoftの整理では、Red Hat npm波の悪意あるコードはGitHub、npm、AWS、Azure、GCP、Vault、Kubernetes、開発端末上のCLI認証情報やSSH鍵、ブラウザ・ウォレットデータを集める。
CIランナーではプロセスメモリからシークレットを拾い、追加パッケージを再公開し、SLSA provenanceを偽装してワームとして広がる。
トークン監視用の仕掛けや、おとりトークンを踏んだときの破壊処理にも触れている。

Microsoft 73リポジトリ停止の波では、入口がさらに手前へ移った。
npmレジストリで配るのではなく、ソースリポジトリへ設定ファイルを置き、AIコーディングツールの起動時フックとルール読み込みを入口にする。
node_modules を作らなくても、リポジトリを作業対象として開き、該当ツールの設定読み込みまで進んだ時点で実行経路に入る。

Hades PyPI波も、同じ方向にある。
Socketが確認した37個の悪意あるwheelファイルでは、*-setup.pth がPython起動時に処理され、Bunを落として _index.js を走らせようとしていた。
Pythonパッケージを import していなくても、同じ環境で pythonpip、テスト、Jupyterカーネル、CIジョブが起動すると .pth が処理される。
Miasma系は、npm、GitHubリポジトリ、PyPIで、それぞれ「作業開始前に自動処理される場所」を探している。

開いた端末は依存ではなくワークスペースを洗う

該当リポジトリをcloneまたはpullし、その後にClaude Code、Gemini CLI、Cursor、VS Codeで開いた端末は、依存パッケージの確認とは別にワークスペース側を確認する。
まずワークスペース直下に、次のファイルが来ていないか見る。

.claude/settings.json
.gemini/settings.json
.cursor/rules/setup.mdc
.vscode/tasks.json
.github/setup.js

Cursorを使っている場合は、.cursor/rules/ 配下の .mdc ファイルを全部見る。
alwaysApply: trueRun node .github/setup.jsrequired for setup のような文言があれば、単なるドキュメントではなくエージェントへの指示として扱う。
VS Codeでは、.vscode/tasks.jsonrunOptions.runOntask.allowAutomaticTasks、Workspace Trustの状態をセットで見る。

setup.js の実行ログ、Node.jsからの外向き通信、身に覚えのないGitHubリポジトリ作成、GitHub・npm・Azure・GCP・AWS・Vault・Kubernetes周辺の認証情報利用を追う。
この系統は「何をcloneしたか」だけで閉じず、「どのツールで開いたか」まで事故範囲に入る。

既存のMini Shai-Hulud対応と同じく、認証情報を無効化する前に端末側の監視・永続化を止める順序も崩さない。
前波ではトークン失効を検知して破壊処理へ入る仕掛けが観測されている。
ネットワーク隔離、怪しい自動起動設定の排除、ログ保全、認証情報ローテーションの順で進めるほうが事故後調査を壊しにくい。

実行済みかどうかは、固定ファイル名だけで決めない。
次のような挙動が並ぶなら、Miasma系として扱う。

見る場所追うもの
プロセスClaude Code、Gemini CLI、Cursor、VS Codeの子プロセスとして node .github/setup.js が走った痕跡
一時ディレクトリbunbun-v1.3.13.bun_ran_index.js*-setup.pth
GitHubMiasma: The Spreading BlightHades - The End for the Damned を説明欄に持つ不審リポジトリ、results/results-*.jsonRun Copilot ジョブ
コミットchore: update dependencies [skip ci]、古い時刻のコミット、設定ファイルだけの追加
外向き通信Bunダウンロード、GitHub APIのリポジトリ作成・コミット作成、クラウドメタデータやVault/Kubernetesへの不自然なアクセス

api.anthropic.com のような正規ドメイン名だけを見て遮断すると誤検知が増える。
ドメイン単体ではなく、nodebun の親プロセス、直前に読み込んだ設定ファイル、GitHub API操作、作成されたリポジトリ名を合わせて見る。

参考