Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessEstablish peering with relay server
-
DeliverySend repeated valid RESERVE messages for same slot
-
ExploitAccumulate abort listeners per refresh
-
ExecutionExhaust relay process heap memory
-
ImpactRelay server crashes or becomes unresponsive
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V2 - Validation and Business Logic Resource consumption limits
MITRE ATT&CK
1 technique across 1 tactic: Impact The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | The target must be running a js-libp2p node configured as a circuit-relay-v2 relay server - nodes acting solely as clients or ordinary peers are not affected. The CVSS vector (PR:N, UI:N, AV:N, AC:L) confirms exploitation requires no authentication, no user interaction, and no special network position beyond TCP/QUIC reachability to the relay server. The RESERVE messages themselves must be valid (well-formed protocol messages from a recognized peer), meaning the attacker must participate in the libp2p network as a legitimate peer identity; however, generating a peer identity is trivial and unauthenticated in practice. What limits exploitation: only relay server deployments are vulnerable, not all js-libp2p nodes; the attack is a resource exhaustion DoS without remote code execution or data exfiltration; and the growth rate is bounded by network throughput to the target. |
| Impact | The CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H) accurately captures the threat profile: network-reachable with no authentication, low complexity, and high availability impact. The attack is trivially automatable - an adversary only needs to repeatedly send valid protocol-conforming RESERVE messages, requiring no exploit of a memory safety bug or race condition. No EPSS data was provided in the input, and this CVE does not appear in the CISA KEV catalog, suggesting no confirmed active exploitation at time of analysis. Despite the absence of KEV listing, the operational risk for relay operators is genuine: even a small, focused DoS campaign against a relay node serving a decentralized application's network could disrupt connectivity for many dependent peers. The impact is bounded to availability (no confidentiality or integrity loss), and the vulnerability only affects nodes configured to operate as circuit-relay-v2 relay servers, which limits the exposed population. The fix is a one-line conditional guard confirmed in the upstream commit, with a dedicated regression test, giving high confidence in the patch. |
| Exploit ScenarioDerived | An attacker connects to a js-libp2p relay server as a valid peer and repeatedly sends RESERVE protocol messages for the same relay slot in a tight loop. Each message is valid and processed normally by the server, which refreshes the reservation and attaches a new abort listener to the reused signal without removing the previous one. After thousands of iterations, the relay server's Node.js process memory grows unboundedly until the event loop degrades or the process is killed by the OS, denying relay service to all legitimate peers. No public proof-of-concept code has been identified, but the attack requires only standard libp2p protocol messages. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 24, 2026
Unbounded abort listener accumulation in js-libp2p's circuit-relay-v2 relay server allows any remote peer to exhaust memory and deny service by repeatedly sending valid RESERVE requests for the same reservation slot. The reservation-store.ts reservation refresh path reuses an existing retimeableSignal but unconditionally registers a new abort listener on every call, causing listeners and their closures to grow without bound. No authentication is required to trigger this, making it exploitable by any peer that can reach the relay server. No public exploit or CISA KEV listing exists at time of analysis, though the unauthenticated network vector and trivial trigger condition make it a credible operational risk for relay operators.
RemediationAI
Upgrade the @libp2p/circuit-relay-v2 package to version 4.2.9 or later, which contains the fix at commit 4bb8fbe8d3f3590e4af51a1f5f7de56fffa5804d. The release is available at https://github.com/libp2p/js-libp2p/releases/tag/circuit-relay-v2-v4.2.9 and via npm. If an immediate upgrade is not possible, operators running relay servers can limit the rate at which any single remote peer may send RESERVE messages using application-level or network-level rate limiting (e.g., a reverse proxy or connection throttle), which will constrain the speed of listener accumulation without eliminating the root cause. Additionally, periodically restarting the relay server process will reclaim accumulated listeners as a stopgap, though this introduces service interruptions. Neither workaround addresses the underlying bug and should only be used while upgrade is pending.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in 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; js-libp2p is its JavaScript implementation (CPE: cpe:2.3:a:libp2p:js-libp2p:*:*:*:*:*:*:*:*). The @libp2p/circuit-relay-v2 package implements the circuit relay protocol, which allows nodes to act as intermediaries relaying connections between peers that cannot directly reach each other. Relay servers maintain a ReservationStore to track which peers have reserved relay slots. The root cause is CWE-400 (Uncontrolled Resource Consumption): in the reserve() method within reservation-store.ts, when refreshing an existing reservation the code reuses the same retimeableSignal object but calls signal.addEventListener('abort', ...) unconditionally on every invocation. Because the same signal instance is reused, each refresh call attaches an additional closure to the same EventTarget without ever removing the prior one. A remote peer sending N refresh RESERVE messages accumulates N dangling listeners, consuming N times the memory and eventually degrading or crashing the relay process.
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:N/A:H
Network-reachable relay server requires no authentication; impact is purely availability via listener exhaustion, with no confidentiality or integrity loss.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
libp2p is a JavaScript implementation of the libp2p networking stack. Prior to version 4.2.9, the reservation refresh path in reservation-store.ts reuses the same retimeableSignal but unconditionally registers another abort listener on every refresh. As a result, a remote peer can repeatedly send valid RESERVE requests for the same reservation, causing unbounded listener and closure growth in @libp2p/circuit-relay-v2 relay servers and leading to denial of service. This issue is fixed in version 4.2.9.
Executive ViewAI
js-libp2p's circuit-relay-v2 relay server contains a memory exhaustion vulnerability that allows unauthenticated remote peers to cause denial of service by repeatedly sending reservation requests, overwhelming relay infrastructure. Organizations operating libp2p relay servers face potential service disruption, and operational controls are required immediately since no vendor patch is currently available.
Implement per-peer connection rate limiting and RESERVE request throttling to restrict exploitation velocity; deploy continuous monitoring of relay memory consumption and abort listener counts with automated alerting on anomalous growth; restrict relay server network access to only trusted peer networks; maintain awareness of js-libp2p security advisories for patch availability.
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
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
Denial-of-service in libp2p-rendezvous ≤0.17.1 (Rust) allows a malicious rendezvous server to crash any connecting clien
Address-book poisoning in the @libp2p/peer-store component of js-libp2p (8.0.0 up to, but not including, 12.0.24) allows
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
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-65154
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB