Skip to main content

libp2p WebRTC EUVDEUVD-2026-102224

| CVE-2026-103936 HIGH
Uncaught Exception (CWE-248)
2026-10-15 GitHub_M
7.5
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

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

  1. Access
    Reach UDP webRTCDirect listener port
  2. Delivery
    Send STUN Binding Request with short ufrag
  3. Exploit
    ufrag reused as ICE password in native setLocalDescription
  4. Execution
    libdatachannel raises uncaught invalid_argument
  5. Impact
    Process 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.

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

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

Alert me

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

js-libp2p < 3.3.7
webrtc < 6.0.28

Affected Packages

euvd js_libp2p fix: 3.3.7
euvd webrtc fix: 6.0.28

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

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

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.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/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
None
Availability
High

Lifecycle Timeline

2
Patch available
Oct 15, 2026 - 19:18 EUVD
CVE Published
Oct 15, 2026 - 17:28 cve.org
HIGH 7.5

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

Why It Matters

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.

Business Impact: High
Compensating Controls

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

EPSS Score
0.5%
Top 57% exploitable
Prevalence
Medium
widely-used p2p/IPFS library, but only Node.js webRTCDirect listeners affected
Social Media
1
Sightings
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 No
EPSS 0.5%
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
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
Yes
Human Impact
High
Technical Impact
Partial

Priority Score

39
Low Medium High Critical
KEV: 0
EPSS: +1
CVSS: +38
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

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-2026-86039 HIGH POC
8.2 Sep 17

Address-book poisoning in the @libp2p/peer-store component of js-libp2p (8.0.0 up to, but not including, 12.0.24) allows

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