CVE-2026-94200
8.2HighPublished 14 Oct 2026 · NVD status: Deferred · AI triage by gemini-3.8-flash
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- None
- User interaction
- None
- Impact
- High impact on availability
- Weakness
- CWE-1288
Impact
A malicious TLS 1.3 server can crash the ssl application on your client node, cutting off all TLS connections node-wide. The attacker only needs your Erlang client to connect to their server with automatic session tickets enabled.
Root cause
The TLS 1.3 client misparses NewSessionTicket extensions using EncryptedExtensions rules, storing an invalid zero-length early_data extension that crashes the ticket store on resumption.
Affected systems
Erlang/OTP 23.3 before 27.3.4.19, 28.5.0.8, and 29.1.2 (ssl application versions 10.3 before 11.2.12.14, 11.6.0.7, and 11.7.8)
CVSS v4.0 · CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
Fix & remediation
Upgrade Erlang/OTP to version 27.3.4.19, 28.5.0.8, 29.1.2, or later. If you cannot patch immediately, disable automatic session ticket storage by avoiding the {session_tickets, auto} TLS client option.
$ erl -eval 'io:format("OTP: ~s, SSL: ~s~n", [erlang:system_info(otp_release), proplists:get_value(vsn, ssl:module_info(attributes))]), halt().' -noshellAI-suggested. Run it in staging first and check it against the vendor advisory. Why?
NVD description
Improper Validation of Consistency within Input vulnerability in Erlang OTP ssl (tls_handshake_1_3, ssl_handshake and tls_client_ticket_store modules) allows a malicious TLS 1.3 server to cause a denial of service of the ssl application on the client node. The TLS 1.3 client decodes the extensions of a NewSessionTicket message as if they came from EncryptedExtensions. It therefore accepts a 0-length early_data extension, a form that is only valid in ClientHello and EncryptedExtensions. With {session_tickets, auto}, the client stores the ticket in the node-global tls_client_ticket_store. On the next automatic resumption, tls_handshake_1_3:get_max_early_data/1 crashes the store with a case_clause. Repeated crashes can exceed the restart intensity of the ssl supervisors, which use the rest_for_one strategy, and take down ssl for all connections on the node. This issue affects OTP from OTP 23.3 before OTP 27.3.4.19, OTP 28.5.0.8, and OTP 29.1.2, corresponding to ssl from 10.3 before 11.2.12.14, 11.6.0.7, and 11.7.8.
References
- https://cna.erlef.org/cves/CVE-2026-94200.html
- https://github.com/erlang/otp/commit/00a333bcf2800b69f540369b54167e897dae7219
- https://github.com/erlang/otp/commit/0abe6f66db0d295cd06b0efab3bdb3caa2803930
- https://github.com/erlang/otp/commit/66febc190e6dc42a5c4aedbfe250bf9a2edc2d5e
- https://github.com/erlang/otp/commit/cd0334854bf3ef56dc16f9fb728efe88fb05c4ac
- https://github.com/erlang/otp/security/advisories/GHSA-m5mh-q53w-67jq
- https://osv.dev/vulnerability/EEF-CVE-2026-94200
- https://www.erlang.org/doc/system/versions.html#order-of-versions