Modern Frontend CVEs

対象CVE: CVE-2026-86038

[解説] libp2p/gossipsubに発覚した深刻ななりすまし脆弱性 (CVE-2026-86038) とフロントエンドへの影響

@libp2p/gossipsubのStrictSignポリシーに、RSA形式のPeer IDを持つユーザーへのなりすましを可能にする脆弱性が見つかりました。攻撃者は被害者のPeer IDを偽装し、悪意のあるメッセージをネットワークに拡散する可能性があります。

はじめに:分散型ネットワークにおけるlibp2pとセキュリティ

`libp2p`は、IPFSやFilecoin、そして多くのWeb3アプリケーションの基盤となっている、分散型ネットワークのためのモジュール群です。特に`gossipsub`は、メッセージのブロードキャストや購読を効率的に行うためのPubSubプロトコルとして、その中核を担っています。

フロントエンドエンジニアの皆さんも、DAppsやWeb3プロダクトを開発する際に、バックエンドとの通信やP2P機能の実装で`libp2p`を利用するケースが増えています。分散型ネットワークでは、参加者間の信頼性確保が非常に重要であり、メッセージの「送信元」が正当であることの検証はセキュリティの根幹をなします。

今回の脆弱性 (CVE-2026-86038) の概要

今回報告された脆弱性 (GHSA-c3gv-825q-fvmp / CVE-2026-86038) は、`@libp2p/gossipsub`ライブラリにおいて、特定の条件下でメッセージの署名検証が不適切に行われる問題です。深刻度は "High" と評価されており、注意が必要です。

この脆弱性を悪用することで、攻撃者は任意のRSA形式のPeer IDを持つ被害者に「なりすまし」、悪意のあるメッセージをネットワークに送信できてしまいます。これは分散型アプリケーションの信頼性を根底から揺るがす重大な問題です。

なぜ問題が発生したのか?技術的な詳細

問題は`gossipsub`のデフォルトの署名検証ポリシーである`StrictSign`に存在します。メッセージの検証を行う`validateToRawMessage`関数内のロジックに不備がありました。

具体的には、メッセージに公開鍵(`msg.key`)が含まれていて、かつ`from`として示されたPeer ID(`fromPeerId`)がRSA形式で、その公開鍵がPeer ID自体にインライン化されていない(つまり`fromPeerId.publicKey`が`undefined`の状態)場合、本来行われるべき「メッセージ内の公開鍵と主張されるPeer IDが一致するか」という重要なチェックがスキップされていました。

このチェックがスキップされると、攻撃者は自身の秘密鍵でメッセージに署名し、その公開鍵を`msg.key`に含めつつ、`from`フィールドには被害者のRSA Peer IDを指定することが可能になります。`gossipsub`はこのメッセージを、攻撃者の公開鍵で署名されているにも関わらず、被害者からの有効なメッセージとして受け入れてしまうのです。

本来であれば、`peerIdFromPublicKey(publicKey).equals(fromPeerId)`のような検証が必須でしたが、この点が欠けていました。

フロントエンドエンジニアへの影響と潜在的な脅威

この脆弱性が悪用されると、あなたのDAppsやWeb3サービスにおいて以下のような問題が発生する可能性があります。

- **なりすましによる誤情報拡散**: 攻撃者が特定のユーザーやノードになりすまし、誤った情報や悪意のあるデータをネットワークに流すことができます。これにより、システムの信頼性やデータの一貫性が損なわれる可能性があります。

- **不正な認証・承認**: `message.from`を信頼して認証や承認ロジックを組んでいる場合、攻撃者が被害者になりすまして不正な操作を行う可能性があります。例えば、ユーザーの権限を乗っ取ったり、承認されていないアクションを実行させたりするリスクがあります。

- **レピュテーションの操作**: ユーザーの評価システムや、スパム対策、モデレーションシステムが`message.from`に依存している場合、攻撃者が被害者の評価を不当に下げたり、スパム活動を被害者のせいにしたりすることが可能です。

- **監査ログの改ざん**: 監査ログが`message.from`に基づいて記録されている場合、攻撃者の活動が被害者のものとして記録され、問題発生時の追跡が困難になります。

これらの影響は、特にP2Pでの直接的なやり取りや、サーバーレスなDAppsにおいて重大です。

対策:速やかなアップデートを

この脆弱性は`@libp2p/gossipsub`の特定のバージョンで発生しているため、最も効果的かつ推奨される対策は、**ライブラリを最新の修正済みバージョンに速やかにアップデートすること**です。

具体的な修正バージョンは、公式のアナウンスやGitHubのリリースノートで確認してください。通常、セキュリティ修正は新しいパッチバージョンまたはマイナーバージョンで提供されます。

自身のプロジェクトで使用している`libp2p`および`gossipsub`のバージョンを確認し、`package.json`を更新の上、`npm update`や`yarn upgrade`を実行してください。

まとめ:分散型セキュリティへの継続的な意識

分散型ネットワークは、その特性上、中央集権的なサービスとは異なるセキュリティモデルを必要とします。今回の脆弱性は、メッセージの送信元検証という基本的ながらも極めて重要なプロセスにおける落とし穴を示しています。

フロントエンドエンジニアの皆さんも、利用しているライブラリのセキュリティ情報を常にチェックし、最新の状態に保つこと、そして分散型システム特有のセキュリティリスクへの理解を深めることが不可欠です。安全なWeb3の未来を築くために、私たち全員でセキュリティ意識を高めていきましょう。

← ブログ一覧に戻る