2026年8月4日、09:00 UTC頃、攻撃者はJared Wray氏のGitHubアカウント(jaredwray)を乗っ取りました。このアクセス権を利用して、keyvリポジトリのmainブランチに直接悪意のあるコードをプッシュし、keyvおよびcacheableパッケージファミリー全体にわたって即座に新しいリリースを切りました。
最初のシード(汚染の種)は、両方の名前空間にわたる11のパッケージでした:keyv、cacheable-request、cache-manager、@cacheable/utils、flat-cache、file-entry-cacheなどです。Aikido Security、StepSecurity(このワームを「ChainDrop」として追跡)、Socket、Chainguardといったセキュリティ研究組織は、いずれも攻撃発生から数時間以内に独自にこの侵害を確認しています。
汚染されたすべてのパッケージには、同じ感染パターンが適用されていました。それは、2つの新しいファイル(setup.mjs と Math_Symbol.js)と、各package.jsonに追加された"preinstall": "node setup.mjs"というエントリです。
開発者やCIシステムがnpm installを実行すると、インストールが完了する前にsetup.mjsドロッパーが自動的に実行されました。その役割は、GitHub Releasesから正規のBun JavaScriptランタイムバイナリをダウンロードし、難読化された第2段階のペイロード(Math_Symbol.js、約710~728 KB)を起動することです。
Microsoft脅威インテリジェンスは、このペイロードがMini Shai-Huludの亜種であることを確認しています。これは感染した環境から広範な認証情報やシークレットを収穫します:
この攻撃を特に危険なものにしたのは、その自己増殖能力です。感染した環境からnpm公開トークンとGitHub PATを盗み出した後、ワームはそのアクセス権を利用して、無関係な他のメンテナーが所有するパッケージの悪意のあるバージョンを追加で公開しました。
侵害の範囲は急速に拡大しました:
ワームは名前空間の境界を越えました。開始点であるkeyv/cacheableファミリー内に留まらず、Deliveroo、Ornikar、OneReach、Picsart、Qlik、ServiceTitanなど、多くの組織が所有するパッケージにも飛び火しました。
盗まれた認証情報は、**攻撃者によって制御されたGitHubリポジトリに外部送信(流出)**されました。ワームはこの目的のために新しいリポジトリを作成するか、専用の流出用リポジトリを使用しました。ペイロードには複数の冗長な流出チャネルが組み込まれており、単一のチャネルが停止されても影響を受けにくい設計になっていました。
複数のセキュリティ企業の研究者は、影響を受けたパッケージに触れたシステムはすべて完全に侵害されたものとして扱うようチームに強く求めました。以下は、一貫して推奨された対策手順です:
npm/yarn/pnpmのoverrides(例:package.jsonの"overrides")を使用して、汚染されたバージョンの誤った再インストールを防ぎます。ロックファイル(package-lock.json、yarn.lock、pnpm-lock.yaml)で、影響を受けるパッケージバージョン(推移的依存関係を含む)がないか確認してください。
影響を受けるバージョンでnpm installを実行したマシンから、単に悪意のあるファイルを削除するだけでは不十分です。そのホスト上に存在したすべてのシークレットが侵害されたと想定してください。
露出した可能性のあるすべての認証情報を取り消し、再生成します:
重要な注意点として、このマルウェアはGitHubワークフロー監視機能を仕掛けることがあり、新しいトークンが作成された瞬間にそれを再び露出させる可能性があります。研究者は、認証情報をローテーションする前に、監視サービスを無効化または削除するようアドバイスしています。
開発者マシンとCI/CDランナーの両方で、npm/pnpm/yarnキャッシュとDockerビルドキャッシュをクリアします。汚染された依存関係がビルドキャッシュやDockerレイヤーに残らないように、すべてのアーティファクトをゼロから再ビルドしてください。
新たに作成されたリポジトリや不正なワークフローがないか確認します。ワームが作成した可能性のある.claude/settings.jsonや.vscode/tasks.jsonなどの永続化アーティファクトも探してください。
2026年8月4日のShai-Huludワーム攻撃は、JavaScriptエコシステムのセキュリティにとって分岐点となる出来事でした。この攻撃は、単一のメンテナーアカウントが侵害されるだけで、影響を受けるパッケージのほとんどに直接アクセスできなくても、数時間のうちに千を超えるパッケージを汚染するワームに発展しうることを実証しました。正規のBunランタイムバイナリをペイロード実行に利用した点、盗んだトークンによる自己増殖、そして冗長な流出チャネルにより、この攻撃はこれまでのサプライチェーン攻撃よりもはるかに洗練されていました。
エンジニアリングチームとセキュリティチームにとって、このインシデントは、依存関係の固定、pre/post-installスクリプトの可能な限りの無効化、不審なGitHubアクティビティの監視、そしてサプライチェーン侵害のためのインシデント対応手順書の整備の重要性を改めて浮き彫りにしました。