5つの悪質なnpmパッケージが暗号開発者をターゲット、Telegramを介してウォレットキーを盗む

人気のある暗号化ライブラリになりすました5つの悪質なnpmパッケージが、SolanaおよびEthereumの開発者からウォレットキーを盗み、ハードコードされたTelegramボットに直接流出させています。

各パッケージは、正規の暗号化ライブラリをタイポスクワットするか、または正規のライブラリをラップし、盗まれた秘密鍵を同じTelegramボットベースのコマンド・アンド・コントロール(C2)チャネルに流します。

このキャンペーンはSolanaおよびEthereumの両方のエコシステムに影響を与え、Telegram C2インフラストラクチャは2026年3月23日現在も活動しています。

base_xdというパッケージは公開されてから5分以内に非公開にされました。しかし、その難読化されたペイロードとC2設定は、今も稼働中のbase‑x‑64パッケージで使用されているものと一致しています。

Socketは、アカウント「galedonovan」によって公開された5つの悪質なnpmパッケージを特定しました:raydium‑bs58、base‑x‑64、bs58‑basic、ethersproject‑wallet、base_xdで、すべて暗号化開発者を明確にターゲットにしています。

Socketは5つのパッケージとそれに関連するnpmアカウントすべてについて削除リクエストを提出しましたが、分析時点では4つはレジストリで利用可能でした。

悪質なnpmパッケージ

悪質なロジックは、開発者が通常秘密鍵を処理する場所に注入されており、アプリケーションの動作は通常に見えるが、秘密は静かに流出することが保証されます。

4つのSolana中心のパッケージ(raydium‑bs58、base‑x‑64、bs58‑basic、base_xd)では、通常、秘密鍵の文字列からSolanaキーペアを読み込むために使用されるBase58 decode()呼び出しをコードが傍受しています。

Ethereum側では、トロイの木馬化されたethersproject‑walletパッケージは、秘密鍵が渡されるとすぐにWallet構築体内でトリガーされます。

どちらの場合でも、プレーンテキストキーは、正当なデコードまたはウォレット作成が完了する前にTelegramグループに送信され、攻撃者がウォレットをすぐにインポートしてドレインできるようにします。

すべてのパッケージはグローバルfetch() APIに依存しており、それをインポートしていないため、流出はNode.js 18+でのみ機能します。古いランタイムでは、ReferenceErrorがスローされ、静かにキャッチされ、明らかなエラーなしに盗難が失敗します。

5つのパッケージすべてが、盗まれたキーを同じTelegram Bot APIエンドポイントに送信し、すべてのペイロードにハードコードされたボットトークンとチャットIDを使用しています。

ボット(@Test20131_Bot)は、作成者がハンドル@crypto_sol3を使用する小さなTelegramグループ(「My_Bot_Test」)にメッセージを投稿し、オペレーターへの直接的な属性へのリンクを提供します。

セカンダリーインフラストラクチャやステージングサーバーがないため、Telegramボットがアクティブな限り、流出チャネルは動作し続けています。

最もシンプルなパッケージであるraydium‑bs58では、悪質な動作全体は、実際のbs58.decodeに委譲する前にsendMessage(inputKey)を呼び出す変更されたdecode()関数です。

開発者は、公開されたコードに誤ってフルボットトークンとグループ招待URLを含むコメントを残し、難読化解除の必要なしにC2設定を公開してしまいました。

パッケージごとの技術的ノート

raydium‑bs58は、入力キーを常にTelegramに最初に送信するラッパーdecode()でbs58を再エクスポートしながら、正当なRaydium SDKからREADMEをコピーして信頼性があるように見せかけます。

base‑x‑64パッケージは、src/cjs/index.cjsに難読化されたペイロードを埋め込んでおり、配列回転暗号とチェックサムループを使用してTelegram URL、ボットトークン、チャットIDを隠し、その後fetch()を呼び出して盗まれたキーをPOSTします。bs58‑basicは自体に悪質なコードを含みませんが、base‑x‑64にのみ依存しているため、エクスポートされたオブジェクトのdecode()呼び出しはその依存を通じて過渡的に流出をトリガーします。

ethersproject‑walletパッケージは、実際の@ethersproject/[email protected]リリースをほぼそのまま複製し、コンパイルされたCJS出力に単一の悪質なラインを注入しながら、ESMビルドをクリーンなままにしておき、バージョンメタデータは一貫性がなく、明確なフォレンジック工芸品になります。

他とは異なり、そのエラーハンドラは「Telegramへのメッセージ送信エラー:」をコンソールにログし、監査中に検索できる目に見える文字列を残します。base_xdは、短期間公開されてから削除され、base‑x‑64と同じ難読化パターンとバイト同一のCJSを使用し、事実上キャンペーンの元のテンプレートとして機能します。

属性の工芸品と防御

5つのパッケージ全体で、Socketはpackage.jsonの共有タイポ(「crytography」と「git diff –exidt-code」)、同じコンパイルされたCJSバイナリ、同じTelegram C2設定、および均一なファイルタイムスタンプを注記しており、単一の開発者ワークフローを強く示唆しています。

Socketは、そのGitHub App、CLI、ファイアウォール、およびMCP統合が、タイポスクワットされたパッケージ、予期しないネットワークコール、難読化されたペイロード、リスキーな依存関係の変更にフラグを立てて、これらのサプライチェーン脅威をキャッチするために設計されていることを強調しています。

開発者の場合、ガイダンスは、raydium‑bs58、base‑x‑64、base_xd、bs58‑basic、ethersproject‑walletが存在する場合はすぐに削除し、それらを通じて渡されたキーを侵害されたものとして扱い、正当なbs58、base‑x、およびスコープされた@ethersproject/walletパッケージに移行することです。

セキュリティチームは、暗号化プリミティブを再エクスポートしたシンラッパーパッケージを精査し、キー処理ユーティリティの難読化をハイリスク信号として扱い、間接的に悪質なコードをプルする可能性がある過渡的な依存を綿密に検査するよう促されます。

翻訳元: https://gbhackers.com/five-malicious-npm-packages/

ソース: gbhackers.com