npmサプライチェーン攻撃「Mini Shai-Hulud」の解析レポート:Bunランタイムを悪用した高度な認証情報窃取手法
2026年5月28日、npmエコシステムにおいて「Mini Shai-Hulud」と命名された高度なサプライチェーン攻撃キャンペーンが確認されました。この攻撃は、わずか4時間の間に14個の悪意のあるパッケージを配布し、クラウド環境およびCI/CDパイプラインから高価値な認証情報を即座に抽出することを目的としています。本稿では、この攻撃の技術的な実行フロー、ステルス性を高めるための進化、およびインフラエンジニアが講じるべき防御策について解析します。
1. 攻撃の起点:タイポスクワッティングとメタデータ偽装
攻撃者は、企業環境で広く利用されているOpenSearchやElasticSearchに関連するエコシステムを標的にしました。vpmdhajという識別子の新規メンテナアカウントにより、以下の巧妙な手法が用いられました。
- タイポスクワッティング:
opensearch-setupやenv-config-managerといった、公式のユーティリティパッケージと誤認しやすい名称を採用。開発者の入力ミスや、公式ツールであるという先入観を悪用します。 - メタデータの操作: パッケージの
package.json内のリポジトリURLを、実際のOpenSearch公式GitHubリポジトリに書き換えることで、自動監査ツールや開発者の目視確認を欺く工作がなされていました。
2. 実行メカニズム:npmライフサイクルホックの悪用
この攻撃の極めて危険な点は、開発者がパッケージをrequire()やimportで明示的に呼び出す必要がないことです。攻撃コードは、npmの標準機能であるpreinstallホックを利用して実行されます。
{
"name": "opensearch-setup",
"version": "1.0.0",
"scripts": {
"preinstall": "node ./scripts/setup.js"
}
}
開発者がターミナルでnpm install <package-name>を実行した瞬間、npmクライアントは自動的にpreinstallスクリプトをトリガーします。これにより、静的解析やコードレビューが行われる前に、悪意のあるペイロードがローカル環境やビルドサーバー上で即座に実行されます。
3. ステルス性の進化:第2世代(Gen-2)ステージャーの分析
「Mini Shai-Hulud」キャンペーンでは、短期間のうちに検知回避技術が進化しました。特に第2世代における「Living off the Land (LotL)」への移行は注目すべき点です。
第1世代 (Gen-1)
初期のペイロードは、攻撃者のC2(Command and Control)サーバーに直接接続し、二次的なバイナリをダウンロードする形式でした。これはネットワークの外部接続監視(Egress Monitoring)によって比較的容易に検知可能です。
第2世代 (Gen-2): Living off the Land (LotL)
検知を回避するため、攻撃者は正規のバイナリを悪用する手法へと移行しました。
- 正規ランタイムの取得: スクリプトは、公式のGitHubリリースページ(
github.com/oven-sh/bun/releases/download)から、署名済みの正規Bunランタイム (v1.3.13)を直接ダウンロードします。 - ペイロードの実行: パッケージ内に隠蔽された約195KBの悪意のあるスクリプトを、ダウンロードした正規のBunランタイムを使用して実行します。これにより、EDR(Endpoint Detection and Response)システム上では、信頼されたバイナリによる標準的なプロセスとして処理され、異常検知をすり抜けます。
4. 標的資産とポストエクスプロイトの影響
実行されたペイロードは、クラウドネイティブ環境の「心臓部」を標的にスキャンを開始します。特にAWS環境とCI/CDパイプラインが主要なターゲットとなります。
- AWSインフラの認証情報窃取:
- EC2インスタンスメタデータサービス (IMDSv2) およびECSタスクメタデータへのアクセスを試行し、一時的なIAMロール情報を取得します。
- 16以上のAWSリージョンにわたり、AWS Secrets Managerを自動スキャンし、APIキー、データベース認証情報、暗号化キーを抽出します。
- CI/CDパイプラインの乗っ取り:
- 実行環境がGitHub Actionsであるかを識別し、環境変数に格納された
GITHUB_TOKENやその他のシークレットを標的にします。これにより、リポジトリの操作や、正規のビルド成果物へのバックドア注入が可能になります。 - サプライチェーンの連鎖的侵害:
- 盗み出したnpmデプロイトークンを使用して、被害者が管理する他の正規オープンソースパッケージに不正なアップデートを公開し、被害を拡大させます。
5. 推奨される防御策と緩和策
このような高流動的なサプライチェーン攻撃から環境を保護するために、以下の技術的統制を推奨します。
I. スクリプトの自動実行無効化
ライフサイクルホックの悪用を防ぐ最も効果的な手段は、インストール時のスクリプト実行を明示的に禁止することです。
npm install --ignore-scripts
```
```bash
npm config set ignore-scripts true
```
#### II. 認証情報の即時ローテーション
2026年5月28日以降にアクティブだったビルド環境や、不審なパッケージをインストールした形跡がある場合は、以下の情報を直ちに更新してください。
* AWS IAMユーザーおよびSTS一時認証情報
* HashiCorp Vaultアクセストークン
* GitHub ActionsのPersonal Access Tokens (PAT) およびリポジトリシークレット
* npmレジストリのパブリッシングトークン
#### III. ネットワークおよびプロセスの監視強化
* <b>外部接続フィルタリング</b>: Node.jsやpnpmプロセスから、`github.com`のリリースセクションへの予期しないバイナリダウンロードが発生していないか監視してください。
* <b>プロセス監査</b>: 環境変数 `__DAEMONIZED=1` を伴って初期化されたプロセスの有無を確認してください。これは「Mini Shai-Hulud」がバックグラウンドで永続化を試みる際のシグネチャの一つです。
## 6. 結論
「Mini Shai-Hulud」は、正規のランタイムを悪用してセキュリティ製品を回避する、現代的なサプライチェーン攻撃の典型例です。サードパーティの依存関係を「デフォルトで信頼しない」ゼロトラストの原則に基づき、依存関係のロック(`package-lock.json`等の厳格な運用)とスクリプト実行の制限を徹底することが不可欠です。
## Summary
* <b>攻撃手法</b>: タイポスクワッティング、`preinstall`ホックによる即時実行、Bunランタイムを用いたLotL攻撃。
* <b>主な標的</b>: AWS Secrets Manager、GitHub Actionsトークン、npmデプロイトークン。
* <b>対策</b>: `--ignore-scripts`の徹底、不審なバイナリダウンロードの監視、および侵害が疑われる場合の迅速なトークンローテーション。</package-name>