広く利用されているnpmパッケージ「jscrambler」の改ざんされたリリースにより、開発者やCIパイプラインが巧妙な認証情報窃取キャンペーンにさらされていたことが分かりました。攻撃者はメンテナーの公開用認証情報を乗っ取り、通常のアップデートを装った悪意あるコードを配布していました。
Socket社のリサーチチームは、2026年7月11日に公開された悪意ある[email protected]のリリースを、公開からわずか6分後に検知しました。
このパッケージはJscramblerのJavaScript難読化ツールをビルドパイプラインに統合するもので、週間ダウンロード数は約15,800件に上ります。今回のリリースには、npm install時に自動実行されるdist/setup.jsを起動する、文書化されていないpreinstallフックが追加されていました。
この悪意あるリリースにはdist/intro.jsが同梱されていました。これは.jsファイルを装った約7.8MBのファイルですが、実際にはLinux、macOS、Windows向けの3つのgzip圧縮されたネイティブ実行ファイルを格納した独自のバイナリコンテナでした。
setup.jsのローダーは被害者のOSに一致するバイナリを選択し、システムの一時ディレクトリ内にランダムな名前を付けた隠しファイルとして展開したうえで、ユーザーから見えない形でデタッチドプロセスとして起動していました。
投下されたペイロードは、幅広い開発者資産・クラウド資産を標的とするRust製の情報窃取マルウェアでした。
暗号資産に関しては、MetaMaskをはじめとするブラウザ拡張機能型ウォレット、Trust Wallet、Coinbase Wallet、Phantomに加え、Exodusウォレットも標的とされていました。単にファイルをコピーするのではなく、scryptの鍵導出パラメータを利用してシードフレーズやニーモニックボルトを抽出する仕組みが使われていました。
このマルウェアはさらに、Claude Desktop、Cursor、Windsurf、Zed、VS CodeといったAIコーディングアシスタントの設定情報も列挙していました。これらのツールはAPIキーやModel Context Protocol(MCP)サーバーの認証情報を頻繁に保存しているためです。
クラウド認証情報も主要な標的の一つで、ペイロードはAWS、GCP、Azure各社のメタデータエンドポイントやシークレットエンドポイントを探査していました。
これに加えて、ブラウザデータ、DiscordおよびSlackのトークン、Telegramのセッション、Steamのログイン情報、OSのキーリングにもアクセスし、sudoやsystemd-runを介した権限昇格も試みていました。
バイナリ内の機密文字列はChaCha20-Poly1305で個別に暗号化されており、Socketのアナリストは静的な文字列抽出ではなく暗号解読によって、約2,400個の文字列を復元しました。これは解析対策が意図的に組み込まれていたことを示しています。
Socketが確認したところによると、窃取したデータはマルチパートのHTTP POSTリクエストを介し、TLSで暗号化された通信によってドロップサーバーへ送信されていました。脅威アクターは最初のリリースだけでは活動を止めませんでした。
その後3時間の間に、8.16.0、8.17.0、8.18.0、8.20.0という4つの追加バージョンが登場し、いずれも同一のペイロードを含みながら配信手法を変化させていました。
8.18.0以降、攻撃者はインストールフックの利用を完全にやめ、代わりにdist/index.jsとCLIバイナリの中に自己実行関数としてドロッパーを埋め込むようになりました。
この変更により、インストールスクリプトのみを検査するスキャナーを回避できるほか、npm install –ignore-scriptsによる保護も無効化されます。後発の2バージョンでは自己参照する依存関係も宣言されており、クリーンなバージョンを指定していても、間接的に侵害されたリリースが取り込まれる仕組みになっていました。
Jscrambler社はセキュリティアドバイザリでこの侵害を認め、攻撃者が盗まれたnpm公開用認証情報を使ってパッケージを公開したと説明しています。
同社はその後、認証情報を失効・再発行し、公開プロセスを強化しました。バージョン8.22.0は安全性が確認されており、8.15.0も安全な暫定リリースだったとしています。
バージョン8.14.0から8.20.0の間にjscrambler をインストールした可能性がある組織は、該当するマシンを侵害された可能性があるものとして扱う必要があります。
当面の最優先事項は、これらのバージョンを削除し、8.22.0にアップグレードするか、最後に安全性が確認されたリリースである8.13.0まで固定し直すことです。このマルウェアは広範に認証情報を収集していたため、影響を受けた環境からアクセス可能な認証情報はすべて再発行する必要があります。
インストールログを確認し、dist/setup.jsの実行履歴、一時ディレクトリ内の見慣れない隠しバイナリ、AIコーディングツールの設定ファイルの状態を精査する必要があります。
今回の事案は、攻撃者が開発者のマシンを狙い撃ちする傾向が強まっていることを浮き彫りにしています。これらのシステムはクラウドインフラやCI/CDパイプライン、さらには近年ではAIツールの認証情報へのアクセス権を握っており、npmサプライチェーンの侵害は大規模な認証情報窃取にとって特に価値の高い侵入口となっています。
注記: IPアドレスおよびドメインは、誤った名前解決やハイパーリンク化を防ぐため、意図的に無害化表記としています(例: [.])。再度有効な表記に戻す作業は、MISP、VirusTotal、SIEMなど管理された脅威インテリジェンスプラットフォーム内でのみ行ってください。
翻訳元: https://cyberpress.org/jscrambler-npm-supply-chain-attack/