
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"postinstall": "node bundle.js" を検索bundle.js ファイル(3MB以上、悪意のあるペイロードを含む)を探す.github/workflows/shai-hulud-workflow.yml ファイルを確認"preinstall" フックを検索setup_bun.js および bun_environment.js ペイロードファイルを探すcloud.json、contents.json、environment.json、truffleSecrets.json を確認.github/workflows/discussion.yaml(セルフホステッドランナー付き)を確認パッケージデータは affected_packages.yaml に一元管理されています。新しい侵害パッケージを追加するには:
affected_packages.yaml を編集- name: "package-name"
versions: ["1.0.0", "1.0.1"]
この一元管理アプローチにより、新しい脅威が発見されたときに複数のファイルを更新する必要がなくなります。
# 中央スキャンスクリプトを作成
curl -O https://your-domain.com/shai_hulud_scanner.py
chmod +x shai_hulud_scanner.py
# 複数のプロジェクトを一括スキャン
for dir in /projects/*/; do
echo "Scanning $dir"
python3 shai_hulud_scanner.py "$dir"
done
# GitHub Actionsの例
- name: Scan for Shai-Hulud packages
run: |
curl -O https://your-domain.com/shai_hulud_scanner.js
npm install js-yaml
node shai_hulud_scanner.js .
if [ $? -ne 0 ]; then
echo "SECURITY ALERT: Compromised packages detected!"
exit 1
fi
# セキュリティツールキットに追加
cp shai_hulud_scanner.py /usr/local/bin/
cp shai_hulud_scanner.js /usr/local/bin/
cp affected_packages.yaml /usr/local/bin/
# 簡単にアクセスできるようにエイリアスを作成
echo 'alias scan-shai="python3 /usr/local/bin/shai_hulud_scanner.py"' >> ~/.bashrc
postinstall、Shai-Hulud 2.0は preinstall を使用(ビルド環境での露出が増加)オリジナルShai-Hulud(2025年9月):
"postinstall": "node bundle.js"bundle.js(通常3MB以上のミニファイドJavaScript)webhook.site ドメインへの参照.github/workflows/shai-hulud-workflow.ymlshai-hulud という名前のブランチShai-Hulud 2.0(2025年11月):
"preinstall": "node setup_bun.js" または "preinstall": "node bun_environment.js"setup_bun.js、bun_environment.js(bundle.js に加えて)cloud.json、contents.json、environment.json、truffleSecrets.json.github/workflows/discussion.yaml(runs-on: self-hosted および RUNNER_TRACKING_ID: 0 付き).github/workflows/formatter_*.yml(パターンマッチング、シークレット流出に使用)両方の亜種に共通:
webhook.site ドメインへの参照preinstall スクリプト(Shai-Hulud 2.0の実行フェーズ)を検出setup_bun.js および bun_environment.js をスキャンcloud.json、contents.json、environment.json、truffleSecrets.json を識別discussion.yaml および formatter_*.yml ワークフローパターンを検出prevention/block-shai-hulud.sh問題や質問がある場合:
.github/workflows/formatter_*.yml ファイルを確認docker run --rm --privileged -v /:/host)を探すwebhook.site への参照を確認docker run --rm --privileged -v /:/host などのコマンドwebhook.site ドメインへの参照(オリジナルと同じ)