Description
Key Exchange without Entity Authentication vulnerability in Erlang/OTP ssl allows a peer that answers a TLS 1.3 client connection to impersonate the intended server. A pre_shared_key extension in the ServerHello that the client never offered causes the client to complete the handshake without validating the server's certificate, so ssl:connect returns {ok, Socket} against a peer holding no certificate, no private key and no prior session.

tls_client_connection_1_3:handle_server_hello/2 passes the received extension to tls_gen_connection_1_3:handle_resumption/2, which sets resumption = true on its mere presence without checking that the client offered a PSK. tls_handshake_1_3:get_pre_shared_key/4 meanwhile falls back to the all-zero "no PSK" value and keys the handshake with the ordinary non-PSK schedule, so the attacker's own ephemeral key suffices. The resumption flag then routes maybe_resumption/1 straight to wait_finished, skipping the certificate-handling states, so certificate path validation, verify_fun, hostname verification, partial_chain, CRL checking and OCSP stapling are all bypassed. The default client configuration is affected; clients restricted to TLS 1.2 are not.

This issue affects OTP from OTP 22.2 before OTP 27.3.4.18, OTP 28.5.0.7, and OTP 29.1.1, corresponding to ssl from 9.5 before 11.2.12.13, 11.6.0.6, and 11.7.7.
Published: 2026-09-22
Score: 9.3 Critical
EPSS: < 1% Very Low
KEV: No
Impact: Unauthorized Server Impersonation
Action: Immediate Patch
AI Analysis

Impact

Erlang/OTP SSL is vulnerable to a key‑exchange weakness that allows a malicious TLS 1.3 server to impersonate the intended target without presenting a valid certificate. The bug arises when the server sends a pre‑shared‑key extension that the client never offered; the client then accepts the handshake, skips all certificate validation steps, and establishes a secure channel with an attacker’s key. The result is that the client trusts the attacker as the legitimate server, enabling an unauthenticated man‑in‑the‑middle or replay of the connection.

Affected Systems

The flaw affects Erlang/OTP releases from 22.2 up to the immediate predecessor of 27.3.4.18, as well as OTP 28.5.0.7 and OTP 29.1.1. Within those releases it applies to the default client configuration of the ssl application, specifically ssl versions 9.5 before 11.2.12.13, 11.6.0.6 and 11.7.7. All systems that depend on the standard Erlang/OTP ssl client using TLS 1.3 are potentially impacted, unless they have been configured to use TLS 1.2 only.

Risk and Exploitability

The CVSS score of 9.3 categorizes this as a high‑severity vulnerability. The EPSS score is unavailable, but the lack of existing exploitation examples combined with the widespread use of Erlang/OTP makes the risk significant. The vulnerability is not listed in the CISA KEV catalog at the time of this analysis. An attacker only needs to act as a server in a TLS 1.3 connection; no local privileges or additional access to certificates are required. Because the client skips certificate handling, the attacker can spoof any service without triggering normal TLS checks such as hostname verification, CRL or OCSP stapling.

Generated by OpenCVE AI on September 22, 2026 at 10:23 UTC.

Remediation

Vendor Workaround

Restrict affected clients to TLS 1.2 by setting {versions, ['tlsv1.2']} in the client's ssl options. This avoids the vulnerable code path at the cost of losing TLS 1.3. No configuration both keeps TLS 1.3 and mitigates the issue.


OpenCVE Recommended Actions

  • Upgrade Erlang/OTP to version 27.3.4.18 or later, which includes the SSL patch that redirects the pre‑shared‑key handling path and enforces certificate validation.
  • If an immediate upgrade is not possible, reconfigure the client to restrict connections to TLS 1.2 by setting the ssl option {versions, ['tlsv1.2']}. This avoids the vulnerable TLS 1.3 code path while preserving connectivity.
  • Apply the same TLS 1.2 restriction to any intermediate TLS proxies or load balancers that may participate in client‑server handshakes to prevent an attacker from exploiting the flaw in a multi‑hop environment.

Generated by OpenCVE AI on September 22, 2026 at 10:23 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Tue, 22 Sep 2026 14:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'yes', 'Exploitation': 'none', 'Technical Impact': 'total'}, 'version': '2.0.3'}


Tue, 22 Sep 2026 13:15:00 +0000

Type Values Removed Values Added
First Time appeared Erlang erlang/otp
Erlang otp
Vendors & Products Erlang erlang/otp
Erlang otp

Tue, 22 Sep 2026 09:00:00 +0000

Type Values Removed Values Added
Description Key Exchange without Entity Authentication vulnerability in Erlang/OTP ssl allows a peer that answers a TLS 1.3 client connection to impersonate the intended server. A pre_shared_key extension in the ServerHello that the client never offered causes the client to complete the handshake without validating the server's certificate, so ssl:connect returns {ok, Socket} against a peer holding no certificate, no private key and no prior session. tls_client_connection_1_3:handle_server_hello/2 passes the received extension to tls_gen_connection_1_3:handle_resumption/2, which sets resumption = true on its mere presence without checking that the client offered a PSK. tls_handshake_1_3:get_pre_shared_key/4 meanwhile falls back to the all-zero "no PSK" value and keys the handshake with the ordinary non-PSK schedule, so the attacker's own ephemeral key suffices. The resumption flag then routes maybe_resumption/1 straight to wait_finished, skipping the certificate-handling states, so certificate path validation, verify_fun, hostname verification, partial_chain, CRL checking and OCSP stapling are all bypassed. The default client configuration is affected; clients restricted to TLS 1.2 are not. This issue affects OTP from OTP 22.2 before OTP 27.3.4.18, OTP 28.5.0.7, and OTP 29.1.1, corresponding to ssl from 9.5 before 11.2.12.13, 11.6.0.6, and 11.7.7.
Title TLS 1.3 client skips server authentication when ServerHello carries an unsolicited pre_shared_key extension
First Time appeared Erlang
Erlang erlang\/otp
Weaknesses CWE-322
CPEs cpe:2.3:a:erlang:erlang\/otp:*:*:*:*:*:*:*:*
Vendors & Products Erlang
Erlang erlang\/otp
References
Metrics cvssV4_0

{'score': 9.3, 'vector': 'CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N'}


Subscriptions

Erlang Erlang/otp Erlang\/otp Otp
cve-icon MITRE

Status: PUBLISHED

Assigner: EEF

Published:

Updated: 2026-09-22T13:08:15.912Z

Reserved: 2026-09-11T18:45:01.480Z

Link: CVE-2026-89422

cve-icon Vulnrichment

Updated: 2026-09-22T13:08:10.382Z

cve-icon NVD

Status : Received

Published: 2026-09-22T09:17:05.540

Modified: 2026-09-22T14:17:17.453

Link: CVE-2026-89422

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-09-22T13:00:13Z

Weaknesses
  • CWE-322

    Key Exchange without Entity Authentication