
Shai-Huludサプライチェーン攻撃に対する防御
npmパッケージのサプライチェーン攻撃(2025年9月のオリジナルShai-Huludおよび2025年11月のShai-Hulud 2.0)から侵害されたパッケージを検出するセキュリティツール。package.jsonとpackage-lock.jsonの両方をスキャンして、インストールされている正確なバージョンと侵害指標(IoC)を検出します。PythonとNode.jsの両方の実装が利用可能で、一元管理されたYAML設定により簡単にメンテナンスできます。
最新情報: 2025年11月24日 - 738以上の侵害パッケージ を追跡し、1,291のユニークな package@version の組み合わせ を記録。オリジナルのShai-HuludとShai-Hulud 2.0の両方の攻撃バリアントを検出します。
マルチエコシステムスキャンについては、ore-mal-pkg-inspector を参照してください。
マルチエコシステムの悪意あるパッケージスキャン(npm、PyPI、Maven、RubyGems、Go、Cargo)については、ore-mal-pkg-inspector をご覧ください。動的な脅威インテリジェンスを備えた包括的な悪意あるパッケージスキャナです。
OreNPMGuardは、npmパッケージに対するShai-Hulud攻撃防御に特化しています。
Shai-Huludは、2025年9月14日から15日にかけてnpmパッケージを侵害し始めた自己複製型ワームであり、npmエコシステムにおける初の成功した自己増殖攻撃であり、これまでに観測された中で最も深刻なJavaScriptサプライチェーン攻撃の1つです。フランク・ハーバートの『デューン』シリーズに登場する巨大なサンドワームにちなんで名付けられたこのマルウェアは、複数の亜種に進化しています。
オリジナル攻撃は、200以上のnpmパッケージ(本ツールで追跡)に感染し、パッケージごとに複数のバージョンが影響を受けました。
2025年11月に新たな亜種が出現し、大きな変化がありました:
preinstall スクリプトを使用(postinstall だけでなく)setup_bun.js および bun_environment.js(bundle.js に加えて)参照: Wiz Research - Shai-Hulud 2.0 ブログ記事
患者ゼロ: 攻撃は、侵害されたnpmアカウント "techsupportrxnt" によって2025年9月14日17:58:50 UTCに公開された rxnt-authentication パッケージから始まりました。
攻撃チェーン(オリジナルShai-Hulud):
postinstall スクリプトを実行し、bundle.js(3MB以上のJavaScriptペイロード)を実行data.json(二重base64エンコード)に保存webhook[.]site に流出させる悪意あるGitHub Actionsワークフロー(.github/workflows/shai-hulud-workflow.yml)を注入postinstall フックを追加攻撃チェーン(Shai-Hulud 2.0 - 2025年11月):
preinstall スクリプトを実行し、setup_bun.js または bun_environment.js(新しいペイロードファイル)を実行cloud.json、contents.json、environment.json、truffleSecrets.json ファイルを作成.github/workflows/discussion.yaml を作成.github/workflows/formatter_*.yml を作成(その後ワークフローを削除して活動を隠蔽)docker run --rm --privileged -v /:/host によるルートアクセス試行ghp_*、gho_*)、npm認証トークンオリジナルShai-Hulud(2025年9月):
@ctrl/tinycolor、ngx-bootstrapなどの人気パッケージを含む)Shai-Hulud 2.0(2025年11月):
確認された認証情報の窃取(約20,000のリポジトリを分析):
重要: Wiz Researchは被害者間での流出が発生していることを確認しています。これは以下を意味します:
調査への影響: リポジトリ内の流出データを確認する際は、そのデータが実際にあなたの組織のものか、他の被害者のものかを検証してください。
この攻撃は、2025年8月のs1ngularity/Nx侵害に直接関連しており、最初のGitHubトークンの窃取により、より広範なサプライチェーン攻撃が可能になりました。初期のShai-Hulud被害者の多くは、s1ngularity攻撃の既知の被害者でした。また、セキュリティ研究者は、このキャンペーン内でAI生成コンテンツが統合されていることにも注目しており、悪意のあるbashスクリプトの生成にLLMが使用された可能性が中程度の確信度で示されています。
オリジナルShai-Huludキャンペーン:
rxnt-authentication が公開(「患者ゼロ」)Shai-Hulud 2.0キャンペーン:
PyYAML が必要(pip install pyyaml)js-yaml が必要(npm install js-yaml)# 実行可能にする
chmod +x shai_hulud_scanner.py
# 単一の package.json をスキャン
python3 shai_hulud_scanner.py ./package.json
# 正確なバージョンを確認するために package-lock.json をスキャン
python3 shai_hulud_scanner.py ./package-lock.json
# プロジェクトディレクトリ全体をスキャン
python3 shai_hulud_scanner.py ./my-project
# カレントディレクトリをスキャン
python3 shai_hulud_scanner.py .
# 最初に依存関係をインストール
npm install
# 実行可能にする
chmod +x shai_hulud_scanner.js
# 単一の package.json をスキャン
node shai_hulud_scanner.js ./package.json
# 正確なバージョンを確認するために package-lock.json をスキャン
node shai_hulud_scanner.js ./package-lock.json
# プロジェクトディレクトリ全体をスキャン
node shai_hulud_scanner.js ./my-project
# カレントディレクトリをスキャン
node shai_hulud_scanner.js .
✅ 完全一致検出: 既知の侵害バージョンと正確にバージョンが一致するパッケージを識別
⚠️ 潜在的なリスク検出: 同じ名前で異なるバージョンのパッケージにフラグを付ける(リスクがある可能性あり)
🔍 二重ファイルサポート: package.json(宣言された依存関係)とpackage-lock.json(実際にインストールされたバージョン)の両方をスキャン
📦 包括的なカバレッジ: package-lock.jsonのスキャンには、ネストされた依存関係と推移的パッケージが含まれる
🔄 再帰的スキャン: node_modulesをスキップしながら、すべてのサブディレクトリを自動的にスキャン
📋 詳細なレポート: パッケージ名、バージョン、依存関係セクション、影響を受けるバージョンを表示
🔎 IoC検出: オリジナルのShai-HuludとShai-Hulud 2.0の両方の侵害指標を識別:
"postinstall": "node bundle.js" フック、bundle.js ファイル、shai-hulud-workflow.yml"preinstall" フック、setup_bun.js、bun_environment.js、discussion.yaml、formatter_*.yml ワークフローwebhook.site 流出エンドポイントへの参照、SHA1HULUDランナーパターン、Docker特権昇格🚨 クリティカル(侵害されたパッケージが見つかった場合):
🚨 CRITICAL: Found 2 CONFIRMED compromised packages:
• @ctrl/deluge v7.2.2 in dependencies
Affected versions: 7.2.2, 7.2.1
• ngx-bootstrap v19.0.3 in devDependencies
Affected versions: 18.1.4, 19.0.3, 20.0.4, 20.0.5, 20.0.6, 19.0.4, 20.0.3
⚠️ 警告(バージョン不一致):
⚠️ WARNING: Found 1 packages with different versions:
• @ctrl/deluge v7.2.0 in dependencies
Known affected versions: 7.2.2, 7.2.1
✅ クリーン:
✅ No affected packages found
npm uninstall <package-name>npm cache clean --forcerm -rf node_modules