npm部品bee-jsに不正な版、入れると遠隔操作のおそれ

分散型の
脆弱性の概要
- 対象
- npm部品
- 悪用
- あり(確認済み)
- 影響
- 入れた端末が遠隔操作され、ウォレットの鍵を盗まれる
- 修正版
- 回避策のみ
- 公表元
- GitHub / StepSecurity / SafeDep
| 製品 | 対象のバージョン | 修正版 |
|---|---|---|
| @ethersphere/bee-js | 13.3.0 | 13.2.0 に戻す(13.3.0 は npm から削除) |
| Swarm Desktop | 0.56.2 | 公表なし |
やること
@ethersphere/bee-js は、分散型のデータ保存の仕組み Swarm を JavaScript から使うための npm の部品です。11月9日、この部品の 13.3.0 に不正なコードが入った状態で公開されました。使っている場合は、次を確かめてください。
- 依存関係の記録(
package-lock.json、yarn.lock、pnpm-lock.yaml)と CI の記録に 13.3.0 がないかを調べてください。ほかの部品を通じて入った場合も含みます - 13.3.0 を入れたパソコンやサーバーは、乗っ取られたものとして扱ってください。部品を消すだけでは、仕込まれた遠隔操作の仕組みは消えません
- その端末や CI の処理から使えた認証情報は、別のきれいな環境から作り直してください
- 依存は 13.2.0 に固定してください
GitHub の告知は、この部品を入れた端末はすべて乗っ取られたものと考え、保存していた秘密の情報と鍵をすぐに別の端末から替えるよう求めています。
何が起きたのか
調査会社の StepSecurity と SafeDep の報告をもとに、日本時間でまとめます。
- 11月9日 8時59分:プロジェクトのリリース用の自動アカウント
bee-workerの名前で、署名のない変更が入れられる - 9時6分:GitHub で 13.3.0 のリリースが作られ、npm へ公開する既存の自動処理が動き出す
- 9時9分:13.3.0 が npm に公開される
- 9時36分:同じアカウントで、デスクトップアプリ Swarm Desktop の 0.56.2 が「緊急の修正版」として公開される
- 10時24分:npm から 13.3.0 が削除される
SafeDep によると、npm で最新版を示す印(latest)は 13.2.0 に戻されています。
1つ前の 13.2.0 は署名付きの変更をまとめて確認する手順を通って公開されています。今回はその手順を通らずにリリースが作られ、既存の自動処理がそのまま npm に公開しました。公開された部品には、正規の自動処理で作られたことを示す来歴の証明(provenance)が付いています。悪意のあるコードが元のソースに入っていたので、この証明では見抜けません。SafeDep によると、この自動処理はリリースのときにテストを動かさない設定でした。
bee-worker のアカウントか、そのトークンが盗まれたとみられますが、手に入れた方法は分かっていません。変更の置き場所については、StepSecurity は upcoming という枝に直接入れられたとし、SafeDep はどの枝にも属していなかったとしています。
不正なコードの動き
13.3.0 では、パッケージを入れるときに自動で動く postinstall にスクリプトが登録されていました。部品を読み込まなくても、入れただけで動きます。スクリプトは外部のサーバー(api.frameworkmetrics[.]xyz)から OS ごとの JavaScript を受け取り、入れた人の権限で実行します。エラーは表に出しません。
受け取ったコードは Swarm Desktop の設定ファイル config.yaml と、暗号化されたウォレットの鍵 swarm.key を攻撃者に送ります。SafeDep によると、Swarm Desktop は鍵のパスワードを config.yaml に平文で保存しているため、攻撃者は鍵を取り出し、預けた資金を動かせるおそれがあります。
さらに、遠隔操作の仕組みを入れます。
- Linux と macOS:
~/.solidity/に実行ファイルを置き、プログラミング言語の補助ツールに見せかけて自動で起動するよう登録します - Windows:Microsoft Defender の検査から外すフォルダーを足し、遠隔操作ソフト ScreenConnect を利用者に見えない形で入れます。そのあと、足した除外設定と途中のファイルを消します
SafeDep は Linux と macOS の実行ファイルを、遠隔からコマンドを実行できるものと分析しています。一方、StepSecurity は取得できた Linux のファイルを動かさずに調べた段階で、macOS と Windows の一部のファイルは取得できなかったとしています。
影響の広さ
npm の集計では11月2日から8日までの1週間のダウンロードは3,496回でした。13.3.0 が何回入れられたかは分かっていません。StepSecurity は @ethersphere/swarm-cli 3.7.0 など、版の指定の幅に 13.3.0 を含む部品があり、依存を新しく解決すると取り込むおそれがあると指摘しています。これらの部品そのものに不正なコードが入ったとは確認されていません。
Swarm Desktop の 0.56.2 について、SafeDep は日本時間の15時58分の時点でも GitHub で最新版として表示され、Windows の自動更新用のファイルが17回ダウンロードされていたとしています。プロジェクトの GitHub には 0.56.2 を問題とする報告が出ていますが、11月9日に確かめた時点で開発チームの返答はありません。
同じように正規の配布経路が乗っ取られた例に、AI接続ソフトLiteLLMの配布版が汚染、約2時間公開で認証情報窃取があります。
中小企業が学べること
この件では正規のアカウントを使い、正規の自動処理を通して不正な版が公開されました。来歴の証明が付いていることだけでは、安全の確認にはなりません。
自社でアプリを作っている場合は、次の設定を確かめてください。
- lock ファイルで部品の版を固定し、CI では
npm ciで記録どおりに入れる。版の指定の幅だけに頼ると、公開されたばかりの不正な版を取り込むおそれがあります - インストール時のスクリプトを止める設定(
ignore-scripts)を使えるか検討する。StepSecurity によると、今回の仕組みはこの設定で止まります。ただし、すでに動いたものは元に戻りません - 自社で npm に部品を公開している場合は、リリースを作れるアカウントと、その鍵やトークンを持つ人を絞る。SafeDep は今回の作りではリリースを作れる人なら来歴の証明付きで npm に公開できたと指摘しています
自社で確かめること
- 依存の記録を調べるlock ファイルと CI の記録で、@ethersphere/bee-js の 13.3.0 を取り込んでいないかを確かめてください。
- 通信の記録を見るDNS やプロキシの記録に frameworkmetrics[.]xyz への通信がないかを確かめてください。
- インストール時のスクリプトを止める部品を入れるときに自動で動くスクリプトを、CI などで止められないかを検討してください。
出典
- GitHub「Malware in @ethersphere/bee-js · GHSA-hh7j-5m3j-23pf」
- StepSecurity「@ethersphere/bee-js 13.3.0 Compromised」
- SafeDep「Compromised bee-js and Swarm Desktop Steal Swarm Wallet Keys」
- GitHub「Swarm Desktop 0.56.2 is compromised. · Issue #581 · ethersphere/swarm-desktop」
- npm のダウンロード数の集計「@ethersphere/bee-js」(2026年11月2日〜8日)



コメント 0
まだコメントはありません。