🛡 概要
npm(Node Package Manager)で「Shai-Hulud」マルウェアを含む改ざん版が多数公開され、開発者やCI/CD環境のシークレット(GitHub・npmトークン、クラウド認証情報など)が窃取されGitHub上のリポジトリに自動投稿されました。報告時点で少なくとも数百の著名パッケージに改ざん版が混入し、GitHub側では本攻撃に関連するエントリが2万7千件超確認されています。攻撃は継続中で、観測では30分ごとに約1,000の新規リポジトリが作成されるなど急拡大が見られます。
🔍 技術詳細
攻撃者は正規パッケージを自動取得し、package.json に悪性スクリプト(preinstallなどのライフサイクルスクリプト)を注入して再公開します。改ざん公開には侵害されたメンテナーアカウントが悪用されました。新しいShai-Hulud亜種は主に2ファイルで構成されます。setup_bun.js はBunインストーラーに偽装したドロッパーで、bun_environment.js は約10MBと大型で、巨大な16進エンコード文字列、反解析ループ、文字列抽出関数の難読化など「極端な難読化」が施されています。実行はpreinstall段階のみでトリガーされ、環境変数やファイルからGitHub・npm・AWS/GCP/Azure等の資格情報を収集し、以下のファイルを生成します: cloud.json / contents.json / environment.json / truffleSecrets.json。この後、GitHub APIを用いて「Shai-Hulud」を参照する名称・説明(例: “Sha1-Hulud: The Second Coming”)のリポジトリを自動作成し、エンコードした秘密情報をコミット・公開します。さらに、一定条件(GitHub認証やリポジトリ作成、GitHubトークン取得、npmトークン探索が全て失敗)を満たすと、被害端末のホームディレクトリ全体を上書きする破壊的ステップが発動することが確認されています。初出(9月中旬)ではTruffleHogを使った自己増殖的な秘密情報収集が観測され、今回は規模・速度ともに大幅に拡大。Zapier、ENS Domains、PostHog、AsyncAPI、Postman関連の著名パッケージ名でも改ざん版が観測されています(必ずしも公式が侵害されたわけではなく、公開権限のあるアカウントが悪用された事案を含みます)。現時点で本件にCVE/CVSSの割当は公表されていません。
⚠ 影響
- 機密流出: GitHub・npm・クラウドプロバイダのトークン/キー、CI/CDシークレットの外部公開
- 横展開: 流出トークンを用いた組織内/クラウド環境への不正アクセス
- 破壊行為: 条件一致時にホームディレクトリが上書きされ、開発環境が使用不能
- サプライチェーン汚染: 下流プロジェクト・顧客環境へ悪性コードが伝播
🛠 対策
- インベントリ特定: 社内の全ビルド/実行環境で改ざん版の導入有無を棚卸(ロックファイル、アーティファクトリ/プロキシのDLログ)。
- 即時封じ込め: 該当パッケージを安全版へ固定・置換。影響端末を隔離。
- 資格情報ローテーション: npm、GitHub、クラウド(AWS/GCP/Azure)の全トークン/キーを強制失効・再発行。GitHubのFine-grained PATと短命トークン(OIDC等)を優先。
- ビルドの安全化: CIで postinstall 等のライフサイクルスクリプトを無効化(例: npm ci –ignore-scripts、npm_config_ignore_scripts=true)。
- 依存管理: バージョン固定(lockfile厳格適用)、信頼済みレジストリ/プロキシ経由の取得、SCA/署名(プロビナンス)検証を導入。
- アカウント防御: npm/GitHubメンテナーに強制2FA、発行トークンの最小権限化、使用状況の監査。
- ネットワーク制御: ビルドエージェントからの外向き通信を最小化し、api.github.com への想定外POST/リポジトリ作成を遮断・監視。
- バックアップ/復旧: 開発端末のユーザーデータを世代管理バックアップ。ホームディレクトリ消去時の迅速な復旧手順を整備。
📌 SOC視点
- ホスト/EDR: npm/nodeの子プロセスからのGit操作・curl/opensslなどネットワークユーティリティ実行、$HOME直下の大量ファイル上書き、4種のJSONファイル生成(cloud.json, contents.json, environment.json, truffleSecrets.json)を監視。環境変数 npm_config_lifecycle_event=preinstall を含む実行痕跡も相関。
- プロキシ/DNS: CIランナーから api.github.com への異常なPOST/PUT/GraphQL頻度、短時間での多数Repo作成の試行を検知。
- GitHub監査ログ: repo.create、create、oauth_authorization、access_tokenの大量発行/権限拡張、説明文に “Sha1-Hulud: The Second Coming” を含む自動生成リポジトリをハント。
- リポジトリ衛生: 不審なPull/Push元IP、短時間でのマスコミット、base64/hexに大量にエンコードされたJSONのコミットを検出。
- アーティファクトリ: 特定バージョンへの短時間集中的DL、未知メンテナー署名のパッケージ取得をアラート。
📈 MITRE ATT&CK
- Initial Access: T1195 Supply Chain Compromise(依存関係改ざんで侵入)
- Credential Access/Collection: T1119 Automated Collection、T1552.001 Unsecured Credentials: Credentials In Files(env/設定から資格情報収集、TruffleHog活用)
- Defense Evasion: T1027 Obfuscated/Compressed Files & Information(大型JSの極度な難読化)
- Execution: T1059.007 Command and Scripting Interpreter: JavaScript(npm preinstallでJS実行)
- Command and Control/Exfiltration: T1071.001 Web Protocols、T1567.001 Exfiltration to Code Repository(GitHub API/リポジトリへ流出)
- Impact: T1485 Data Destruction(ホームディレクトリ上書きによる破壊)
- Valid Accounts: T1078(侵害メンテナーアカウントで改ざん版公開)
🏢 組織規模別助言
- 〜50名: 影響端末の隔離とトークン全失効を最優先。CIで –ignore-scripts をデフォルト化、依存のバージョン固定とSCAを導入。GitHub/ npmは2FA必須化。
- 50〜500名: 私設npmプロキシ/アーティファクト管理を導入し、許可リスト方式に移行。GitHub監査ログの常時収集、インシデント手順に秘密情報ローテーションの自動化スクリプトを組み込む。
- 500名以上: ソフトウェアサプライチェーンセキュリティ(SCA、SBOM、署名/プロビナンス検証、PRゲート)を包括導入。CIランナーのegress制御、ゼロトラスト認証(短命・スコープ限定トークン)徹底、紫チーム演習で検知精度を継続評価。
🔎 類似事例
- event-stream(2018)依存関係の乗っ取りによるマルウェア混入
- ua-parser-js(2021)悪意あるバージョンの一時公開
- coa / rc / ctx(2021)メンテナー侵害によるパッケージ改ざん
- IconBurst(2022)npmタイポスクワッティング大量投下
- colors / faker(2022)破壊的コミットによる下流影響
- 3CX(2023)、xz backdoor(2024)サプライチェーン侵害の代表例
🧭 次の一手
- 直ちに: 影響パッケージの特定・除去、全トークンのローテーション、影響端末フォレンジック($HOME上書き試行痕跡、4JSONファイルの有無、npm/node実行履歴)。
- 今週中に: CIで –ignore-scripts を標準化、依存固定とSCAスキャンのパイプライン組込み、GitHub監査ログの検知ルール追加(repo.createの異常)、バックアップ検証。
- 継続的に: メンテナー2FA徹底、短命トークン化、SBOM/署名検証を運用に統合。
- 参考: ベンダ各社のIOC/感染パッケージ一覧、プラットフォーム(GitHub/npm)の最新対策アナウンスを随時確認。


