TLS 1.2 session resumption in ssl crosses SNI virtual-host client-certificate trust boundaries
Improper Certificate Validation vulnerability in the ssl application in Erlang/OTP allows a client that holds a certificate trusted by one SNI virtual host to authenticate to a second SNI virtual host on the same listener by resuming its TLS 1.2 session there. A server that serves several SNI names from one listen socket through sni_fun or sni_hosts keeps one pre-TLS 1.3 session cache per listener and does not bind a cached session to the SNI name or client trust policy that established it. When an SNI option set switches to verify_peer without naming reuse_sessions, ssl_config:update_options/3 inherits the base listener's reuse_sessions value of true, so the default that disables reuse for client-authenticating servers does not apply. On an abbreviated handshake ssl_session:is_resumable/4 checks only that the cached session uses one of the current server certificates and carries some peer certificate, and never revalidates that certificate against the CA selected for the requested name. The names must share a server certificate, which is common with wildcard or multi-SAN certificates. TLS 1.3 does not use this cache and is not affected. This issue affects OTP from OTP 18.0 before OTP 27.3.4.19, OTP 28.5.0.8, and OTP 29.1.2, corresponding to ssl from 7.0 before 11.2.12.14, 11.6.0.7, and 11.7.8.
CVE-2026-105236
Primary source · Revision 1
Imported from structured advisory data. Source references identify upstream records or fields; verify affected versions and your deployed configuration.
Security context
Source reference: cve:CVE-2026-105236
OTP
Source reference: /containers/cna/affected/0/product
- Affected versions
- Not stated in this record
- Fixed versions
- Not stated in this record
- Prerequisites
- Not stated in this record
OTP
Source reference: /containers/cna/affected/1/product
- Affected versions
- Not stated in this record
- Fixed versions
- Not stated in this record
- Prerequisites
- Not stated in this record
OTP
Source reference: /containers/cna/affected/2/product
- Affected versions
- Not stated in this record
- Fixed versions
- Not stated in this record
- Prerequisites
- Not stated in this record
Structured affected-version data
Original package identities and version rules from this source.
[
{
"cpes": [
"cpe:2.3:a:erlang:erlang\\/otp:*:*:*:*:*:*:*:*"
],
"vendor": "Erlang",
"modules": [
"ssl_gen_statem",
"ssl_config",
"ssl_session",
"ssl_handshake"
],
"product": "OTP",
"versions": [
{
"status": "affected",
"changes": [
{
"at": "27.3.4.19",
"status": "unaffected"
},
{
"at": "28.5.0.8",
"status": "unaffected"
},
{
"at": "29.1.2",
"status": "unaffected"
}
],
"version": "18.0",
"lessThan": "*",
"versionType": "otp"
}
],
"packageURL": "pkg:software-id/erlang.org/otp",
"packageName": "otp",
"programFiles": [
"lib/ssl/src/ssl_gen_statem.erl",
"lib/ssl/src/ssl_config.erl",
"lib/ssl/src/ssl_session.erl",
"lib/ssl/src/ssl_handshake.erl"
],
"defaultStatus": "unaffected",
"programRoutines": [
{
"name": "ssl_gen_statem:handle_sni_extension/2"
},
{
"name": "ssl_gen_statem:handle_sni_hostname/2"
},
{
"name": "ssl_gen_statem:update_ssl_options_from_sni/2"
},
{
"name": "ssl_gen_statem:fallback_options/2"
},
{
"name": "ssl_config:update_options/3"
},
{
"name": "ssl_config:opt_reuse_sessions/3"
},
{
"name": "ssl_session:server_select_session/5"
},
{
"name": "ssl_session:is_resumable/4"
},
{
"name": "ssl_session:reusable_options/2"
},
{
"name": "ssl_handshake:select_session/8"
}
]
},
{
"cpes": [
"cpe:2.3:a:erlang:erlang\\/otp:*:*:*:*:*:*:*:*"
],
"repo": "https://github.com/erlang/otp",
"vendor": "Erlang",
"modules": [
"ssl_gen_statem",
"ssl_config",
"ssl_session",
"ssl_handshake"
],
"product": "OTP",
"versions": [
{
"status": "affected",
"changes": [
{
"at": "11.2.12.14",
"status": "unaffected"
},
{
"at": "11.6.0.7",
"status": "unaffected"
},
{
"at": "11.7.8",
"status": "unaffected"
}
],
"version": "7.0",
"lessThan": "*",
"versionType": "otp"
}
],
"packageURL": "pkg:otp/ssl?repository_url=https:%2F%2Fgithub.com%2Ferlang%2Fotp&vcs_url=git%2Bhttps:%2F%2Fgithub.com%2Ferlang%2Fotp.git",
"packageName": "ssl",
"programFiles": [
"src/ssl_gen_statem.erl",
"src/ssl_config.erl",
"src/ssl_session.erl",
"src/ssl_handshake.erl"
],
"defaultStatus": "unaffected",
"programRoutines": [
{
"name": "ssl_gen_statem:handle_sni_extension/2"
},
{
"name": "ssl_gen_statem:handle_sni_hostname/2"
},
{
"name": "ssl_gen_statem:update_ssl_options_from_sni/2"
},
{
"name": "ssl_gen_statem:fallback_options/2"
},
{
"name": "ssl_config:update_options/3"
},
{
"name": "ssl_config:opt_reuse_sessions/3"
},
{
"name": "ssl_session:server_select_session/5"
},
{
"name": "ssl_session:is_resumable/4"
},
{
"name": "ssl_session:reusable_options/2"
},
{
"name": "ssl_handshake:select_session/8"
}
]
},
{
"cpes": [
"cpe:2.3:a:erlang:erlang\\/otp:*:*:*:*:*:*:*:*"
],
"repo": "https://github.com/erlang/otp",
"vendor": "Erlang",
"modules": [
"ssl_gen_statem",
"ssl_config",
"ssl_session",
"ssl_handshake"
],
"product": "OTP",
"versions": [
{
"status": "affected",
"changes": [
{
"at": "0c20f3683b3c81fd30b46047195be9b3d2c69d76",
"status": "unaffected"
},
{
"at": "4d76adbf39d547a931048544df09c3c087e56618",
"status": "unaffected"
},
{
"at": "10ee925d0fee8413f1170cc21bfcf123c8d22454",
"status": "unaffected"
}
],
"version": "4fe38c4b8b2c8024afb60990e598ff823743fd54",
"lessThan": "*",
"versionType": "git"
}
],
"packageURL": "pkg:github/erlang/otp",
"packageName": "erlang/otp",
"programFiles": [
"lib/ssl/src/ssl_gen_statem.erl",
"lib/ssl/src/ssl_config.erl",
"lib/ssl/src/ssl_session.erl",
"lib/ssl/src/ssl_handshake.erl"
],
"collectionURL": "https://github.com",
"defaultStatus": "unaffected",
"programRoutines": [
{
"name": "ssl_gen_statem:handle_sni_extension/2"
},
{
"name": "ssl_gen_statem:handle_sni_hostname/2"
},
{
"name": "ssl_gen_statem:update_ssl_options_from_sni/2"
},
{
"name": "ssl_gen_statem:fallback_options/2"
},
{
"name": "ssl_config:update_options/3"
},
{
"name": "ssl_config:opt_reuse_sessions/3"
},
{
"name": "ssl_session:server_select_session/5"
},
{
"name": "ssl_session:is_resumable/4"
},
{
"name": "ssl_session:reusable_options/2"
},
{
"name": "ssl_handshake:select_session/8"
}
]
}
]- Related CVEs
- CVE-2026-105236
Source reference:
/cveMetadata/cveId
Publisher severity
medium
Source reference: /containers/cna/metrics
- Event
- #34409 · Revision 1
- Added to Heist Feed
- Publisher date