CVE-2026-55950: Erlang/OTP DTLS Demux Race Condition DoS Vulnerability
Erlang/OTP's DTLS (Datagram Transport Layer Security) implementation contains a race condition that allows an unauthenticated attacker to crash all active DTLS connections on a server listener by sending rapid reconnection attempts from the same network address. The vulnerability exploits a timing gap in how the shared connection router (demux process) handles concurrent client reconnections, causing it to crash in a way that brings down every session on that listener, not just the attacker's connection. This creates a denial of service affecting all clients simultaneously.
Source data · NVD / CISA · public domain
- CVSS
- 3.1 · 5.9 MEDIUM · CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H
- Weaknesses (CWE)
- CWE-367
- Affected products
- 2 configuration(s)
- Published / Modified
- 2026-07-02 / 2026-07-24
NVD description (verbatim)
Time-of-check Time-of-use (TOCTOU) race condition vulnerability in Erlang/OTP ssl (dtls_packet_demux module) allows an unauthenticated remote attacker to crash all active DTLS sessions on a listener. A DTLS server listener uses a single shared dtls_packet_demux gen_server process to route incoming UDP datagrams to the correct connection handler. When a DTLS client reconnects rapidly from the same source address and port (sending multiple ClientHello messages in quick succession), a race condition in the demux's internal gb_trees key-value store causes a {key_exists, {old, Client}} crash, terminating the demux process. Because the demux is shared across all DTLS associations on that listener, its crash immediately kills every active DTLS session, not just the attacker's. The attack is pre-authentication: the attacker only needs to send UDP datagrams containing valid ClientHello messages from the same source IP and port before the intermediate DOWN monitor message is processed by the gen_server. No credentials, no completed handshake, and no special configuration are required, and the crash can be repeated indefinitely to create a persistent denial of service for all clients of that listener. This vulnerability is associated with program file lib/ssl/src/dtls_packet_demux.erl. This issue affects OTP from OTP 25.3 before OTP 29.0.3, OTP 28.5.0.3 and OTP 27.3.4.14, corresponding to ssl from 10.9 before 11.7.3, 11.6.0.3 and 11.2.12.10.
5 reference(s) · View on NVD →
SEC.co analysis · AI-assisted, reviewed against source
Technical summary
CVE-2026-55950 is a Time-of-check Time-of-use (TOCTOU) race condition in the dtls_packet_demux module of Erlang/OTP's ssl library. The dtls_packet_demux gen_server process maintains a gb_trees data structure to route incoming UDP datagrams to appropriate connection handlers. When a DTLS client sends multiple ClientHello messages in rapid succession from the same source IP:port before a prior DOWN monitor message is processed by the gen_server, the race condition causes the internal key-value store to encounter a {key_exists, {old, Client}} exception. This crashes the demux process itself. Because the demux is a singleton shared across all DTLS associations on a listener, its termination immediately severs every active DTLS session on that endpoint. The attack requires only valid ClientHello framing and operates pre-authentication, meaning no TLS handshake completion or credentials are needed. The vulnerability affects Erlang/OTP versions 25.3 through 29.0.2, with specific patch boundaries at OTP 29.0.3, OTP 28.5.0.3, and OTP 27.3.4.14.
Business impact
Organizations relying on Erlang/OTP for DTLS-based communication—common in IoT gateways, real-time applications, and message-oriented systems—face complete service disruption. An attacker can repeatedly trigger the crash from outside the network with minimal effort, creating a persistent denial of service. Unlike vulnerabilities requiring authenticated access or specific configuration, this flaw is exploitable immediately upon exposure. The shared demux architecture means a single attacker stream terminates service for all concurrent clients, multiplying business impact. Recovery requires manual process restart, during which all sessions remain down. Industries relying on continuous DTLS communication (industrial IoT, gaming, telecom signaling) face significant operational risk.
Affected systems
Erlang/OTP ssl module versions before the following patches are vulnerable: OTP 29.0.3 and later (if running 29.x), OTP 28.5.0.3 and later (if running 28.x), OTP 27.3.4.14 and later (if running 27.x), and all versions prior to OTP 25.3. The vulnerability resides in lib/ssl/src/dtls_packet_demux.erl. Any DTLS server deployed on these versions that accepts UDP connections is at risk. The Erlang ssl library (versions before 11.7.3 for current branch, with fixes in 11.6.0.3 and 11.2.12.10 for older branches) embeds the vulnerable code. Applications using Erlang/OTP for DTLS listeners without updating to patched versions remain vulnerable.
Exploitability
Exploitability is moderate to high. The attack requires network-level UDP access to the DTLS listener and the ability to craft valid ClientHello messages, but no TLS handshake completion, authentication, or special configuration. The attacker can repeat the crash indefinitely from a single source address, making the attack trivial to sustain. Detection by conventional intrusion signatures is difficult because the traffic is cryptographically valid DTLS handshake material. The CVSS score of 5.9 (Medium) reflects the availability impact and network accessibility, balanced against the requirement for precise timing and the need to repeat the attack for sustained denial of service. However, the practical severity is elevated by the shared demux design that amplifies impact across all users.
Remediation
Immediately patch Erlang/OTP to version 29.0.3 or later, or apply the corresponding fixes in the 28.x and 27.x branches (OTP 28.5.0.3 and OTP 27.3.4.14 respectively). Verify the ssl module version aligns with the patched OTP release. For systems unable to patch immediately, implement network-level rate limiting on UDP traffic to the DTLS listener port to slow rapid reconnection attempts, though this is not a complete mitigation. Consider isolating DTLS listeners behind a UDP load balancer or gateway that can detect and throttle malformed or rapid ClientHello sequences. Restart the Erlang application to ensure new code paths are loaded after patching.
Patch guidance
Consult the official Erlang/OTP release notes for your branch (25.x, 27.x, 28.x, or 29.x). Update to OTP 29.0.3 or later for the current release line, or apply the backported fixes: OTP 28.5.0.3 for the 28.x line and OTP 27.3.4.14 for the 27.x line. Verify patch application by checking the ssl module version in the running Erlang system using erlang:system_info(otp_release) and cross-referencing against the OTP release advisory. Patch testing should include DTLS listener stress tests with concurrent connection churn to confirm the demux process no longer crashes under rapid reconnection. Rolling updates are recommended if the application supports graceful listener migration.
Detection guidance
Monitor Erlang/OTP application logs for dtls_packet_demux gen_server crashes, which typically manifest as '{error, "Unexpected exit"}' or process restart loops. Correlate crash timestamps with inbound UDP traffic patterns to the DTLS listener port—rapid ClientHello messages from a single source IP:port in the seconds preceding a crash indicate attack activity. Network telemetry tools can flag unusual UDP retransmit patterns on the DTLS port (typically 5684 for CoAP-DTLS or custom ports) from external sources. Establish baseline metrics for DTLS session churn and alert on anomalous spikes. Cross-reference application performance monitoring (APM) data for sudden loss of all active DTLS sessions in a short window, which is characteristic of demux process termination.
Why prioritize this
Although the CVSS score is Medium (5.9), this vulnerability warrants high prioritization because it is pre-authentication, exploitable with minimal skill and effort, and causes complete service loss for all DTLS clients on an affected listener. The shared demux architecture amplifies impact beyond a single attacker session. Organizations operating DTLS services should prioritize patching within their standard critical/high maintenance windows. The vulnerability is not yet known to be exploited in the wild (KEV status is not assigned), providing a window to patch proactively before adoption by threat actors.
Risk score, explained
The CVSS v3.1 score of 5.9 (Medium) reflects: Attack Vector Network (AV:N) because the attacker only needs UDP network access; Attack Complexity High (AC:H) because successful exploitation requires precise timing of multiple ClientHello messages to race the gen_server's processing of DOWN monitor messages; Privileges Required None (PR:N) and User Interaction None (UI:N) because no authentication or user action is needed; Scope Unchanged (S:U); and Availability impact High (A:H) because all DTLS sessions on the listener crash. The score does not fully capture the practical severity of a shared demux crashing all concurrent sessions, but it appropriately weights the AC:H timing dependency. Organizations should consider local risk context: if DTLS is mission-critical and the application is internet-facing, treat this as high-priority; if DTLS is internal or non-critical, follow standard patching cadence.
Frequently asked questions
What is a TOCTOU race condition and why does it apply here?
TOCTOU (Time-of-check Time-of-use) occurs when the time between verifying a condition and acting on it allows the condition to change. Here, the demux checks whether a client key exists in the gb_trees store (time-of-check), but before it can update the tree (time-of-use), another concurrent ClientHello arrives and triggers the same logic. The race creates a {key_exists, {old, Client}} exception because two rapid messages attempt to insert the same key, violating the tree's invariant. The fix adds synchronization or state management to prevent concurrent modifications of the same key during the reconnection window.
Why does the demux crash affect all DTLS sessions, not just the attacker's?
The dtls_packet_demux is a single gen_server process shared by all DTLS connections on a listener. It routes incoming UDP datagrams to the correct connection handler based on source IP:port. When the demux crashes due to the race condition, the entire routing layer for that listener goes down, so no incoming datagrams—from the attacker or legitimate clients—can be routed. All sessions terminate at once. This is an architectural issue: the single point of failure in the demux design means one buggy code path affects all users.
Can I run DTLS on a non-standard port to avoid this vulnerability?
No. The vulnerability is not port-specific; it occurs in the demux logic regardless of which UDP port the DTLS listener binds to. Changing ports provides no protection. The only mitigation is to patch Erlang/OTP to a version that fixes the race condition or to implement network-level rate limiting on UDP traffic to slow rapid ClientHello sequences. However, network-level mitigations are not a substitute for patching.
Is this vulnerability currently being exploited in the wild?
No. As of the vulnerability's publication and modification dates, CVE-2026-55950 has not been added to the CISA Known Exploited Vulnerabilities (KEV) catalog, and no public proof-of-concept or active exploitation has been widely reported. This provides a window to patch proactively before adoption by threat actors. Organizations should prioritize patching within their standard maintenance cycle to stay ahead of potential weaponization.
This analysis is based on published CVE data as of the provided source material and represents the known technical details at that time. Severity assessment and exploitability are subject to change as new information, public exploits, or deployment patterns emerge. Organizations should verify patch availability and applicability to their specific Erlang/OTP version against official Erlang/OTP release notes and security advisories before applying updates. This document does not constitute a substitute for vendor guidance or internal security review. Test patches in a non-production environment before deployment to production systems. Source: NVD (public-domain), retrieved 2026-08-11. Analysis generated by SEC.co (claude-haiku-4-5).
Related vulnerabilities
- CVE-2025-59610MEDIUMQualcomm Memory Corruption via IOCTL API Version Mismatch – Patch Guidance
- CVE-2026-13502MEDIUMANTLR4 Maven Plugin TOCTOU Vulnerability Guide
- CVE-2026-14160MEDIUMTOCTOU Race Condition in Samsung Escargot JavaScript Engine
- CVE-2026-20454MEDIUMMediaTek geniezone Race Condition Privilege Escalation (CVSS 6.4)
- CVE-2026-41568MEDIUMDocker & Moby Race Condition in docker cp Mount Setup
- CVE-2026-45619MEDIUMWWBN AVideo DNS-Rebinding SSRF Vulnerability
- CVE-2026-45647MEDIUMMicrosoft Defender for Endpoint Privilege Escalation Race Condition
- CVE-2026-46159MEDIUMLinux btrfs TOCTOU Race Condition Information Disclosure