Skip to main content

@libp2p/peer-store EUVDEUVD-2026-81686

| CVE-2026-86039 HIGH
Authentication Bypass by Spoofing (CWE-290)
2026-09-17 GitHub_M GHSA-vrf4-mx87-p53w
8.2
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Join libp2p network as peer
  2. Delivery
    Seal PeerRecord with attacker key, victim peerId + rogue multiaddrs
  3. Exploit
    Deliver via gossipsub Peer Exchange with attacker peerId as expectedPeer
  4. Execution
    Signature check passes, certified addresses stored for victim
  5. Impact
    Dials 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.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
1 public PoC Patch available 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

js-libp2p 8.0.0, < 12.0.24

Affected Packages

npm @libp2p/peer-store fix: 12.0.24
euvd js_libp2p_8_0_0 fix: 12.0.24

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

Vendor (GitHub_M) PRIMARY 8.2 HIGH
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:L
vuln.today AI 8.2 HIGH

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.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:L
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/VA:L/SC:N/SI:N/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
High
Availability
Low

Lifecycle Timeline

2
Patch available
Sep 17, 2026 - 16:02 EUVD
CVE Published
Sep 17, 2026 - 15:19 cve.org
HIGH 8.2

DescriptionCVE.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

Why It Matters

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.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.2%
Top 92% exploitable
Prevalence
Medium
core JS libp2p networking stack used across IPFS/Filecoin/Web3 apps
Threat Intel
1
1 source
Data Quality
5 sources
Confidence: Medium

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.

SignalValue
Severity HIGH
CISA KEV No
Public POC Yes
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
Poc
System Exposure· derived
Open
Automatable· derived
Yes
Human Impact
High

Priority Score

61
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +41
PoC: +20
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.

More in Libp2P

View all
CVE-2026-89146 HIGH POC
8.7 Sep 11

Denial-of-service in libp2p-rendezvous ≤0.17.1 (Rust) allows a malicious rendezvous server to crash any connecting clien

CVE-2023-39533 HIGH POC
7.5 Aug 08

go-libp2p is the Go implementation of the libp2p Networking Stack. Rated high severity (CVSS 7.5), this vulnerability is

CVE-2026-73568 HIGH POC
7.5 Aug 13

Uncontrolled resource consumption in py-libp2p's yamux stream multiplexer allows any remote peer that completes a standa

CVE-2026-86038 HIGH POC
7.5 Sep 17

Forged message authorship in @libp2p/gossipsub 15.0.0 through 16.0.4 lets an unauthenticated, remote attacker sign a gos

CVE-2026-32314 HIGH
8.7 Mar 13

Rust Yamux prior to version 0.13.10 is vulnerable to denial of service when processing specially crafted inbound stream

CVE-2026-95859 HIGH
8.7 Oct 16

Remote unauthenticated denial of service in rust-libp2p Gossipsub affects versions prior to 0.49.5 and allows any peer t

CVE-2026-103936 HIGH
7.5 Oct 15

Unauthenticated remote denial of service in @libp2p/webrtc (the js-libp2p WebRTC transport) before 6.0.28 lets a single

CVE-2026-86040 HIGH
7.5 Sep 17

Unauthenticated denial of service in @libp2p/floodsub before 11.0.26 (packaged with js-libp2p < 11.0.26) lets a remote p

CVE-2026-77384 HIGH
7.5 Aug 24

Unbounded abort listener accumulation in js-libp2p's circuit-relay-v2 relay server allows any remote peer to exhaust mem

CVE-2023-40583 HIGH
7.5 Aug 25

libp2p is a networking stack and library modularized out of The IPFS Project, and bundled separately for other tools to

CVE-2022-23492 HIGH
7.5 Dec 08

go-libp2p is the offical libp2p implementation in the Go programming language. Rated high severity (CVSS 7.5), this vuln

CVE-2022-23487 HIGH
7.5 Dec 07

js-libp2p is the official javascript Implementation of libp2p networking stack. Rated high severity (CVSS 7.5), this vul

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy