
【読了時間3分】2026年5月npm史上最大級の攻撃事件が発生#
2026年5月19日、JavaScriptエコシステムを震撼させる大規模なサプライチェーン攻撃が発生しました。わずか22分間で317個のnpmパッケージが侵害され、数百万のダウンロードを誇る人気パッケージも被害を受けました。本記事では、この「Mini Shai-Hulud」と呼ばれる攻撃の全貌と対策を詳しく解説します。
【緊急】被害の概要と影響範囲#
攻撃の基本情報#
- 発生日時: 2026年5月19日 01:44-02:06 UTC(22分間)
- 侵害アカウント: atool ([email protected])
- 被害パッケージ数: 317個
- 悪意のあるバージョン数: 637個
主要被害パッケージと月間ダウンロード数#
特に深刻な被害を受けた人気パッケージは以下の通りです:
- size-sensor: 420万ダウンロード/月
- echarts-for-react: 380万ダウンロード/月
- @antv/scale: 220万ダウンロード/月
- timeago.js: 115万ダウンロード/月
- @antv/g-canvas: 100万ダウンロード/月
これらの数値からも、今回の攻撃がいかに広範囲に影響を与えたかが分かります。
攻撃手法の詳細解析#
2段階の自動攻撃パターン#
攻撃は2つの波に分かれて実行されました:
第1波(01:39-01:56 UTC)
- 約317バージョンを公開
- 01:39-01:49に4つの初期テスト公開
- その後本格的な一括公開
第2波(02:05-02:06 UTC)
- 約314バージョンを公開
- 同じパッケージの第2バージョン
悪意のあるペイロードの特徴#
攻撃に使用された悪意のあるコードは以下の特徴を持ちます:
- サイズ: 498KBの難読化されたBunスクリプト
- 実行方法:
preinstallフック(bun run index.js) - SHA256:
a68dd1e6a6e35ec3771e1f94fe796f55dfe65a2b94560516ff4ac189390dfa1c
【重要】狙われる認証情報の種類#
今回の攻撃では、以下の認証情報が標的となりました:
クラウドサービス関連#
- AWS認証情報(環境変数、設定ファイル、EC2メタデータ、ECSコンテナメタデータ)
- Secrets Manager
- GCP サービスアカウント
- Azure認証情報
開発ツール関連#
- GitHub Personal Access Tokens
- npmトークン
- SSH キー
- Docker認証情報
その他のサービス#
- Kubernetes サービスアカウントトークン
- HashiCorp Vault トークン
- データベース接続文字列
- Stripe キー
- Slack トークン
巧妙な永続化メカニズム#
CI/CD環境での永続化#
攻撃者は以下の方法でCI/CD環境に永続化を図ります:
GitHub Actions OIDC トークンの悪用
- npm公開トークンとの交換
- Sigstore(Fulcio + Rekor)を使用した偽の署名付きアーティファクト作成
ワークフローファイルの改ざん
.github/workflows/codeql.ymlへの注入- ワークフロー名「Run Copilot」で偽装
toJSON(secrets)をformat-results.txtにダンプ
AI開発環境の乗っ取り#
現代の開発環境に合わせ、AI コーディングツールも標的となります:
- Claude Code:
SessionStartフックの注入 - Codex: 同様のフック機能の悪用
- VS Code:
tasks.jsonで"runOn": "folderOpen"設定
システムレベルの永続化#
Linux環境
- systemdユーザーサービス(
kitty-monitor.service)
macOS環境
- LaunchAgent(
com.user.kitty-monitor.plist)
GitHub を利用した巧妙なC2通信#
Dead-Drop C2 バックドア#
攻撃者は以下の仕組みでリモート操作を可能にします:
GitHub コミット検索の悪用
- 1時間ごとにGitHubのコミット検索APIをポーリング
- キーワード「firedalazer」を含むコミットメッセージを監視
RSA-PSS署名による指令
- フォーマット:
firedalazer <base64_url>.<base64_signature> - 署名検証後、指定URLから任意のPythonコードを実行
- フォーマット:
偽装されたUser-Agent
python-requests/2.31.0で正常なリクエストに偽装
データ流出の手法#
盗まれた認証情報は以下の方法で流出されます:
- 公開GitHubリポジトリの作成: 侵害されたトークンで作成
- Gitオブジェクトとしてコミット: 盗んだデータをコミット履歴に埋め込み
- Duneテーマの命名規則:
{word1}-{word2}-{number}パターン- word1例: sardaukar, mentat, fremen, atreides など
- word2例: sandworm, ornithopter, heighliner など
インポスターコミットによる巧妙な配信#
GitHub フォークオブジェクト共有の悪用#
攻撃者はoptionalDependenciesを使って二重の配信経路を確保:
- 対象リポジトリ:
antvis/G2 - 手法: 孤立コミット(orphan commit)の作成
- 偽装: 作成者情報の偽装
- メッセージ: “New Package”
検出が困難な理由#
- ブランチ履歴に表示されない孤立コミット
- 対象リポジトリへの書き込み権限不要
preinstallフックがブロックされても実行可能
【保存版】対策と検出方法#
侵害指標(IoC)チェックリスト#
パッケージレベル
- 2026年5月19日 01:44-02:06 UTC に
atoolが公開したパッケージ -
preinstallスクリプトにbun run index.js -
optionalDependenciesに@antv/setup: github:antvis/G2#<commit-sha>
ファイルシステムレベル
-
.claude/settings.jsonのSessionStartフック -
.vscode/tasks.jsonの"runOn": "folderOpen"タスク -
~/.local/share/kitty/cat.py -
~/.local/bin/gh-token-monitor.sh -
/var/tmp/.gh_update_state
ネットワークレベル
-
169.254.169.254(EC2メタデータ)へのリクエスト -
169.254.170.2(ECSコンテナメタデータ)へのリクエスト -
firedalazerキーワードを含むGitHubコミット
推奨される対策#
即座に実行すべき対策
影響を受けた可能性のあるパッケージの確認
npm lsでインストール済みパッケージを確認- 該当する日時に更新されたパッケージの特定
認証情報のローテーション
- npm トークン
- GitHub Personal Access Token
- AWS/GCP/Azure 認証情報
- データベース接続文字列
システムの清浄化
- systemd/LaunchAgent サービスの確認と削除
- 不審なファイルの除去
- CI/CDワークフローの検査
長期的な対策
- **Package Manager Guard (pmg)**の導入検討
- dependency cooldown設定による新規バージョンの一時的ブロック
- 定期的なセキュリティ監査の実施
過去の攻撃との関連性#
今回の攻撃で使用されたペイロードは、3週間前のSAP侵害で使用された「Mini Shai-Hulud toolkit」と同一の特徴を示しています:
- 同じスキャナーアーキテクチャ
- 同じ認証情報正規表現セット
- 同じ難読化パターン
これは組織的な攻撃グループによる継続的な活動を示唆しています。
まとめ:現代のサプライチェーン攻撃の新たな脅威#
今回のMini Shai-Hulud攻撃は、現代のソフトウェア開発環境に対する新たな脅威を浮き彫りにしました。特に注目すべき点は:
- AI開発ツールの標的化: Claude Code、Codex、VS Codeなど現代的な開発環境への適応
- GitHub機能の悪用: フォークオブジェクト共有、コミット検索API、OIDCトークンの巧妙な活用
- 多層的な永続化: システムレベル、CI/CD、AI環境での包括的な永続化
開発者および組織は、単純なパッケージ検証だけでなく、CI/CD パイプライン、開発環境、認証情報管理の包括的なセキュリティ見直しが急務です。
詳細は元記事を参照してください。また、最新のセキュリティ情報については継続的な情報収集を推奨します。
出典: Mini Shai-Hulud Strikes Again: 314 npm Packages Compromised



