Impact
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. This is a pre-authentication attack: the attacker only needs to send UDP datagrams
containing valid ClientHello messages from the same source IP:port before the intermediate DOWN monitor message is
processed by the gen_server.
The attack requires no credentials, no completed handshake, and no special configuration. Any DTLS listener accepting
connections from untrusted networks is vulnerable. The attacker can repeat the crash indefinitely, creating a persistent
denial of service for all clients of that listener.
Affected/Unaffected Versions
A version larger than or equal to one of the listed patched versions is unaffected; otherwise, a version that satisfies an expression listed under affected versions is affected, and if it does not, it is unaffected.
The code enabling this was introduced in OTP-25.3.
Credits
Thanks to Lukas Backström at Erlang Solutions for finding and responsibly disclosing this vulnerability to the Erlang/OTP project.
Impact
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. This is a pre-authentication attack: the attacker only needs to send UDP datagrams
containing valid ClientHello messages from the same source IP:port before the intermediate DOWN monitor message is
processed by the gen_server.
The attack requires no credentials, no completed handshake, and no special configuration. Any DTLS listener accepting
connections from untrusted networks is vulnerable. The attacker can repeat the crash indefinitely, creating a persistent
denial of service for all clients of that listener.
Affected/Unaffected Versions
A version larger than or equal to one of the listed patched versions is unaffected; otherwise, a version that satisfies an expression listed under affected versions is affected, and if it does not, it is unaffected.
The code enabling this was introduced in OTP-25.3.
Credits
Thanks to Lukas Backström at Erlang Solutions for finding and responsibly disclosing this vulnerability to the Erlang/OTP project.