Injective LabsのGitHubが侵害、暗号資産ウォレットの秘密鍵を盗む悪意あるnpmパッケージが公開される
要点
-
Injective Labsが管理するSDKのGitHubリポジトリが第三者により侵害され、暗号資産ウォレットの秘密鍵などを盗み出す悪意あるnpmパッケージが配信されたことが判明しました。
-
悪意あるコードは実績のある開発者のGitHubアカウントを経由してコミットされ、自動ビルドパイプラインを通じて正規のパッケージとして公開されていました。
-
影響を受けるSDKのバージョンは「1.20.21」で、このSDKに依存する他の17個の関連パッケージにも同様に悪意あるバージョンが公開されています。
-
悪意あるコードはインストール時には実行されず、開発者が秘密鍵生成の関数を実行した際に、テレメトリ(利用状況の測定)を偽装して機密データを外部サーバーに送信する仕組みでした。
-
対象バージョンを利用したユーザーに対し、最新のクリーンなバージョン(1.20.23)へのアップデートと、使用した秘密鍵およびニーモニックの速やかな変更が推奨されています。
-
暗号資産関連のプロジェクトを展開するInjective Labsのソフトウェア開発キット(SDK)プロジェクトにおいて、公式のGitHubリポジトリが侵害され、暗号資産ウォレットの秘密鍵や復元用フレーズを盗み出すマルウェアが仕込まれたパッケージがnpmレジストリに公開されていたことが明らかになりました。セキュリティ企業による調査で判明したもので、問題のパッケージはすでに非推奨となっていますが、一部のリリースアセットは依然としてダウンロード可能な状態にあるとされています。この事態を受けて、開発者に対し、早急な対策と秘密鍵のローテーションが呼びかけられています。
-
セキュリティ企業Socketなどの発表によると、今回の攻撃は2026年7月8日に発生しました。悪意あるコードが仕込まれたのは、TypeScript向けSDKである「@injectivelabs/sdk-ts」のバージョン「1.20.21」です。この不正なバージョンはすでにnpm(主にJavaScriptやTypeScriptで使われる、世界最大級のパッケージ管理システム)上で非推奨(deprecated)としてマークされていますが、GitHubのリリース用ページには本稿執筆時点でもダウンロード可能なファイルとして残されている状態だといいます。
-
驚くべきことに、この悪意あるコードは、リポジトリに対して過去に多数の貢献実績がある正規の開発者のGitHubアカウントを使用してコミットされ、公式リポジトリにマージされていました。さらに、リポジトリが備えているOIDC(オープンIDコネクト:パスワードを使わずに安全に認証やアクセス権限の付与を行う仕組み)を利用した自動パブリッシュ(配信)パイプラインを経由して、npmレジストリへと正規のパッケージとしてアップロードされていたことが、StepSecurityの解析により明らかになっています。この不正なコミットは、信頼された既存のメンテナーである「thomasRalee」のアイデンティティを用いて作成され、プッシュされていたとのことです。
-
また、攻撃の影響は特定のSDKパッケージだけに留まりませんでした。攻撃者は、この悪意あるSDKバージョンに依存している他の17個の「@injectivelabs」スコープに属する関連パッケージについても、同様にバージョン「1.20.21」として一斉に公開しました。これにより、当該SDKを直接インストールしていなくても、これらのパッケージを経由して間接的に利用している「トランジティブユーザー(別のパッケージを経由して間接的にパッケージを利用している開発者)」もまた、知らず知らずのうちに脅威にさらされる結果となりました。影響を受けたパッケージには、ウォレットの基本機能を提供する「@injectivelabs/wallet-base」や、各種ハードウェアウォレット、連携サービスに対応するライブラリ群が含まれています。
-
このパッケージに仕込まれていたマルウェアの構造自体はシンプルで、検出を避けるための巧妙な工夫が施されていました。通常、悪意あるnpmパッケージはインストール時に実行される「ライフサイクルスクリプト」を利用して攻撃を開始しますが、今回のマルウェアはこの手法を避けています。代わりに、開発者がアプリを実行し、実際にライブラリの機能が呼び出されたタイミングで動作を開始する設計になっていたため、インストール時の静的解析などでは検出されにくく、発見が遅れる原因となりました。
-
具体的には、ウォレットの秘密鍵やニーモニックシードフレーズ(ウォレット復旧や秘密鍵の生成に使われる、複数の英単語で構成された文字列のこと)を生成する正規のワークフローが書き換えられていました。この改ざんにより、SDKのパフォーマンス最適化や利用フォーマットの把握を目的とした匿名テレメトリ(利用状況の測定)の収集を装う「trackKeyDerivation()」という偽の関数が呼び出されるようになっていたのです。
-
この偽のテレメトリ関数の説明書きには、「どの鍵生成方法(16進数またはニーモニック)が使用されているかを追跡し、処理時間のパターンを導出することで、開発チームがパフォーマンスのボトルネックを特定するのに役立つ。測定データは処理を妨げることなくバックグラウンドで実行される」と記載されていました。しかしSocketの分析によれば、この関数に渡されるパラメータには、鍵生成に使われた手法を示す識別用のマーカーだけでなく、秘密鍵の生成に必要なニーモニックや秘密鍵そのものの機密データが含まれていました。攻撃者にとって、これらの情報があれば、自身の環境で被害者のウォレットの秘密鍵を完全に再現することが可能な状態でした。
-
セキュリティ企業のOX Securityは、「ウォレットを操作するパッケージ自体にウォレット情報を盗み出すロジックを追加した形であり、ユーザーがニーモニックフレーズを読み書きする処理を実行するたびに、マルウェアがそれを読み取って外部サーバーへ送信していた」と説明しています。
-
さらに、このマルウェアは大量の外部通信が発生して不審に思われないよう、効率的な送信メカズムを備えていました。キーの生成処理が発生するたびに即座に送信するのではなく、2秒間の待機時間を設け、その間に発生した複数のキー情報を単一の
-
キュー(一時的な保存領域)にまとめて、HTTPSのPOSTリクエストによって一度に外部サーバー(testnet.archival.chain.grpc-web.injective[.]network)に送信する仕組みが組み込まれていました。
-
現在、この問題への対応として、 Injective Labsからは悪意あるコードを排除した、新しくクリーンなバージョンである「1.20.23」が公開されています。専門家らは、対象となる古いバージョンを使用してしまったすべてのユーザーに対し、直ちにパッケージを「1.20.23」にアップデートするとともに、このライブラリを介して処理されたすべての秘密鍵やニーモニックフレーズはすでに攻撃者に漏洩したものとみなし、直ちに新しいキーへと変更(ローテーション)することを強く推奨しています。