本記事は2025年4月28日投稿のXRPL公式ブログ"Malicious Supply Chain Compromise in xrpl.js npm Package“の和訳です。
このレポートには、npmjs.comで公開されていたXRP LedgerのJavaScriptライブラリパッケージ(xrpl.js)に関する脆弱性の技術的詳細が記載されています。
報告日: 2025年4月22日
影響を受けるバージョン: xrpl.js (npmjs.com 上のxrpl) のバージョン 4.2.1、4.2.2、4.2.3、4.2.4、および 2.14.2
脆弱性の概要
2025年4月21日、xrpl.jsの複数のバージョンが、秘密鍵情報をひそかに収集し、未知の攻撃者のウェブサイトへ送信するよう細工された悪意あるコードを含んだ状態で公開されました。
この攻撃は2025年4月22日 UTC の早朝に発見・報告され、同日 UTC 午後の半ばまでに、新しいxrpl.jsのバージョンが公開され、悪意あるすべてのパッケージバージョンが npmjs.com 上で非推奨化されたことで、インシデントは収束しました。
影響
この脆弱性はXRP Ledgerネットワークやそのコードベースには影響しません。 影響範囲は、xrpl.js(XRP Ledgerと連携するためのJavaScriptライブラリ)のnpmパッケージ名であるxrplに限定されます。
注意: 本インシデントの過程で、GitHubリポジトリが侵害されたことは一切ありません。 攻撃者は、侵害されたnpm認証情報を使って、悪意あるコードをnpmレジストリに直接公開しました。 具体的には、xrpl.js のnpmパッケージのうち、バージョン2.14.2および4.2.1〜4.2.4が、秘密鍵情報を窃取するよう細工された悪意あるコードを含んでいました。
本日時点で、下流での被害報告はまだ確認されていません。 感染したバージョンをインストールしてしまった皆さんは、ウォレットが侵害されたものとみなして、鍵のローテーション推奨手順に沿って対応してください。
技術的詳細
発見の経緯
2025年4月22日 UTC 8:14、Aikido Securityのセキュリティリサーチャーから、Rippleの各チームに対して、npmjs.comリポジトリ上のxrplパッケージにおける侵害について警告が寄せられました。 悪意あるパッケージにはcheckValidityOfSeedという関数が含まれており、これが攻撃者のドメインへの呼び出しを発生させ、XRPLの秘密鍵を組み立てるのに使われる情報をひそかに窃取していました。
RippleとXRPLファウンデーションは直ちにインシデントの調査を開始し、Aikidoチームから、影響を受けたのは4.2.1〜4.2.4(および2.14.2)であるとの情報を得ました。 この調査プロセスのなかで、Rippleのエンジニアリングチームは、悪意あるコードが当初generate(algorithm = DEFAULT algorithm)およびfromRFC1751Mnemonic(mnemonic, opts)の関数に実装されていたことを確認しました。 これらのコードは、いずれの場合も同一の侵害されたユーザーアカウントを使い、PRレビュープロセスをすべて回避してnpmへ直接公開されていました。
これと並行して、UTC正午までにこのインシデントはオンライン上で広く知られるようになりました。 例として、こちら、こちら、このブログ、このRedditの投稿などが挙げられます。 同日午前の遅い時間には、XRPLファウンデーションがX上で声明を発表し、アプリケーション開発者およびコミュニティに向けて、各チームが修正対応中であることを通知しました。
根本原因
2025年4月21日 UTC 20:39、対象パッケージのメンテナンスを担当しているRipple従業員1名が、認証情報を狙ったフィッシング被害に遭いました。 これにより脅威アクター(攻撃者)はxrplライブラリのnpmパッケージリポジトリへのアクセス権を取得し、JavaScriptパッケージのコードを改ざんすることで、依存先のソフトウェアが実行された際にXRPLの秘密鍵情報を攻撃者のサーバーへ送信するよう仕込みました。
合計で、xrplの悪意ある5つのバージョンが公開されました。
- 4.2.1 - 公開日時: 2025-04-21T20:46:24.710Z
- 4.2.2 - 公開日時: 2025-04-21T20:55:55.822Z
- 4.2.3 - 公開日時: 2025-04-21T21:32:24.445Z
- 2.14.2 - 公開日時: 2025-04-21T21:37:09.418Z
- 4.2.4 - 公開日時: 2025-04-21T21:49:35.179Z
Ripple内部の合同調査チームは、このフィッシング攻撃が特にnpmを標的としており、他のプラットフォームには影響していないことを確認しました。
修正対応
- npm上の影響を受けた
xrplのバージョンを特定し、非推奨化しました。 完全な公開取り下げ(unpublish)に向けて、npmへの協力依頼も行っています。 - 影響を受けたパッケージの新しいバージョンが公開されています。こちらを参照してください。
- ユーザーセキュリティの強化:
- 侵害されたユーザーは、すべてのXRPL関連npmパッケージのメンテナーから外されました。 当該ユーザーが侵害された根本原因も特定・解消されています。
- RippleとXRPLFは、npmjs.com の全ユーザーに対して2要素認証 (2FA) を有効化しました。
- インシデントの間、XRPLFはRippleのサポートを受けつつ、複数のチャネルを通じてXRPL開発者コミュニティとのコミュニケーションを主導しました。
- Rippleは
xrplパッケージに依存するプロジェクトと連携し、侵害があった期間中にnpm上でリリースされた影響を受けるバージョンが実行されていないかの確認を進めています。 - 攻撃者が使用していた悪意あるウェブサイトは、ドメインレジストラに通報済みです。
- CVEの申請を侵害されたxrpl.js バージョン4.2.1、4.2.2、4.2.3、4.2.4、および2.14.2として実施し、CVE-2025-32965(スコア9.3)として受理されました。 CVEはNISTデータベースにも公開されています。
- アドバイザリ通知はxrpl-announceでも発信されています。
戦略的な再発防止策
RippleおよびXRPLFのエンジニアリングチームは、ソフトウェアサプライチェーンセキュリティへの継続的なコミットメントの一環として、戦略的な予防措置を順次導入していきます。 これには、自動化と検証の強化によるリリースプロセスの完全性向上や、公開ワークフローにおける異常検知のためのモニタリング機能の拡充が含まれます。 また、コラボレーター/公開アクセス権の見直しを行い、冗長性の確保と単一障害点の排除も進めています。 これらの取り組みは段階的に展開され、リスクを先回りして低減し、オープンソースエコシステムへの信頼を高めることを目的としています。
再現手順
@advocatemackさんによるこちらの解説動画で、攻撃者がどのようにこのexploitを実行したかが分かりやすくまとめられています。
利用可能な修正/パッチ
本問題の修正は、npmjs.com上のxrplパッケージのバージョン4.2.5および2.14.3で利用可能です。 すべてのプロジェクトに対して、バージョン4.2.1〜4.2.4および2.14.2の使用を避けることを推奨いたします。
謝辞
この侵害を発見してくださった Aikido Security とCharlie Eriksenさん、そして本脆弱性の調査と緩和に迅速に対応してくれたXRPLFの皆さんに感謝いたします。
そして、いつものように、XRP Ledgerを稼働させ続け、ネットワークの安全性とセキュリティを守るために尽力されている、世界中のバリデーター・開発者・コントリビューターのコミュニティの皆さんにも感謝を申し上げます。
参考資料
- xrpl.js GitHubリポジトリ: https://github.com/xrplf/xrpl.js
- xrpl.js npmパッケージ: https://www.npmjs.com/package/xrpl
- 攻撃の解説動画: https://x.com/advocatemack/status/1914697731710374013
お問い合わせ
詳細情報、または追加の問題を報告される場合は、bugs@xrpl.org までチームへご連絡ください。
インシデント対応タイムライン
| 主なアクション | タイムスタンプ | 説明 |
|---|---|---|
| 初期発見 | 2025年4月22日 08:14 UTC | 外部のセキュリティリサーチャーから、npm上のxrplパッケージへの侵害についてRippleへ通報。 |
| 緩和措置 | 2025年4月22日 08:14 - 12:34 UTC | 影響を受けたnpmパッケージを非推奨化。新たな依存ソフトウェアのリリースで侵害が継続しないよう、新しいパッケージをアップロード。 |
| ライブラリの解決完了 | 2025年4月22日 12:34 UTC | npmパッケージの脆弱性が緩和された。 |
| 追加の緩和措置 | 2025年4月22日 | 上記で説明した追加の修正対応(CVEの公開、ドメインの通報など)を実施。 |