Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessReach UDP webRTCDirect listener port
-
DeliverySend STUN Binding Request with short ufrag
-
Exploitufrag reused as ICE password in native setLocalDescription
-
Executionlibdatachannel raises uncaught invalid_argument
-
ImpactProcess aborts (SIGABRT) denying service
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A10:2025 - Mishandling of Exceptional Conditions
ASVS 5.0
V16 - Security Logging and Error Handling Exception handling completeness
|
| Exploitation Conditions | The target must be running @libp2p/webrtc (js-libp2p) before version 6.0.28 with a webRTCDirect() listener on Node.js (not a browser peer), backed by node-datachannel/libdatachannel. Because the STUN Binding Request is processed before PeerId authentication, Noise, muxing, protocol negotiation, and connection-manager admission, NO credentials, prior connection, or user interaction are required - a single UDP packet reaching the listener suffices. The only prerequisite content is a ufrag that violates the RFC 8445 ICE-credential requirement (22-256 chars from [a-zA-Z0-9+/]); any shorter or out-of-charset value triggers the crash. Limiting factors that reduce real-world exposure: browser-side peers are unaffected, nodes that do not expose a webRTCDirect UDP listener are unaffected, and the impact is confined to termination of the single listening process. |
| Impact | All signals point to a genuine but narrowly-scoped availability risk. The CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H, 7.5 HIGH) is credible and internally consistent with the description: a single unauthenticated remote UDP packet processed before any PeerId/Noise authentication triggers an uncaught native exception (CWE-248) and SIGABRT, killing the process. The high CVSS is driven entirely by the availability impact (A:H); there is explicitly NO confidentiality, integrity, code-execution, or memory-corruption impact, so despite the 'HIGH' label this is a pure denial-of-service, not a critical compromise. No EPSS score, KEV listing, or SSVC decision data was provided in the input, so exploitation probability cannot be quantified from intelligence feeds - there is no public exploit identified at time of analysis, though the vendor patch ships a regression test that reproduces the crash, making the trigger condition trivially understood. Note a tagging conflict: the input Tags assert 'RCE' and 'Buffer Overflow', which directly contradict the authoritative advisory text stating no code execution or memory corruption - these tags are wrong and should not inflate perceived severity. Real-world priority is moderate: easy, reliable, unauthenticated remote DoS against any exposed webRTCDirect Node.js listener, but with no path to data loss or RCE and a narrow affected deployment surface. |
| Exploit ScenarioDerived | An attacker who can reach the UDP port of a Node.js peer running a @libp2p/webrtc webRTCDirect() listener sends a single crafted STUN Binding Request whose ufrag is shorter than the RFC 8445 minimum (or uses an invalid character set). The listener forwards the attacker-controlled ufrag into setLocalDescription as the ICE password without validation, node-datachannel/libdatachannel raises an uncaught native invalid_argument, and the entire process aborts with SIGABRT. No authentication is required and no public exploit tool is needed - the vendor's own regression test demonstrates the crash with a short 'controlled' value. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 15, 2026
Unauthenticated remote denial of service in @libp2p/webrtc (the js-libp2p WebRTC transport) before 6.0.28 lets a single crafted UDP STUN Binding Request abort a Node.js webRTCDirect() listener process with SIGABRT, because the attacker-controlled ufrag field is forwarded into DirectRTCPeerConnection.setLocalDescription and reused as the ICE password without any length or character-set validation. The vulnerable code path runs before PeerId authentication, Noise, muxing, protocol negotiation, connection creation, and connection-manager admission, so no credentials, prior connection, or user interaction are required - matching a CVSS 3.1 vector of AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H (7.5). The confirmed impact is process termination only; no memory corruption, code execution, confidentiallity or integrity impact, browser-side impact, or connection-limit bypass has been demonstrated, and no public exploit code or CISA KEV entry was identified at time of analysis. Affected deployments are limited to Node.js peers that actively expose a webRTCDirect UDP listener; browser peers and nodes without such a listener are unaffected.
RemediationAI
Upgrade @libp2p/webrtc to 6.0.28 or later - the vendor-released patch version is 6.0.28, published as release tag webrtc-v6.0.28 - and redeploy the Node.js listener; the fix adds ufrag validation (isValidUfrag, requiring 22-256 characters from [a-zA-Z0-9+/]) in the STUN listener plus a recoverable InvalidParametersError backstop in DirectRTCPeerConnection.setLocalUfrag so a malformed request can no longer reach the native ICE stack. Details are in advisory GHSA-x3m2-6mg8-vj7f and PR 3584 (commit 68794c8e2e67d5f38da59e379dc051b2789e46f6). If upgrading is not immediately possible, the highest-value compensating control is to stop exposing the webRTCDirect UDP listener to untrusted networks: restrict the listening UDP port via host firewall or security-group rules to known peer IPs, or disable the WebRTC-direct transport entirely in favour of TCP/QUIC transports - the trade-off is loss of browser-to-node and NAT-traversal connectivity for WebRTC peers. Rate-limiting or deep-inspecting inbound UDP STUN traffic (blocking packets whose ufrag is absent, shorter than 22 characters, or outside [a-zA-Z0-9+/]) can filter the trigger but requires a STUN-aware proxy and adds latency and operational complexity. Running the listener under a supervisor with automatic restart (for example systemd Restart=always or a process manager) limits downtime to seconds per packet but does not prevent the abort itself, can create crash-restart loops under sustained flooding, and may drop active connections; it should be treated as damage limitation, not a fix. No public exploit code was identified at time of analysis, so prioritization can follow normal patching cadence, weighted by whether the node's WebRTC-direct UDP port is internet-reachable.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The root cause class is CWE-248 (Uncaught Exception), realized in the WebRTC-direct transport of js-libp2p. The listener in packages/transport-webrtc/src/private-to-public/utils/stun-listener.ts handled incoming STUN Binding Requests before any PeerId authentication and passed request.ufrag straight through to DirectRTCPeerConnection.setLocalDescription, where the ufrag is reused as the ICE password (icePwd). RFC 8445 requires ICE credentials to be 22-256 characters drawn from the ice-char set [a-zA-Z0-9+/]; a shorter or out-of-charset value causes the underlying native ICE stack (node-datachannel / libdatachannel, binding to libdatachannel) to throw a C++ std::invalid_argument that is not caught in the JavaScript layer, so the Node.js runtime aborts the whole process with SIGABRT. The upstream fix introduces an isValidUfrag() regex guard (^[a-zA-Z0-9+/]{22,256}$) in packages/transport-webrtc/src/util.ts, routes STUN handling through handleStunRequest() which drops requests carrying an invalid ufrag, and adds a defense-in-depth backstop in DirectRTCPeerConnection.setLocalUfrag() that throws a recoverable InvalidParametersError instead of allowing the native abort. The two affected CPE identifiers, cpe:2.3:a:libp2p:js-libp2p and cpe:2.3:a:@libp2p:webrtc, confirm the exposure is confined to the JavaScript/TypeScript libp2p implementation and its WebRTC transport package. Note that the associated tags reference 'RCE' and 'Buffer Overflow'; those labels are not substantiated by the advisory text, the patch, or the independent assessment, which confirm an availability-only crash with no demonstrated memory corruption or code execution.
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
A single unauthenticated remote UDP packet reliably aborts the process, so AV:N/AC:L/PR:N/UI:N with A:H; no confidentiality or integrity impact (C:N/I:N) and no scope change.
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 6.0.28, the @libp2p/webrtc webRTCDirect() Node.js listener processes unauthenticated STUN Binding Requests before PeerId authentication, Noise, muxing, protocol negotiation, connection creation, or connection-manager admission. The listener in packages/transport-webrtc/src/private-to-public/utils/stun-listener.ts forwards the packet-controlled request.ufrag into DirectRTCPeerConnection.setLocalDescription, where the value is reused as an ICE password without validating its required length and character set. A short credential causes node-datachannel or libdatachannel to raise an uncaught native invalid_argument and abort the process with SIGABRT, allowing a single remote UDP packet to deny service. The confirmed impact is process termination only, with no demonstrated memory corruption, code execution, browser impact, confidentiality impact, integrity impact, or connection-limit bypass. This issue is fixed in version 6.0.28.
Technical POC Analysis
CWE-248 (Uncaught Exception; advisory also lists CWE-755).
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
Organizations that run JavaScript libp2p nodes with the WebRTC transport enabled - blockchain validators, IPFS/Filecoin infrastructure, public relays and any service exposing webRTCDirect() listeners - can have those node processes terminated by a single crafted UDP packet sent by an unauthenticated party. The practical consequence is availability loss: node downtime, missed validator duties, degraded peer connectivity and repeat crash loops if traffic is sustained. Leadership should treat this as a service-continuity risk rather than a data-breach risk, because the confirmed impact is limited to process termination and no public exploit identified at time of analysis; however, no vendor-released patch identified at time of analysis, so exposure persists until mitigations are in place.
No vendor-released patch identified at time of analysis. Interim mitigations: block or rate-limit inbound UDP STUN traffic to webRTCDirect() listeners at the firewall/security group, and allow only known peer addresses; avoid exposing WebRTC-direct listeners on public interfaces where possible; disable the WebRTC-direct transport in favour of TCP/WebSocket transports on internet-facing nodes; run the node under supervision with automatic restart, liveness probes and alerting on repeated SIGABRT/restarts to limit outage duration; deploy IDS/IPS signatures for malformed STUN Binding Requests and anomalous ufrag values; capture core dumps and crash telemetry for evidence; monitor the vendor advisory and upgrade to @libp2p/webrtc 6.0.28 or later as soon as a fixed release is confirmed available.
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
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 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-102224
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB