信頼できる大手ベンダーが公開しているパッケージなら安全——その思い込みが突き崩される事案が、また起きた。2026年6月1日、npmの@redhat-cloud-services名前空間で、Red Hatの正規パッケージにバックドアが仕込まれて公開されるサプライチェーン攻撃が発覚した。攻撃者はRed Hat従業員のGitHubアカウントを乗っ取り、CIの仕組みを悪用してコードレビューを丸ごと迂回。混入したのは、開発者の認証情報を盗みながら自己増殖する4.2MBのワーム「Miasma」だった。本稿では、この攻撃の何が新しく、開発組織が何を確認すべきかを解説する。
概要
- 発覚日:2026年6月1日。
- 対象:npmの@redhat-cloud-services名前空間。32パッケージ・96バージョンが汚染。合計の週間ダウンロードは約116,991回。
- 侵入経路:Red Hat従業員のGitHubアカウント乗っ取り。攻撃者が悪性のワークフローファイルとスクリプトをリポジトリに注入し、コードレビューを完全に迂回。
- 公開手段:改ざんした
ci.yamlワークフローがGitHub Actions のOIDCトークンを使って、バックドア入りパッケージを正規に公開した。 - ペイロード:4.2MBの難読化された認証情報窃取ワーム「Miasma」。npmインストール時の
preinstallスクリプトで実行される。
何が起きたのか
@redhat-cloud-servicesは、Red Hatのクラウドサービス関連のnpmパッケージが置かれた名前空間だ。2026年6月1日、この名前空間の複数パッケージに、攻撃者がバックドアを仕込んだ新バージョンを公開した。汚染は32パッケージ・96バージョンに及び、週あたり10万回以上ダウンロードされる規模だったため、影響は広範に及びうる。
攻撃の起点は、Red Hat従業員のGitHubアカウントの乗っ取りだった。攻撃者はその権限を使ってリポジトリに悪性のワークフローファイルとスクリプトを直接注入し、本来必要なはずのコードレビューのプロセスを一切通さずに変更を反映させた。さらに巧妙なのは公開の方法だ。改ざんされたci.yaml(GitHub Actionsの定義ファイル)が、GitHub Actionsの OIDC トークンを悪用してnpmへバックドア入りパッケージを公開した。これは「正規のCIパイプラインが正規のトークンで公開した」形になるため、外形上は何の異常もない正規リリースに見える。
混入したマルウェアは「Miasma」と名付けられた、4.2MBの難読化された認証情報窃取ワームだ。npmでインストールされる際のpreinstallスクリプトとして実行され、開発者やCI環境の機密情報を収集する。そして、被害者アカウントがアクセスできる他のパッケージにバックドア版を再公開することで感染を連鎖させる——典型的なワーム(自己増殖型)の挙動だ。
技術的な解説
「コードレビュー迂回」と「正規CIによる公開」が肝
通常、パッケージの公開には複数の安全装置がある。プルリクエストのレビュー、ブランチ保護、二要素認証などだ。今回の攻撃は、これらを正面から破るのではなく横から回り込んだ。
- アカウント乗っ取りで正規開発者になりすませば、リポジトリへの書き込み権限を得られる。
- ワークフローファイル(CI定義)自体を改ざんすると、レビュー対象の「アプリケーションコード」ではなく「ビルド・公開の仕組み」を乗っ取れる。多くの組織はアプリコードはレビューしても、CI定義の変更を同じ厳格さでレビューしていない。
- OIDCトークンによる公開は、長期の固定トークンを使わずに済む正規のモダンな仕組みだが、ワークフロー自体が汚染されていればそのまま悪用される。
結果として、「信頼された大手ベンダーが、正規のCIで、正規の方法で公開した」パッケージの中身だけが悪性、という最も見抜きにくい形が成立した。
preinstallスクリプトという実行トリガー
Miasmaはpreinstallライフサイクルスクリプトで動く。npmはパッケージのインストール時にpreinstall/install/postinstallといったスクリプトを自動実行する仕様で、ここに悪性コードを置けば、開発者がnpm installした瞬間に——コードを一行も呼び出していなくても——マルウェアが走る。これはnpm系サプライチェーン攻撃の常套手段だ。
何を盗み、どう広がるのか
Miasmaが収集する対象は、現代の開発・クラウド環境の「鍵束」そのものだ。
- AWS/GCP/Azureのクラウド認証情報
- GitHub Actionsのシークレット、npm/PyPIの公開トークン
- SSH鍵、GPG鍵
- Kubernetes設定(kubeconfig)、Docker認証情報
.envファイル(環境変数に書かれた各種シークレット)
これらを盗むと、被害者アカウントの権限で別のパッケージにバックドア版を再公開し、感染を次の開発者・組織へ広げる。1人の開発者の侵害が、その人が管理する全パッケージの利用者へ波及する構造だ。
Mini Shai-Huludとの関係
Miasmaは、2026年5月にTeamPCPがオープンソース化した「Mini Shai-Hulud」と強い類似性があるとされる。攻撃ツールが公開されると、他の攻撃者がそれを複製・改変して再利用できるようになり、同種の攻撃が増殖する。自己増殖ワームのコードが出回ったことで、「Red Hatという別の標的に対する新たな波」が生まれた、という構図だ。npmの自己増殖ワームが一過性の事件ではなく、繰り返し襲来する脅威になったことを示している。
日本企業への影響
npmは日本のWeb開発・クラウド開発で事実上の標準であり、この攻撃は国内の開発組織に直接関係する。
- 「大手の名前空間だから安全」は通用しない:Red Hatほどの企業でも従業員アカウント経由で汚染された。信頼の根拠を「公開元の知名度」に置くのは危険だ。
- CI/CDが侵入の本丸になる:日本企業もGitHub ActionsなどでCIを組んでいる。ワークフロー定義の改ざんやシークレット窃取は、自社のパイプラインでも起こり得る。
- 開発端末・CIに鍵が集中している:クラウド鍵・SSH鍵・
.envが開発環境に散在していると、1台の侵害でクラウド本番環境まで連鎖する。 - 自動アップデートが被害を広げる:バージョンを固定せず最新を取り込む運用だと、汚染版を自動で引き込んでしまう。
今すぐ確認すべきポイント
1. 影響パッケージの利用有無を確認し、シークレットを総ローテーションする
@redhat-cloud-services配下の汚染バージョンを、自社のプロジェクトやCIで取り込んでいないかを確認する。少しでも該当・疑いがあれば、CIシークレット・クラウド認証情報・SSH鍵・npmトークンをただちに再発行(ローテーション)する。Miasmaは鍵束を盗む前提なので、「念のため」ではなく必須の対応だ。
2. インストールスクリプトの自動実行を止める
preinstall/postinstallの自動実行は、サプライチェーン攻撃の主要な発火点だ。次を検討する。
# ライフサイクルスクリプトを実行せずにインストール
npm install --ignore-scripts
# 恒久設定(プロジェクト/組織のnpm設定に)
npm config set ignore-scripts trueスクリプトを本当に必要とするパッケージは限られる。原則オフにし、必要なものだけ個別に許可する。
3. バージョンを固定し、取り込みを遅らせる
lockfile(package-lock.json)でバージョンを固定し、npm ciでロック済みの正確なバージョンだけを入れる。公開直後の最新版を即座に取り込まず、一定のクールダウン期間(数日)を置く運用や、内部プロキシ/レジストリファイアウォールで既知の悪性版をブロックする仕組みも有効だ。
4. CI/CDのワークフローと権限を守る
今回の起点はアカウント乗っ取りとワークフロー改ざんだった。次を点検する。
- 開発者・メンテナのアカウントにフィッシング耐性のあるMFA(FIDO2/Passkey)を必須化する
- ワークフローファイル(
.github/workflows/)の変更を、アプリコードと同等以上に厳格にレビューする。CODEOWNERSで保護する - OIDC/公開トークンの権限を最小化し、公開は保護されたブランチ・限定環境からのみ許可する
- npmパッケージ公開に二要素認証・Trusted Publishingを使い、不審な公開を検知する
5. 開発環境からシークレットを排除する
.envに長期の固定鍵を平置きせず、シークレットマネージャや一時的な認証情報(短命トークン)に移行する。盗まれても短時間で無効になる設計にしておけば、窃取されても被害を抑えられる。インシデントが疑われる場合は、インシデント対応手順に沿って影響範囲の特定と封じ込めを行う。
参考情報
- Aikido Security: Red Hat npm Packages Compromised to Spread a Credential-Stealing Worm
- Cybersecurity Dive: Dozens of Red Hat npm packages targeted in supply chain attack
- GitGuardian: 三つのサプライチェーン攻撃(npm/PyPI/Docker Hub)に関する分析
- Unit 42(Palo Alto Networks): The npm Threat Landscape — Attack Surface and Mitigations