2026年6月1日、Red Hat Cloud Services関連の @redhat-cloud-services 名前空間に属するnpmパッケージ群が、開発者端末やCI/CD環境の認証情報を広範に窃取する自己増殖ワーム「Miasma(ミアズマ)」によって汚染される事態が発生しました。Aikidoは32パッケージ・96バージョン、週116,991ダウンロード規模の影響を報告しており、Wiz Researchは少なくとも32件のパッケージリリース、週約80,000ダウンロード規模と整理しています。本件については、Aikido、Wiz Research、Socket、JFrog、SafeDep、StepSecurity、Snyk、Orcaなど複数のセキュリティベンダーが短時間のうちに分析を公開しており、攻撃の規模と関心の高さがうかがえます。
本件は、典型的なタイポスクワッティングではなく、信頼ある @redhat-cloud-services 名前空間の正規パッケージ公開経路が悪用された点に特徴があります。AikidoやWiz Researchなどの分析では、攻撃者はRed Hat従業員のGitHubアカウントを足がかりに、GitHub Actions OIDCとnpm Trusted Publishingの仕組みを正規の公開経路として利用し、SLSA Provenance Attestationが付与された悪性版を公開したとされています。その結果、悪性パッケージにも正規の自動化パイプラインから出されたかのような証明書が付き、外見上は完全に正当な新バージョンとして配布される構造になっていました。さらに、感染後の永続化先として ~/.claude/settings.json(Claude Code)と .vscode/tasks.json が組み込まれており、AI支援開発ツールの設定ファイルを永続化ポイントとして利用する構成です。エクスフィルトレーション用の送信先としてペイロード内に確認されたのは https://api.anthropic.com:443/v1/api という、Anthropicの正規ドメイン上の実在しないパスで、Socketは「このドメインが脅威アクターのインフラであるとは評価しない」と明示しています。CI/CDの送信制御を「Anthropic APIは許可」で抜けてくる作りになっており、AI開発が当たり前になった環境を狙ったegress偽装と読み取れます。
- 侵入経路——Red Hat従業員アカウント侵害から「SLSA署名済み悪性版」へ
- マルウェアの構造——preinstallフックから多段階デコード、Bunで実行
- 窃取対象——CI/CDトークンからクラウド本体、暗号資産ウォレットまで
- エクスフィルトレーション——「api.anthropic.com:443/v1/api」というAI時代のegress偽装
- 永続化——Claude Code と VS Code の設定ファイルに居座る
- ワーム伝播——SLSA証明済みパッケージの自動再公開
- TeamPCPのオープンソース化と「Shai-Hulud模倣の時代」
- 「アンインストールでは終わらない」前提で動く
- 「正規パッケージの正規ルート公開」と「AI開発生態系の悪用」
- 関連記事
- ソース
侵入経路——Red Hat従業員アカウント侵害から「SLSA署名済み悪性版」へ
AikidoやWiz Researchなどの分析では、初期侵入の起点はRed Hat従業員のGitHubアカウント侵害だったとされています。攻撃者はこのアカウントを使って、RedHatInsights傘下のリポジトリへ悪性の孤立コミット(orphan commits)を混入させ、コードレビューを迂回する形で悪性のGitHub Actionsワークフローを差し込んだと説明されています。The Hacker Newsは「2つのRedHatInsightsリポジトリへ孤立コミットが押し込まれた」と整理しています。
差し込まれたワークフローは、GitHub ActionsのOIDCトークンを利用して悪性パッケージ版を公開するルートを構成しました。npm Trusted Publishingの仕組みでは、OIDC経由で発行されたトークンを用いた公開はSLSA Provenance Attestationを伴うため、生成された悪性バージョンには「正規の自動化パイプラインから公開された」というSLSA証明書が付与されます。Mendは、悪性版 @redhat-cloud-services/types@3.6.1 のSLSA Predicateを抽出すると、本来のリポジトリ・ワークフロー・コミット・トリガーが記録されていることを確認できると指摘しており、Provenance自体は嘘をついていない構図でした。Socketも「悪性リリースは信頼された上流の自動化を通じて公開されたとみられる。Provenanceや Trusted Publishingだけを完全な防御策として扱うべきではない」とまとめています。
Socketによれば、攻撃時刻はおおむね2波に分かれ、Wizは6月1日13:00 UTC時点で「ほとんどの悪性版は既に取り消されており、執筆時点で残るのは2本」と続報を出しています。Red HatはBleepingComputerに対して「特定のnpmパッケージに関するセキュリティ報告を認識しており、ただちに調査を開始し、npmレジストリから当該パッケージを削除した」とコメントし、影響範囲は社内の開発ツール群に限定されると説明しています。
マルウェアの構造——preinstallフックから多段階デコード、Bunで実行
悪性化された各パッケージの package.json には、本来の上流リポジトリにはない preinstall スクリプトが追加されていました。これは npm install が依存関係解決を終える前に node index.js を自動実行するため、開発者がパッケージを import せず一度依存関係に加えただけでも発火します。差分自体はマニフェストへのフック追加と index.js 本体追加のみで、ローカルでの差分検出や静的レビューでは見落としやすい構成になっています。
追加された index.js は約4.1〜4.2 MBの難読化済みJavaScriptで、ステージ1ではCaesar/ROT形式の文字変換と eval() による初期デコードを行います。ステージ2では aes-128-gcm で暗号化された2つの埋め込みペイロード(Bunインストーラ/本体ペイロード)を実行時に復号し、ランダム名の /tmp/p<random>.js に書き出して、Bunランタイムで実行したのち削除します。Bunが導入されていないシステムには、攻撃者が指定したGitHub上のリリース(oven-sh/bun リポジトリの公式リリース)から curl で静かに取得する仕組みも備えています。
Wiz Researchは、本バリアントが「感染ごとに固有の暗号化ペイロードを生成する」点を従来との重要な差分として挙げており、これによりハッシュベースのIOCはパッケージ版ごとにしか効かない仕組みになっています。これは過去のMini Shai-Hulud波で「単純な自己複製」だった部分が、検出回避を強化する形で進化したものです。
窃取対象——CI/CDトークンからクラウド本体、暗号資産ウォレットまで
Socketが解析した本体ペイロードには、以下のような資格情報・ファイル収集モジュールが含まれます。CI/CDシークレットと開発者ワークステーションの両方を網羅する設計です。
環境変数とプロセス情報については、os.userInfo() によるユーザー名・ホスト名と、process.env 全体を取得します。CI環境では GITHUB_TOKEN や ACTIONS_RUNTIME_TOKEN、ACTIONS_ID_TOKEN_REQUEST_URL、NPM_TOKENといった自動化用シークレットが環境変数経由で渡されることが多く、これだけで多くの攻撃に必要な素材が揃ってしまいます。
クラウド資格情報については、AWSのアクセスキー・セッショントークン・AWS_PROFILE系、Azureのテナント/クライアント/フェデレーテッドトークン、GCPのアプリケーションデフォルト認証情報・サービスアカウント鍵、HashiCorp Vaultのトークン、Kubernetesの kubeconfig とサービスアカウントトークンに加え、AWS・Azure・GCPのインスタンスメタデータエンドポイント(169.254.169.254 等)への直接アクセスまで実装されています。ファイルシステム側では ~/.aws/credentials、~/.azure/accessTokens.json、~/.config/gcloud/application_default_credentials.json、~/.docker/config.json、~/.kube/config、~/.ssh/id_rsa・~/.ssh/id_ed25519、~/.git-credentials、各種 .npmrc・.pypirc・.netrc が直接読まれ、追加で ~/.bitcoin/wallet.dat や ~/.ethereum/keystore/* といった暗号資産ウォレットファイルも収集対象になっています。
GitHubに関しては gh auth token コマンドによるCLIトークン取得に加え、GitHub Actionsランナーがプロセスメモリ上に保持するトークン(ghs_* JWT形式を含む)を正規表現で走査する専用モジュールが用意されています。Socketによれば、このランナーメモリ取得モジュールにはCI上で sudo を試みる権限昇格コードも含まれており、JFrogはこれを「ホストの /etc/sudoers.d をバインドマウントするコンテナを起動してパスワード不要 sudo を仕込む試み」と詳しく分析しています。
エクスフィルトレーション——「api.anthropic.com:443/v1/api」というAI時代のegress偽装
収集されたデータは、gzip圧縮 → AES-256-GCM暗号化 → RSA-OAEPで鍵をラップ、という多重保護を経たうえで送信されます。Socketが復号した文字列テーブルには、主要送信先として https://api.anthropic.com:443/v1/api がペイロード内に確認されており、フォールバックとしてGitHub Contents APIで results-<timestamp>-<counter>.json 形式のファイルをコミットする経路が用意されています。
Socketは本ドメインについて「脅威アクターが所有するインフラとは評価しない」「正規ベンダーの正当なホストを経由した暗号化送信が観測される」と明確に断っています。Anthropic公式APIには /v1/api というエンドポイントは存在しないため、実用上はリクエストが届かない可能性が高いと考えられますが、CI/CDランナーや開発者ワークステーションのアウトバウンド検査では「Anthropic APIへの通信」としてTLS SNI上は許可されてしまう点が問題です。AI開発ツールを業務で常用する組織ほど、api.anthropic.com や api.openai.com といったAIプロバイダドメインへのアウトバウンドを許可しがちで、ここを「正規っぽく見える送信先」として悪用するのは、AI開発の普及そのものを攻撃面に転化する考え方と言えます。
フォールバック経路として登場するGitHubコミットの仕組みも目を引きます。盗まれたGitHubトークンで書き込み可能なリポジトリへ暗号化済みJSONをコミットし、そのコミットメッセージに IfYouInvalidateThisTokenItWillNukeTheComputerOfTheOwner:<token> という文字列を添える設計です。Socket・SafeDep・The Hacker Newsの分析によれば、このコミットは createCommitOnBranch GraphQL mutationを使って「verified/signed」として表示されるため、リポジトリ所有者から見ても一見正規のコミットに見えるという付け込み方をしています。
永続化——Claude Code と VS Code の設定ファイルに居座る
本マルウェアが従来のクレデンシャルスティーラーと一線を画すのは、感染後の永続化メカニズムにAI支援開発ツールの設定ファイルを組み込んでいる点です。SocketとThe Hacker Newsによれば、ペイロードは以下の2か所への書き込みを試みます。
1点目はAnthropic Claude Codeの設定ファイル ~/.claude/settings.json に対する SessionStart フックの差し込みです。Claude Codeのhooks機構は、セッション開始時に任意のシェルコマンドを実行する仕様であり、ここに悪性スクリプトを登録されると、開発者が次回Claude Codeを起動するたびに自動で再実行されます。2点目はVS Codeのワークスペース設定 .vscode/tasks.json に "runOn": "folderOpen" のタスクを追加する手口で、対象プロジェクトフォルダを開いた瞬間にタスクが走るようVS Code側に「お墨付き」を与えてしまう構造です。
Socketはこの永続化を踏まえ、「npmパッケージのアンインストールや node_modules の削除では不十分」と明確に警告しています。汚染を受けたワークステーションは、ローカル設定ファイルとAI支援ツール設定の精査まで実施しない限り、駆除完了と見なせません。これはAI支援開発が当たり前になった現在、攻撃者がAIツール側の自動実行点を「OSの起動スクリプト」と同等の重要ターゲットとして認識し始めていることを示す事例と言えます。
ワーム伝播——SLSA証明済みパッケージの自動再公開
Miasmaが「ワーム」と呼ばれるのは、感染先で得たGitHub・npmトークンを使って、被害者のアクセス権が及ぶ範囲のパッケージを自動で再公開する伝播ロジックを持つためです。SafeDepとSocketの分析によれば、本ペイロードはGitHubに対しては、被害者トークンで書き込み可能なリポジトリを graphql 経由で列挙し、action.yml / action.yaml を読み出して、chore/add-codeql-static-analysis という名前のブランチに .github/workflows/codeql.yml を仕掛けるという手順を踏みます。コミットは createCommitOnBranch mutationを介して「verified」表示で記録され、所有者がプッシュしたコミットと見分けが付きにくくなります。
npmに対しては /-/whoami、/-/v1/search?text=maintainer:<user>、/-/npm/v1/tokens、/-/npm/v1/oidc/token/exchange/package/ 等のエンドポイントを呼び出して、被害者が公開権を持つパッケージを特定したうえで、OIDCトークン交換 → tarball再パッケージ化 → Sigstore(Fulcio・Rekor)での署名 → 公開、という流れで package-updated.tgz を新バージョンとして公開します。これにより、伝播先のパッケージにも有効なSLSA Provenance Attestationが付与され、外見上は完全に正規のリリースになります。
Wiz Researchが特に注意を促すのは、本バリアントから新規追加されたGCP・Azureのクラウドアイデンティティ収集モジュールです。従来のShai-Hulud系がシークレット抽出に重きを置いていたのに対し、Miasmaでは「感染端末からアクセス可能なクラウド側の全アイデンティティを列挙する」コードが加わっており、Wizは「これは攻撃者の関心がシークレット窃取から、クラウド環境そのものへのアクセス取得・横展開へとシフトしている可能性を示唆する」とまとめています。
TeamPCPのオープンソース化と「Shai-Hulud模倣の時代」
Mini Shai-Hulud本体は、TeamPCPという脅威アクター集団が複数月にわたって展開してきたCI/CDサプライチェーン攻撃用ツールで、これまでにBitwarden CLI・SAP・Mistral・TanStack・OpenAI・GitHubの内部リポジトリといった著名な事案が報じられています。BleepingComputerによれば、TeamPCPは2026年5月にMini Shai-Hulud のソースコードを公開し、他の脅威アクターが同じ手口を再利用できる状態にしました。Socketによれば、TeamPCPはBreachForums上でパッケージ侵害の「コンテスト」も実施しており、攻撃の参入障壁が継続的に下げられています。
これを踏まえると、Wiz・Socket・Aikidoのいずれも「TeamPCPによる直接実行か、公開ツールを使った模倣犯か、現時点では確定的な帰属はできない」と明確に表明しているのは妥当な判断です。MiasmaがオリジナルのShai-Hulud(『DUNE/砂の惑星』モチーフ)からギリシャ神話モチーフ(攻撃者作成リポジトリ名 spartan 等)へとリブランドしている点は、同じツールチェーンを別グループが自分の「ブランド」で運用している可能性も含めて読み取る必要があります。SocketはRussian-localeのチェック(Intl.DateTimeFormat().resolvedOptions().locale や LC_ALL・LANG がロシア語起点なら実行を回避する処理)が組み込まれている点にも触れており、これはGlassWormキャンペーンと共通の特徴です。
「アンインストールでは終わらない」前提で動く
Socket・Wiz・Aikidoの推奨は概ね一致しており、本件で特に強調されている点は「パッケージ削除では駆除完了にならない」「Provenanceや Trusted Publishingを単独の制御として信用してはいけない」の2点です。実務上の対応は、影響有無の確認、封じ込め、資格情報ローテーション、永続化痕跡の洗い出し、CI/CD設定の見直し、という流れで進めるのが妥当です。
まず、対象パッケージのインストール有無を確認するため、リポジトリの package-lock.json・npm-shrinkwrap.json・yarn.lock・pnpm-lock.yaml、SBOM、過去のCIログ、社内パッケージキャッシュを @redhat-cloud-services の影響バージョンで検索します。Wiz・Aikidoはバージョン一覧を公開しているため、これを基準に確認するのが確実です。次に、影響を受けたワークステーションは隔離し、ログを保全したうえで、AI支援ツールの設定ファイル(~/.claude/settings.json、.vscode/tasks.json、.github/workflows/codeql.yml、.github/setup.js)と一時ファイル痕跡(/tmp/p<random>.js、/tmp/b-*、tmp.0987654321.lock、ローカルBunバイナリ)を探索します。
資格情報側は、CI上のGitHubトークン・npmトークン、クラウドプロバイダ(AWS・Azure・GCP)の認証情報、Kubernetesサービスアカウント、Vaultトークン、Dockerレジストリ認証、SSH秘密鍵、GPG鍵、.env系ファイルに含まれるシークレットを全面的にローテーションする必要があります。GitHub組織側では、新規作成リポジトリ・想定外のワークフロー追加・createCommitOnBranchによる「verified」コミット・results-<timestamp>-<counter>.json 形式のファイル・Miasma: The Spreading Blight 文字列を含むリポジトリ説明を監査ログから探す作業も必要になります。
egress制御の観点では、CI/CDランナーと開発者ビルド環境のアウトバウンドに対して、npm install中に発生する想定外通信(特にクラウドメタデータエンドポイント、GitHub Contents APIの書き込み、ランタイムバイナリのダウンロード、レジストリのトークンエンドポイント)をアラート対象にする運用が有効です。AIプロバイダ系ドメインへの通信を許可している場合は、宛先パスとペイロード特徴も含めて検査する仕組みを併用しないと、本件のような「正規ドメイン上の偽パス」を抜けてくる送信を見逃す恐れがあります。インストールスクリプト自体を既定で無効化し、必要な依存だけ許可リスト化する --ignore-scripts ベースの運用も中長期的には検討に値します。
「正規パッケージの正規ルート公開」と「AI開発生態系の悪用」
Miasmaは、Mini Shai-Hulud派生という意味では既知のマルウェアファミリーの延長線上にありますが、(1) 信頼ある名前空間(Red Hat系公式)を踏み台にし、(2) SLSA・OIDC・Sigstoreという正規の供給網セキュリティ機構を「正しく」通過し、(3) AnthropicやGitHubといったAI開発時代のインフラドメインを送信先・永続化先として利用した、という3点で「サプライチェーン攻撃の新しい標準形」に近い要素を示した事例として読み解けます。特に、Claude CodeのSessionStartフックを永続化に組み込んだ手法は、AI支援開発ツールが「自動実行ポイント」として攻撃面に組み込まれ始めている事実を象徴しています。
本ブログでは過去にGlassWorm(GitHub経由)、Cline・Trivy(npm/PyPI)、偽OpenAI Privacy Filter(Hugging Face)と、サプライチェーン攻撃のプラットフォーム拡張を継続して取り上げてきました。Miasmaはこの系譜に「公式ベンダー名前空間の直接侵害+AIインフラドメイン悪用」という新軸を加えるものです。SLSA Provenanceは「どこから来たか」は証明できても「中身が悪意か」は保証しません。Trusted Publishingは「正しい鍵で出された」ことは示しても「正しい開発者の意図か」は問いません。これらの仕組みをすり抜ける攻撃が現実化した以上、防御側は「Provenance付きでも実行時挙動を観察する」「インストールスクリプトを既定で許可しない」「AIツール設定ファイルを保護対象に含める」といった、より深い前提変更を迫られています。
関連記事
- 偽OpenAI Privacy Filter(Hugging Face)——AIブランド悪用とサプライチェーン攻撃の交差点
- ClickFix偽Claudeインストーラー——AIツール偽装攻撃の新パターン
- GlassWorm——GitHubサプライチェーン攻撃の現在地
ソース
一次情報・公式情報
- Wiz Research:Miasma: Supply Chain Attack Targeting RedHat npm Packages(2026年6月1日)
- Socket Research Team:Mini Shai-Hulud Campaign Hits Red Hat Cloud Services npm Packages(2026年6月1日)
- Aikido:Red Hat npm Packages Compromised to Spread a Credential-Stealing Worm(2026年6月1日)
- JFrog Security Research:Shai-Hulud – Miasma: The Spreading Blight Hits Red Hat npm Packages(2026年6月1日)
- SafeDep:Mini Shai-Hulud “Miasma: The Spreading Blight” Hits @redhat-cloud-services(2026年6月1日)
- Mend:Miasma: Red Hat Cloud Services npm Packages Hit by a Mini Shai-Hulud-Style Campaign(2026年6月1日)
製品ベンダー情報
- Red Hat声明(BleepingComputer取材内):「特定のnpmパッケージに関するセキュリティ報告を認識しており、ただちに調査を開始し、npmレジストリから当該パッケージを削除した」
参考情報
- The Hacker News:Miasma Supply Chain Attack Compromises Red Hat npm Packages with Credential-Stealing Worm(2026年6月1日)
- BleepingComputer:Red Hat npm packages compromised to steal developer credentials(2026年6月1日)
- Ars Technica:Dozens of Red Hat packages backdoored through its official NPM channel(2026年6月1日)
slug: redhat-npm-miasma-shai-hulud-credential-worm

コメント