- NPMエコシステムで人気の @ctrl/tinycolor を含む40超のパッケージに 自己増殖型マルウェア が注入され、開発環境の秘密情報やCI/CD認証情報まで連鎖感染しうるサプライチェーン攻撃が発生。感染バージョンはnpmから削除済み
- 攻撃ペイロードはnpmインストール過程で Webpackバンドル(bundle.js, ~3.6MB) を非同期実行し、環境変数・ファイルシステム・クラウドSDKを通じて 広範な認証情報収集 を行う
- 悪意あるロジックは NpmModule.updatePackage により他のパッケージを強制的にパッチ・配布して カスケード伝播 し、GitHub Actionsに shai-hulud ワークフローを注入して組織のシークレットを toJSON(secrets) で窃取する
- 収集データは 公開GitHubリポジトリ
Shai-Hulud の作成によって流出し、通常の開発活動に偽装されるため検知回避性が高い
- AWS/GCP/Azure/NPM/GitHub トークンおよびメタデータエンドポイントへのアクセス、TruffleHog ベースのシークレット探索などが秘かに実行される
- パッケージの即時削除・リポジトリの整理・全認証情報の交換とともに、CloudTrail/GCP Auditログの点検、Webhookの遮断、ブランチ保護/Secret Scanning/クールダウンポリシー の導入が求められる
Affected Packages
- 合計195個のパッケージ/バージョン が報告されており、代表的には @ctrl/tinycolor(4.1.1, 4.1.2)、多数の @ctrl/ 名前空間、@crowdstrike/ モジュール群、ngx-bootstrap/ngx-toastr/ng2-file-upload/ngx-color など Angular/Web UIエコシステム 全般、@nativescript-community/ および @nstudio/ モバイルスタック、teselagen/ ライフサイエンスツールチェーン、ember-*、koa2-swagger-ui、pm2-gelf-json、wdio-web-reporter などが含まれる
- 各パッケージごとの 正確なバージョン は原文の表を参照し、該当バージョンを使用しているか 厳密にクロスチェック する必要がある
- 例:
@ctrl/ngx-emoji-mart 9.2.1, 9.2.2, @ctrl/qbittorrent 9.7.1, 9.7.2, ngx-bootstrap 18.1.4, 19.0.3–20.0.5, ng2-file-upload 7.0.2–9.0.1 など広範囲
Immediate Actions Required
Identify and Remove Compromised Packages
- プロジェクトで 感染パッケージの有無を確認:
npm ls @ctrl/tinycolor などで点検
- 感染パッケージを 直ちに削除:
npm uninstall @ctrl/tinycolor などを実行
- 既知の bundle.jsハッシュ検索 でローカル痕跡を点検:
sha256sum | grep 46faab8a... を使用
Clean Infected Repositories
- 悪意あるGitHub Actionsワークフローを削除:
.github/workflows/shai-hulud-workflow.yml を削除
- リモートに作成された shai-huludブランチを検出・削除:
git ls-remote ... | grep shai-hulud の後に git push origin --delete shai-hulud を実行
Rotate All Credentials Immediately
- NPMトークン、GitHub PAT/Actionsシークレット、SSHキー、AWS/GCP/Azure 認証情報、DB接続文字列、サードパーティトークン、CI/CDシークレット などを 全面的に交換 する必要がある
- AWS Secrets Manager/GCP Secret Manager に保存された項目を含め すべてローテーション する必要がある
Audit Cloud Infrastructure for Compromise
- AWS: CloudTrail で
BatchGetSecretValue, ListSecrets, GetSecretValue 呼び出しの時点とパターンを点検し、IAM Credential Report で異常なキーの作成・使用を確認
- GCP: Audit Logs で Secret Manager へのアクセス記録を点検し、CreateServiceAccountKey イベントの有無を確認
まだコメントはありません。