2026年6月3日、2時間以内という短時間で展開された組織的な攻撃により、大規模なnpmサプライチェーン攻撃が発生し、少なくとも57のパッケージが286以上の悪意あるバージョンを通じて侵害されました。
攻撃はUTC 23:30頃、月間ダウンロード数40万8,000件以上を誇るVapi.aiの公式ボイスAI SDK「@vapi-ai/server-sdk」の侵害から始まり、その後まもなく開発者jagreehalがメンテナンスする数十のパッケージや複数の関連パッケージファミリーへと拡大しました。
最初の侵害から1時間以内に、攻撃者は月間ダウンロード数12万件以上を記録するai-sdk-ollamaを含む50以上の追加パッケージに悪意ある更新をプッシュしました。
影響を受けたエコシステムにはautotel、awaitly、executable-stories、node-env-resolver、wrangler-deployなども含まれており、影響の大きい開発者ツールを標的とした広範かつ自動化された拡散戦略が取られていたことがうかがえます。
セキュリティ研究者たちは、この攻撃キャンペーンをMiasmaワームの新亜種によるものと特定しています。Miasmaは自己増殖型のサプライチェーンマルウェアファミリーで、わずか数日前にRed Hat関連のnpmパッケージへの侵害が確認されていました。
今回の新たな攻撃では、「Phantom Gyp」と名付けられたステルス実行技術が導入されています。この手法は、preinstallやpostinstallスクリプトに依存する代わりにbinding.gypビルド設定ファイルを悪用することで、従来のnpmセキュリティチェックを回避します。
StepSecurityによると、この攻撃は悪意あるパッケージバージョンに埋め込まれた157バイトという最小限のbinding.gypファイルを軸に展開されます。npmがこのファイルを検出すると、ネイティブモジュールをコンパイルするための標準プロセスであるnode-gyp rebuildが自動的に呼び出されます。
攻撃者はgypのコマンド置換機能を武器に変え、インストール中に隠されたペイロードを実行することで、従来のライフサイクルスクリプト監視ツールを回避しながら事実上の任意コード実行を実現しています。
マルウェアが実行されると、多段階のペイロードチェーンが開始されます。ROTベースのエンコーディングとeval実行による強力な難読化から始まり、続いて埋め込まれたペイロードのAES-128-GCM復号が行われます。
特筆すべき点は、BunランタイムをNode.js環境外での最終悪意あるステージの実行に利用するため、迅速にダウンロード・展開することです。これにより、多くのランタイムベースの検出メカニズムを回避しています。
binding.gypを悪用した数十のnpmパッケージへの攻撃
ランタイム分析では、高度に構造化されたキルチェーンが明らかになっています。インストール後わずか数秒で、マルウェアは依存関係をダウンロードし、難読化されたスクリプトを実行し、sudo python3を使って権限昇格を行い、GitHub ActionsのRunnerメモリにアクセスして機密シークレットを窃取します。
特にRunner.Workerプロセスのメモリを読み取ることでマスクされたシークレットを標的とし、認証情報を平文で回復できるようにしています。

このマルウェアは、クラウドおよび開発者環境全体にわたる広範な認証情報窃取能力を備えています。AWS、Google Cloud、Azure、HashiCorp Vault、GitHubトークン、さらには1Passwordやgopassといったローカルの認証情報ストアも標的にしています。
窃取されたシークレットは暗号化されたうえで、GitHub APIコールを通じてliuende501アカウント配下の攻撃者管理リポジトリへ持ち出されます。このアカウントには200以上のリポジトリがあり、デッドドロップストレージとして機能しています。
認証情報の窃取に加え、今回のキャンペーンはAIコーディング環境を汚染するという懸念すべき永続化メカニズムを導入しています。
このマルウェアは、Claude Code、Cursor、Gemini、Visual Studio Codeといったツールに設定バックドアを注入します。
パッケージの package.json では "main": "./dist/index.js" がエントリーポイントとして宣言されているため、ルートの index.js はアプリケーションコードからインポートされることはありません。

