Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessJoin libp2p network as peer
-
DeliverySeal PeerRecord with attacker key, victim peerId + rogue multiaddrs
-
ExploitDeliver via gossipsub Peer Exchange with attacker peerId as expectedPeer
-
ExecutionSignature check passes, certified addresses stored for victim
-
ImpactDials redirected/failed, routing manipulation, reachability disruption
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A07:2025 - Authentication Failures
ASVS 5.0
V6 - Authentication Anti-spoofing controls
MITRE ATT&CK
1 technique across 1 tactic: Defense Evasion The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitable when the target runs @libp2p/peer-store from js-libp2p 8.0.0 up to (not including) 12.0.24 AND processes signed peer records through consumePeerRecord - specifically the gossipsub Peer Exchange path, which lets the attacker set its own peer ID as the expectedPeer option so only the envelope signer (not the payload PeerRecord.peerId) is validated. No authentication or user interaction is required (PR:N/UI:N): the attacker only needs to be a participating peer able to deliver a sealed RecordEnvelope. LIMITING FACTOR: the impact is capped - the connection upgrade still verifies the remote peer's real identity, so this yields address-book poisoning, dial redirection/failure, routing manipulation and reachability disruption, but not full identity takeover or traffic interception; deployments not using Peer Exchange / certified-address storage are less exposed. |
| Impact | The signals are mostly consistent and point to a genuine but bounded integrity risk. The provided CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:L, base 8.2) is plausible: exploitation is network-reachable, low-complexity, requires no authentication (the attacker only needs to participate in the gossipsub Peer Exchange path and supply its own peer ID as expectedPeer), and needs no user interaction. Impact is correctly weighted toward integrity (I:H - certified address-book poisoning for arbitrary victim peer IDs) with a secondary availability effect (A:L - dial redirection/failure and reachability disruption); confidentiality is N because the description explicitly notes the connection upgrade still verifies remote peer identity, preventing a full identity/traffic takeover. So this is NOT a complete impersonation flaw. No EPSS score, no CISA KEV listing, and no public POC were provided in the input, so exploitation status is 'no public exploit identified at time of analysis' - treat the 8.2 as a design-level integrity risk rather than evidence of mass exploitation. The fix (12.0.24) and root cause are strongly confirmed by the vendor advisory, PR #3570, and the added regression tests, which materially increases confidence in the technical assessment. Net: a real, patch-now issue for libp2p-based P2P networks, but not a confirmed-exploited emergency. |
| Exploit ScenarioDerived | An attacker joins a libp2p network and, via the gossipsub Peer Exchange path, supplies its own peer ID as expectedPeer while sealing a RecordEnvelope with its own key whose PeerRecord payload names a victim peer ID and attacker-controlled multiaddrs. Because consumePeerRecord never checks that PeerRecord.peerId equals the envelope signer, the victim's certified addresses are overwritten, redirecting or breaking dials to that victim. No public POC was provided, but the added test cases in PR #3570 demonstrate the exact exploit primitive. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 17, 2026
Address-book poisoning in the @libp2p/peer-store component of js-libp2p (8.0.0 up to, but not including, 12.0.24) allows an unauthenticated remote peer to store attacker-controlled multiaddrs as certified addresses under a victim peer ID, because consumePeerRecord validates only the RecordEnvelope signer and never checks that the signed PeerRecord.peerId matches the signer's own peer ID. The gossipsub Peer Exchange path makes this trivially reachable: it lets the attacker supply its own peer ID as the expectedPeer option while naming a victim in the signed payload, so the poisoned addresses are accepted and persisted for the victim, enabling dial redirection, dial failure, routing manipulation and reachability disruption. The connection upgrade still verifies the remote peer's true identity, so full identity takeover or traffic interception is not achieved; no public exploit identified at time of analysis, and the issue is fixed in peer-store 12.0.24 (CVSS 8.2, AV:N/AC:L/PR:N/UI:N/C:N/I:H/A:L, CWE-290).
RemediationAI
Upgrade to the vendor-released fix: @libp2p/peer-store 12.0.24 (js-libp2p release tag peer-store-v12.0.24), which adds a check in consumePeerRecord requiring PeerRecord.peerId to equal the signer peer ID derived from the RecordEnvelope, rejecting mismatched records (see the advisory GHSA-vrf4-mx87-p53w and PR https://github.com/libp2p/js-libp2p/pull/3570). If an immediate upgrade is not possible, disable or decline gossipsub Peer Exchange so untrusted peers cannot feed certified address records into the peer store - the trade-off is slower peer discovery and reduced mesh bootstrap efficiency - and restrict consumers of consumePeerRecord so that the expectedPeer option is never set from attacker-controlled input (for example, only accept peer records that the application itself requested for a known peer); these are compensating controls, not equivalents to patching, since an attacker-supplied record that the application routes into the vulnerable code path will still be accepted. Note that even on unpatched versions the connection upgrade continues to verify the remote peer's identity, which limits the practical impact to address-book corruption, dial redirection/failure, routing manipulation and reachability disruption rather than identity takeover or payload interception, so prioritise patching of nodes that expose gossipsub PX to untrusted peers.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in npm, euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
libp2p is a modular peer-to-peer networking stack, and @libp2p/peer-store maintains the local address book of known peers. Peer records are exchanged as a RecordEnvelope: a signature over a PeerRecord payload containing the peerId, a sequence number and a list of multiaddrs, opened and certified via RecordEnvelope.openAndCertify, which derives the signer peer ID from the signing key. The vulnerability (CWE-290, Authentication Bypass by Spoofing) arises because PersistentPeerStore.consumePeerRecord in packages/peer-store/src/index.ts verifies the envelope signature and, when the expectedPeer option is supplied, confirms only that the envelope's signer matches that option - it never requires the PeerRecord.peerId embedded in the signed payload to equal the signer's peer ID. Because the gossipsub Peer Exchange (PX) path passes the reporting peer's own ID as expectedPeer, an attacker can seal an envelope with its own key, put a victim peer ID plus attacker-controlled multiaddrs (and a higher seqNumber) in the payload, and satisfy the expectedPeer check with its own identity; the record is then accepted and its addresses stored as certified for the victim. The upstream fix added by PR #3570 inserts a check that peerRecord.peerId equals the signer-derived peerId, discarding mismatched records before storage.
Know when Libp2P gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:L
Network-reachable, low-complexity, no auth or interaction (attacker is just a peer supplying its own expectedPeer); high integrity from certified-address poisoning, low availability from dial disruption, no confidentiality since peer identity is still verified on upgrade.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
libp2p is a JavaScript implementation of the libp2p networking stack. From 8.0.0 until 12.0.24, @libp2p/peer-store in packages/peer-store/src/index.ts uses consumePeerRecord to verify a RecordEnvelope signature but does not require PeerRecord.peerId in the signed payload to equal the signer peer ID derived by RecordEnvelope.openAndCertify. The expectedPeer option checks only the envelope signer, and the gossipsub Peer Exchange path can provide the attacker's own peer ID as expectedPeer. An attacker can therefore sign a record with the attacker's key, place a victim peer ID and attacker-controlled multiaddrs in the payload, and have certified addresses stored for the victim. The poisoned addresses can cause address-book corruption, dial redirection or failure, routing manipulation, and reachability disruption, although the connection upgrade still verifies remote peer identity and prevents a complete identity takeover. The issue is fixed in version 12.0.24.
Technical POC Analysis
CWE-290 (Authentication Bypass by Spoofing); the advisory also tags CWE-345.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Latest POC
1 public PoC link from github
Sign in to open the public PoC links collected for this CVE.
Executive ViewAI
The @libp2p/peer-store component of js-libp2p (versions 8.0.0 through 12.0.23) can be poisoned by any unauthenticated remote peer, allowing attacker-supplied network addresses to be persisted under another node's identity and corrupting how peer-to-peer applications locate and connect to each other. Because js-libp2p underpins blockchain, storage, and decentralized networking services, affected deployments face degraded connectivity, failed peer dials, and manipulated routing rather than theft of data or takeover of node identity. Leadership should care because the fix is a routine dependency upgrade, while delay leaves the organization's peer-to-peer services exposed to persistent, low-effort availability and routing disruption.
Apply vendor patch.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
Denial-of-service in libp2p-rendezvous ≤0.17.1 (Rust) allows a malicious rendezvous server to crash any connecting clien
go-libp2p is the Go implementation of the libp2p Networking Stack. Rated high severity (CVSS 7.5), this vulnerability is
Uncontrolled resource consumption in py-libp2p's yamux stream multiplexer allows any remote peer that completes a standa
Forged message authorship in @libp2p/gossipsub 15.0.0 through 16.0.4 lets an unauthenticated, remote attacker sign a gos
Rust Yamux prior to version 0.13.10 is vulnerable to denial of service when processing specially crafted inbound stream
Remote unauthenticated denial of service in rust-libp2p Gossipsub affects versions prior to 0.49.5 and allows any peer t
Unauthenticated remote denial of service in @libp2p/webrtc (the js-libp2p WebRTC transport) before 6.0.28 lets a single
Unauthenticated denial of service in @libp2p/floodsub before 11.0.26 (packaged with js-libp2p < 11.0.26) lets a remote p
Unbounded abort listener accumulation in js-libp2p's circuit-relay-v2 relay server allows any remote peer to exhaust mem
libp2p is a networking stack and library modularized out of The IPFS Project, and bundled separately for other tools to
go-libp2p is the offical libp2p implementation in the Go programming language. Rated high severity (CVSS 7.5), this vuln
js-libp2p is the official javascript Implementation of libp2p networking stack. Rated high severity (CVSS 7.5), this vul
EUVD-2026-81686
GHSA-vrf4-mx87-p53w
NVD
CVE.org
EPSS
Exploit-DB