CVE-2026-89422
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.
Leer descripción completaMostrar menos
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.
CVSS
- Versión: 4.0
- 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/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
- Puntuación base: 9.3
Probabilidad de explotación (EPSS)
- Probabilidad de explotación en los próximos 30 días: 0.46%
- Percentil entre todas las CVEs puntuadas: 38
- Fecha de la puntuación: 5/10/2026
EPSS (Exploit Prediction Scoring System, de FIRST) estima la probabilidad de que una vulnerabilidad sea explotada en 30 días. Complementa a CVSS (impacto) y a CISA KEV (explotación confirmada).
🎯 Técnicas ATT&CK
Cómo se explota esta vulnerabilidad y qué consigue el atacante, en el lenguaje de MITRE ATT&CK.
- Explotación
T1190Exploit Public-Facing Applicationinitial access92 % - Impacto principal
T1556Modify Authentication Processdefense impairment · persistence · credential access85 % - Impacto secundario
T1557Adversary-in-the-Middlecredential access · collection78 %
Vulnerabilidad de autenticación en TLS 1.3 (AV:N/AC:L/PR:N) permite suplantación del servidor sin validar certificado. El atacante puede interceptar y responder conexiones cliente-servidor, bypaseando verificaciones de identidad.
Inferido por nuestro agente de análisis a partir de la descripción oficial, el vector CVSS y la CWE, y comprobado por un supervisor. Puede contener errores.
🛡️ Mitigaciones ATT&CK que cubren estas técnicas
Tecnologías afectadas (2)
⚠ Inferidas por IA a partir de la descripción — NVD aún no ha analizado esta CVE; no son CPE verificados.
CWE
- CWE-322
Referencias
- https://cna.erlef.org/cves/CVE-2026-89422.html
- https://github.com/erlang/otp/commit/21b8a1b0ad0adf200682b3854bc50114ab2b8c62
- https://github.com/erlang/otp/commit/98c66c858113949c4262d26cd7d426c4b09d2b35
- https://github.com/erlang/otp/commit/afec5156361bb50d3607c7c1a453c19b9149b324
- https://github.com/erlang/otp/commit/fd1d9d07fc92ec0d59f96dfb66182195882bb7dd
- https://github.com/erlang/otp/security/advisories/GHSA-rgxr-4g4w-j875
- https://osv.dev/vulnerability/EEF-CVE-2026-89422
- https://www.erlang.org/doc/system/versions.html#order-of-versions
JSON original (NVD)
Mostrar
{
"id": "CVE-2026-89422",
"cveTags": [],
"metrics": {
"ssvcV203": [
{
"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"ssvcData": {
"id": "CVE-2026-89422",
"role": "CISA Coordinator",
"options": [
{
"exploitation": "none"
},
{
"automatable": "yes"
},
{
"technicalImpact": "total"
}
],
"version": "2.0.3",
"timestamp": "2026-09-22T13:08:04.474621Z"
}
}
],
"cvssMetricV40": [
{
"type": "Secondary",
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"cvssData": {
"Safety": "NOT_DEFINED",
"version": "4.0",
"Recovery": "NOT_DEFINED",
"baseScore": 9.3,
"Automatable": "NOT_DEFINED",
"attackVector": "NETWORK",
"baseSeverity": "CRITICAL",
"valueDensity": "NOT_DEFINED",
"vectorString": "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/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",
"exploitMaturity": "NOT_DEFINED",
"providerUrgency": "NOT_DEFINED",
"userInteraction": "NONE",
"attackComplexity": "LOW",
"attackRequirements": "NONE",
"privilegesRequired": "NONE",
"subIntegrityImpact": "NONE",
"vulnIntegrityImpact": "HIGH",
"integrityRequirement": "NOT_DEFINED",
"modifiedAttackVector": "NOT_DEFINED",
"subAvailabilityImpact": "NONE",
"vulnAvailabilityImpact": "NONE",
"availabilityRequirement": "NOT_DEFINED",
"modifiedUserInteraction": "NOT_DEFINED",
"modifiedAttackComplexity": "NOT_DEFINED",
"subConfidentialityImpact": "NONE",
"vulnConfidentialityImpact": "HIGH",
"confidentialityRequirement": "NOT_DEFINED",
"modifiedAttackRequirements": "NOT_DEFINED",
"modifiedPrivilegesRequired": "NOT_DEFINED",
"modifiedSubIntegrityImpact": "NOT_DEFINED",
"modifiedVulnIntegrityImpact": "NOT_DEFINED",
"vulnerabilityResponseEffort": "NOT_DEFINED",
"modifiedSubAvailabilityImpact": "NOT_DEFINED",
"modifiedVulnAvailabilityImpact": "NOT_DEFINED",
"modifiedSubConfidentialityImpact": "NOT_DEFINED",
"modifiedVulnConfidentialityImpact": "NOT_DEFINED"
}
}
]
},
"affected": [
{
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"affectedData": [
{
"cpes": [
"cpe:2.3:a:erlang:erlang\\/otp:*:*:*:*:*:*:*:*"
],
"vendor": "Erlang",
"modules": [
"tls_client_connection_1_3",
"tls_gen_connection_1_3",
"tls_handshake_1_3"
],
"product": "OTP",
"versions": [
{
"status": "affected",
"changes": [
{
"at": "27.3.4.18",
"status": "unaffected"
},
{
"at": "28.5.0.7",
"status": "unaffected"
},
{
"at": "29.1.1",
"status": "unaffected"
}
],
"version": "22.2",
"lessThan": "*",
"versionType": "otp"
}
],
"packageURL": "pkg:software-id/erlang.org/otp",
"packageName": "otp",
"programFiles": [
"lib/ssl/src/tls_client_connection_1_3.erl",
"lib/ssl/src/tls_gen_connection_1_3.erl",
"lib/ssl/src/tls_handshake_1_3.erl"
],
"defaultStatus": "unaffected",
"programRoutines": [
{
"name": "tls_client_connection_1_3:handle_server_hello/2"
},
{
"name": "tls_client_connection_1_3:handle_encrypted_extensions/2"
},
{
"name": "tls_client_connection_1_3:maybe_resumption/1"
},
{
"name": "tls_gen_connection_1_3:handle_resumption/2"
},
{
"name": "tls_handshake_1_3:get_pre_shared_key/4"
}
]
},
{
"cpes": [
"cpe:2.3:a:erlang:erlang\\/otp:*:*:*:*:*:*:*:*"
],
"repo": "https://github.com/erlang/otp",
"vendor": "Erlang",
"modules": [
"tls_client_connection_1_3",
"tls_gen_connection_1_3",
"tls_handshake_1_3"
],
"product": "OTP",
"versions": [
{
"status": "affected",
"changes": [
{
"at": "11.2.12.13",
"status": "unaffected"
},
{
"at": "11.6.0.6",
"status": "unaffected"
},
{
"at": "11.7.7",
"status": "unaffected"
}
],
"version": "9.5",
"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/tls_client_connection_1_3.erl",
"src/tls_gen_connection_1_3.erl",
"src/tls_handshake_1_3.erl"
],
"defaultStatus": "unaffected",
"programRoutines": [
{
"name": "tls_client_connection_1_3:handle_server_hello/2"
},
{
"name": "tls_client_connection_1_3:handle_encrypted_extensions/2"
},
{
"name": "tls_client_connection_1_3:maybe_resumption/1"
},
{
"name": "tls_gen_connection_1_3:handle_resumption/2"
},
{
"name": "tls_handshake_1_3:get_pre_shared_key/4"
}
]
},
{
"cpes": [
"cpe:2.3:a:erlang:erlang\\/otp:*:*:*:*:*:*:*:*"
],
"repo": "https://github.com/erlang/otp",
"vendor": "Erlang",
"modules": [
"tls_client_connection_1_3",
"tls_gen_connection_1_3",
"tls_handshake_1_3"
],
"product": "OTP",
"versions": [
{
"status": "affected",
"changes": [
{
"at": "afec5156361bb50d3607c7c1a453c19b9149b324",
"status": "unaffected"
},
{
"at": "98c66c858113949c4262d26cd7d426c4b09d2b35",
"status": "unaffected"
},
{
"at": "fd1d9d07fc92ec0d59f96dfb66182195882bb7dd",
"status": "unaffected"
}
],
"version": "21b8a1b0ad0adf200682b3854bc50114ab2b8c62",
"lessThan": "*",
"versionType": "git"
}
],
"packageURL": "pkg:github/erlang/otp",
"packageName": "erlang/otp",
"programFiles": [
"lib/ssl/src/tls_client_connection_1_3.erl",
"lib/ssl/src/tls_gen_connection_1_3.erl",
"lib/ssl/src/tls_handshake_1_3.erl"
],
"collectionURL": "https://github.com",
"defaultStatus": "unaffected",
"programRoutines": [
{
"name": "tls_client_connection_1_3:handle_server_hello/2"
},
{
"name": "tls_client_connection_1_3:handle_encrypted_extensions/2"
},
{
"name": "tls_client_connection_1_3:maybe_resumption/1"
},
{
"name": "tls_gen_connection_1_3:handle_resumption/2"
},
{
"name": "tls_handshake_1_3:get_pre_shared_key/4"
}
]
}
]
}
],
"published": "2026-09-22T09:17:05.540",
"references": [
{
"url": "https://cna.erlef.org/cves/CVE-2026-89422.html",
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db"
},
{
"url": "https://github.com/erlang/otp/commit/21b8a1b0ad0adf200682b3854bc50114ab2b8c62",
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db"
},
{
"url": "https://github.com/erlang/otp/commit/98c66c858113949c4262d26cd7d426c4b09d2b35",
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db"
},
{
"url": "https://github.com/erlang/otp/commit/afec5156361bb50d3607c7c1a453c19b9149b324",
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db"
},
{
"url": "https://github.com/erlang/otp/commit/fd1d9d07fc92ec0d59f96dfb66182195882bb7dd",
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db"
},
{
"url": "https://github.com/erlang/otp/security/advisories/GHSA-rgxr-4g4w-j875",
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db"
},
{
"url": "https://osv.dev/vulnerability/EEF-CVE-2026-89422",
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db"
},
{
"url": "https://www.erlang.org/doc/system/versions.html#order-of-versions",
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db"
}
],
"vulnStatus": "Deferred",
"weaknesses": [
{
"type": "Secondary",
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"description": [
{
"lang": "en",
"value": "CWE-322"
}
]
}
],
"descriptions": [
{
"lang": "en",
"value": "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.\n\ntls_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.\n\nThis 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."
}
],
"lastModified": "2026-09-22T19:09:32.273",
"sourceIdentifier": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db"
}