これらの改ざんは、開発者が影響を受けたプロジェクトを開いたときに自動的に実行され、将来のAI生成コードに影響を及ぼし、長期的なサプライチェーンリスクをもたらす可能性があります。
このワームは自律的な拡散機能も備えています。盗んだnpmトークンを使用してメンテナーのパッケージを列挙し、悪意あるペイロードを注入したうえで、偽造したSigstoreプロベナンスとともに再公開することで、侵害されたパッケージを正規のものに見せかけます。
同様の拡散ルーティンはRubyGemsやGitHubリポジトリも標的としており、エコシステムをまたいだ感染モデルを示しています。
ネットワークテレメトリにより、インストール中の異常なアウトバウンド接続が確認されており、GitHubからの予期しないダウンロードやデータ持ち出しのためのAPIコールが含まれています。
これらの動作は通常のnpm installパターンと大きく異なり、重要な検出機会を提供しています。
今回のキャンペーンの規模、スピード、巧妙さは、高度に自動化されたマルチプラットフォームのサプライチェーン攻撃という新たな潮流の台頭を強く示しています。
npmパッケージに依存する開発者や組織は、依存関係の監査、ビルド時の動作監視、そしてbinding.gypの悪用といった非従来型の実行ベクターを検出できるランタイム保護の実装を強く推奨します。
侵害の痕跡(IoC)
ファイルハッシュ(SHA-256)
- パッケージtarball(.tgz):
288f26c2eadcb1a7923fe376d16f5404216cce15d9fc162a4a78574dc7df399a - binding.gyp(157バイト):
ef641e956f91d501b748085996303c96a64d67f63bfeef0dda175e5aa19cca90 - 難読化されたルートindex.js(4.5 MB):
5926b86b642e00672252953eb30d8f75cfb7797fe3118bd6fa2cfbee92905d61 - 復号済みBunローダー(907バイト):
ceff7c51d70832c3ec8dd2744b606a23b3c924ef664ae23439b9b742ea154108 - 復号済みメインペイロード(668 KB):
da39146ef451d1b174a24d00b1e2a45cd38d54e849737f8f35333dcb22175707
@vapi-ai/server-sdk より:
- binding.gyp(全バージョンで同一):
ef641e956f91d501b748085996303c96a64d67f63bfeef0dda175e5aa19cca90 - v1.2.1のindex.js(4,870,718バイト):
e3dbe63aded45278f49c4746ab938ed9472b36def79b43e2dd2d7eff014481d1 - v0.11.2のindex.js(4,496,586バイト):
82d83274680df928fdda296a348e01802f595e412308c399565c320df444052a
C2インフラストラクチャ
- 持ち出し先アカウント:
github.com/liuende501(236リポジトリ、自動生成) - リポジトリ説明文: “Miasma – The Spreading Blight” および逆順表記の “Shai-Hulud: Here We Go Again”
- 持ち出しパスパターン:
repos/liuende501/{repo}/contents/results/results-{timestamp}.json - C2ビーコンキーワード:
thebeautifulmarchoftime(GitHub コミット検索) - トークン検証キーワード:
IfYouInvalidateThisTokenItWillNukeTheComputerOfTheOwner - 偽装User-Agent:
python-requests/2.31.0
ネットワークインジケーター
github.com/oven-sh/bun/releases/download/bun-v1.3.13/bun-*.zip
注記: IPアドレスとドメインは、誤った名前解決やハイパーリンク化を防ぐために意図的にデファング(例: [.])されています。MISP、VirusTotal、SIEMなど管理された脅威インテリジェンスプラットフォーム上でのみ、元の形式に戻してご利用ください。
翻訳元: https://gbhackers.com/dozens-of-npm-packages-via-binding-gyp/