CVE-2026-42790 (GCVE-0-2026-42790)
Vulnerability from cvelistv5 – Published: 2026-05-27 15:09 – Updated: 2026-11-11 19:13| URL | Tags |
|---|---|
| https://github.com/erlang/otp/security/advisories… | vendor-advisoryrelated |
| https://cna.erlef.org/cves/CVE-2026-42790.html | related |
| https://osv.dev/vulnerability/EEF-CVE-2026-42790 | related |
| https://www.erlang.org/doc/system/versions.html#o… | x_version-scheme |
| https://github.com/erlang/otp/commit/b0c245e8132b… | related |
| https://github.com/erlang/otp/commit/0769050c69d7… | patch |
| https://github.com/erlang/otp/commit/fb67c6d1836f… | patch |
| https://github.com/erlang/otp/commit/21abed64eb20… | patch |
| https://access.redhat.com/security/cve/CVE-2026-42790 | vdb-entryx_refsource_REDHAT |
| https://bugzilla.redhat.com/show_bug.cgi?id=2482286 | issue-trackingx_refsource_REDHAT |
| https://security.access.redhat.com/data/csaf/v2/v… | x_sadp-csaf-vex |
| https://access.redhat.com/errata/RHSA-2026:54757 | vendor-advisoryx_refsource_REDHAT |
| https://access.redhat.com/errata/RHSA-2026:39809 | vendor-advisoryx_refsource_REDHAT |
| Vendor | Product | Version | CPE status | |
|---|---|---|---|---|
| Erlang | OTP |
Affected:
19.3 , < *
(otp)
cpe:2.3:a:erlang:erlang\/otp:*:*:*:*:*:*:*:* |
||
| Erlang | OTP |
Affected:
1.4 , < *
(otp)
cpe:2.3:a:erlang:erlang\/otp:*:*:*:*:*:*:*:* |
||
| Erlang | OTP |
Affected:
b0c245e8132bb13171e277b1af59c0cec00c9459 , < *
(git)
cpe:2.3:a:erlang:erlang\/otp:*:*:*:*:*:*:*:* |
||
| Red Hat | Red Hat OpenStack Platform 16.2 |
Unaffected:
0:23.3.4.18-2.el8ost , < *
(rpm)
cpe:/a:redhat:openstack:16.2::el8 |
||
| Red Hat | Red Hat OpenStack Services on OpenShift 18.0 |
Unaffected:
0:26.2.5.21-2.el9ost , < *
(rpm)
cpe:/a:redhat:openstack:18.0::el9 |
||
| Red Hat | Red Hat Hardened Images |
cpe:/a:redhat:hummingbird:1
|
||
| Red Hat | Red Hat OpenStack Platform 17.1 |
cpe:/a:redhat:openstack:17.1
|
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-42790",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "total"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-05-27T00:00:00+00:00",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-05-28T03:55:49.233Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
},
{
"affected": [
{
"collectionURL": "https://access.redhat.com/downloads/content/package-browser/",
"cpes": [
"cpe:/a:redhat:openstack:16.2::el8"
],
"defaultStatus": "affected",
"packageName": "erlang",
"product": "Red Hat OpenStack Platform 16.2",
"vendor": "Red Hat",
"versions": [
{
"lessThan": "*",
"status": "unaffected",
"version": "0:23.3.4.18-2.el8ost",
"versionType": "rpm"
}
]
},
{
"collectionURL": "https://access.redhat.com/downloads/content/package-browser/",
"cpes": [
"cpe:/a:redhat:openstack:18.0::el9"
],
"defaultStatus": "affected",
"packageName": "erlang",
"product": "Red Hat OpenStack Services on OpenShift 18.0",
"vendor": "Red Hat",
"versions": [
{
"lessThan": "*",
"status": "unaffected",
"version": "0:26.2.5.21-2.el9ost",
"versionType": "rpm"
}
]
},
{
"collectionURL": "https://access.redhat.com/downloads/content/package-browser/",
"cpes": [
"cpe:/a:redhat:hummingbird:1"
],
"defaultStatus": "affected",
"packageName": "erlang27",
"product": "Red Hat Hardened Images",
"vendor": "Red Hat"
},
{
"collectionURL": "https://access.redhat.com/downloads/content/package-browser/",
"cpes": [
"cpe:/a:redhat:openstack:17.1"
],
"defaultStatus": "affected",
"packageName": "erlang",
"product": "Red Hat OpenStack Platform 17.1",
"vendor": "Red Hat"
}
],
"datePublic": "2026-05-27T15:09:01.860Z",
"descriptions": [
{
"lang": "en",
"value": "A flaw was found in Erlang OTP public_key. This improper certificate validation vulnerability allows a subordinate Certificate Authority (CA) with restricted DNS nameConstraints to bypass these restrictions. By issuing a leaf certificate that lacks a Subject Alternative Name (SAN) but contains a crafted CommonName (CN), an attacker can trick an Erlang OTP TLS client into accepting it as valid for an out-of-scope hostname. This can lead to hostname spoofing and potential man-in-the-middle attacks, compromising the integrity and confidentiality of communications."
}
],
"metrics": [
{
"other": {
"content": {
"namespace": "https://access.redhat.com/security/updates/classification/",
"value": "Important"
},
"type": "Red Hat severity rating"
}
},
{
"cvssV3_1": {
"attackComplexity": "HIGH",
"attackVector": "NETWORK",
"availabilityImpact": "NONE",
"baseScore": 7.4,
"baseSeverity": "HIGH",
"confidentialityImpact": "HIGH",
"integrityImpact": "HIGH",
"privilegesRequired": "NONE",
"scope": "UNCHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N",
"version": "3.1"
},
"format": "CVSS"
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-295",
"description": "Improper Certificate Validation",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-09-18T12:04:51.323Z",
"orgId": "0b0ca135-0b70-47e7-9f44-1890c2a1c46c",
"shortName": "redhat-SADP"
},
"references": [
{
"tags": [
"vdb-entry",
"x_refsource_REDHAT"
],
"url": "https://access.redhat.com/security/cve/CVE-2026-42790"
},
{
"name": "RHBZ#2482286",
"tags": [
"issue-tracking",
"x_refsource_REDHAT"
],
"url": "https://bugzilla.redhat.com/show_bug.cgi?id=2482286"
},
{
"tags": [
"x_sadp-csaf-vex"
],
"url": "https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-42790.json"
},
{
"tags": [
"vendor-advisory",
"x_refsource_REDHAT"
],
"url": "https://access.redhat.com/errata/RHSA-2026:54757"
},
{
"tags": [
"vendor-advisory",
"x_refsource_REDHAT"
],
"url": "https://access.redhat.com/errata/RHSA-2026:39809"
}
],
"solutions": [
{
"lang": "en",
"value": "RHSA-2026:54757: Red Hat OpenStack Platform 16.2"
},
{
"lang": "en",
"value": "RHSA-2026:39809: Red Hat OpenStack Services on OpenShift 18.0"
}
],
"timeline": [
{
"lang": "en",
"time": "2026-05-27T17:02:53.354Z",
"value": "Reported to Red Hat."
},
{
"lang": "en",
"time": "2026-05-27T15:09:01.860Z",
"value": "Made public."
}
],
"title": "erlang: Erlang OTP public_key: Certificate validation bypass allows hostname spoofing",
"workarounds": [
{
"lang": "en",
"value": "Ensure all TLS certificates used in the deployment include Subject Alternative Name (SAN) extensions with the appropriate DNS entries. Certificates relying solely on the CommonName (CN) field for hostname identification are susceptible to this bypass. For Erlang applications, the verify_fun option in the ssl module can be configured to reject peer certificates missing the subjectAltName extension."
}
],
"x_adpType": "supplier",
"x_generator": {
"engine": "sadp-cli 1.0.0"
}
}
],
"cna": {
"affected": [
{
"cpes": [
"cpe:2.3:a:erlang:erlang\\/otp:*:*:*:*:*:*:*:*"
],
"defaultStatus": "unaffected",
"modules": [
"pubkey_cert",
"public_key"
],
"packageName": "otp",
"packageURL": "pkg:software-id/erlang.org/otp",
"product": "OTP",
"programFiles": [
"lib/public_key/src/pubkey_cert.erl",
"lib/public_key/src/public_key.erl"
],
"programRoutines": [
{
"name": "pubkey_cert:validate_names/6"
},
{
"name": "public_key:pkix_verify_hostname/3"
}
],
"vendor": "Erlang",
"versions": [
{
"changes": [
{
"at": "26.2.5.21",
"status": "unaffected"
},
{
"at": "27.3.4.12",
"status": "unaffected"
},
{
"at": "28.5.0.1",
"status": "unaffected"
},
{
"at": "29.0.1",
"status": "unaffected"
}
],
"lessThan": "*",
"status": "affected",
"version": "19.3",
"versionType": "otp"
}
]
},
{
"cpes": [
"cpe:2.3:a:erlang:erlang\\/otp:*:*:*:*:*:*:*:*"
],
"defaultStatus": "unaffected",
"modules": [
"pubkey_cert",
"public_key"
],
"packageName": "public_key",
"packageURL": "pkg:otp/public_key?repository_url=https:%2F%2Fgithub.com%2Ferlang%2Fotp\u0026vcs_url=git%2Bhttps:%2F%2Fgithub.com%2Ferlang%2Fotp.git",
"product": "OTP",
"programFiles": [
"src/pubkey_cert.erl",
"src/public_key.erl"
],
"programRoutines": [
{
"name": "pubkey_cert:validate_names/6"
},
{
"name": "public_key:pkix_verify_hostname/3"
}
],
"repo": "https://github.com/erlang/otp",
"vendor": "Erlang",
"versions": [
{
"changes": [
{
"at": "1.15.1.7",
"status": "unaffected"
},
{
"at": "1.17.1.3",
"status": "unaffected"
},
{
"at": "1.20.3.1",
"status": "unaffected"
},
{
"at": "1.21.1",
"status": "unaffected"
}
],
"lessThan": "*",
"status": "affected",
"version": "1.4",
"versionType": "otp"
}
]
},
{
"collectionURL": "https://github.com",
"cpes": [
"cpe:2.3:a:erlang:erlang\\/otp:*:*:*:*:*:*:*:*"
],
"defaultStatus": "unaffected",
"modules": [
"pubkey_cert",
"public_key"
],
"packageName": "erlang/otp",
"packageURL": "pkg:github/erlang/otp",
"product": "OTP",
"programFiles": [
"lib/public_key/src/pubkey_cert.erl",
"lib/public_key/src/public_key.erl"
],
"programRoutines": [
{
"name": "pubkey_cert:validate_names/6"
},
{
"name": "public_key:pkix_verify_hostname/3"
}
],
"repo": "https://github.com/erlang/otp",
"vendor": "Erlang",
"versions": [
{
"changes": [
{
"at": "0769050c69d73762672b0db1347b6993a5b31759",
"status": "unaffected"
},
{
"at": "fb67c6d1836f51105a96d8b769e71e4215a79457",
"status": "unaffected"
},
{
"at": "21abed64eb2026b5f82f432709e4e932f9be389a",
"status": "unaffected"
}
],
"lessThan": "*",
"status": "affected",
"version": "b0c245e8132bb13171e277b1af59c0cec00c9459",
"versionType": "git"
}
]
}
],
"cpeApplicability": [
{
"nodes": [
{
"cpeMatch": [
{
"criteria": "cpe:2.3:a:erlang:erlang\\/otp:*:*:*:*:*:*:*:*",
"versionEndExcluding": "26.2.5.21",
"versionStartIncluding": "19.3",
"vulnerable": true
},
{
"criteria": "cpe:2.3:a:erlang:erlang\\/otp:*:*:*:*:*:*:*:*",
"versionEndExcluding": "27.3.4.12",
"versionStartIncluding": "27.0",
"vulnerable": true
},
{
"criteria": "cpe:2.3:a:erlang:erlang\\/otp:*:*:*:*:*:*:*:*",
"versionEndExcluding": "28.5.0.1",
"versionStartIncluding": "28.0",
"vulnerable": true
},
{
"criteria": "cpe:2.3:a:erlang:erlang\\/otp:*:*:*:*:*:*:*:*",
"versionEndExcluding": "29.0.1",
"versionStartIncluding": "29.0",
"vulnerable": true
}
],
"negate": false,
"operator": "OR"
}
],
"operator": "AND"
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "John Downey"
},
{
"lang": "en",
"type": "remediation developer",
"value": "Ingela Anderton Andin"
},
{
"lang": "en",
"type": "remediation reviewer",
"value": "Dan Gudmundsson"
},
{
"lang": "en",
"type": "remediation reviewer",
"value": "Jakub Witczak"
}
],
"datePublic": "2026-05-27T15:09:01.000Z",
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eImproper Certificate Validation vulnerability in Erlang OTP \u003ccode\u003epublic_key\u003c/code\u003e (\u003ccode\u003epubkey_cert\u003c/code\u003e and \u003ccode\u003epublic_key\u003c/code\u003e modules) allows a DNS \u003ccode\u003enameConstraints\u003c/code\u003e bypass via subject CommonName fallback in TLS hostname verification.\u003c/p\u003e\n\u003cp\u003eTwo flaws combine to allow a subordinate CA whose DNS \u003ccode\u003enameConstraints\u003c/code\u003e are restricted (e.g. \u003ccode\u003epermitted;DNS:allowed.example.com\u003c/code\u003e) to issue a leaf certificate that an OTP TLS client accepts as a valid identity for an out-of-scope hostname (e.g. \u003ccode\u003evictim.example.com\u003c/code\u003e):\u003c/p\u003e\n\u003cp\u003eFirst, \u003ccode\u003epubkey_cert:validate_names/6\u003c/code\u003e in \u003ccode\u003elib/public_key/src/pubkey_cert.erl\u003c/code\u003e only checks SAN DNS entries against \u003ccode\u003enameConstraints\u003c/code\u003e. Per RFC 5280, a permitted DNS subtree only restricts certificates that contain a DNS-typed name. A leaf with no \u003ccode\u003esubjectAltName\u003c/code\u003e therefore trivially satisfies any \u003ccode\u003epermitted;DNS:...\u003c/code\u003e constraint regardless of its subject \u003ccode\u003ecommonName\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eSecond, \u003ccode\u003epublic_key:pkix_verify_hostname/3\u003c/code\u003e in \u003ccode\u003elib/public_key/src/public_key.erl\u003c/code\u003e falls back to the subject \u003ccode\u003ecommonName\u003c/code\u003e when no \u003ccode\u003esubjectAltName\u003c/code\u003e is present, extracting \u003ccode\u003eid-at-commonName\u003c/code\u003e attributes as presented IDs and matching them against the reference hostname. The strict \u003ccode\u003epkix_verify_hostname_match_fun(https)\u003c/code\u003e matcher does not suppress this fallback.\u003c/p\u003e\n\u003cp\u003eThe result is that path validation accepts a CN-only leaf under a DNS-constrained intermediate (no SAN means the \u003ccode\u003enameConstraints\u003c/code\u003e are not triggered), and hostname verification then accepts it via the CN fallback. The bypass is reachable from stock \u003ccode\u003essl:connect\u003c/code\u003e with \u003ccode\u003everify_peer\u003c/code\u003e, a trusted CA, SNI, and the canonical strict \u003ccode\u003ehttps\u003c/code\u003e hostname matcher.\u003c/p\u003e\n\u003cp\u003eThis issue affects OTP from OTP\u0026nbsp;19.3 before OTP\u0026nbsp;26.2.5.21, OTP\u0026nbsp;27.3.4.12, OTP\u0026nbsp;28.5.0.1, and OTP\u0026nbsp;29.0.1, corresponding to public_key from 1.4 before 1.15.1.7, 1.17.1.3, 1.20.3.1, and 1.21.1.\u003c/p\u003e"
},
{
"base64": false,
"type": "text/markdown",
"value": "Improper Certificate Validation vulnerability in Erlang OTP `public_key` (`pubkey_cert` and `public_key` modules) allows a DNS `nameConstraints` bypass via subject CommonName fallback in TLS hostname verification.\n\nTwo flaws combine to allow a subordinate CA whose DNS `nameConstraints` are restricted (e.g. `permitted;DNS:allowed.example.com`) to issue a leaf certificate that an OTP TLS client accepts as a valid identity for an out-of-scope hostname (e.g. `victim.example.com`):\n\nFirst, `pubkey_cert:validate_names/6` in `lib/public_key/src/pubkey_cert.erl` only checks SAN DNS entries against `nameConstraints`. Per RFC 5280, a permitted DNS subtree only restricts certificates that contain a DNS-typed name. A leaf with no `subjectAltName` therefore trivially satisfies any `permitted;DNS:...` constraint regardless of its subject `commonName`.\n\nSecond, `public_key:pkix_verify_hostname/3` in `lib/public_key/src/public_key.erl` falls back to the subject `commonName` when no `subjectAltName` is present, extracting `id-at-commonName` attributes as presented IDs and matching them against the reference hostname. The strict `pkix_verify_hostname_match_fun(https)` matcher does not suppress this fallback.\n\nThe result is that path validation accepts a CN-only leaf under a DNS-constrained intermediate (no SAN means the `nameConstraints` are not triggered), and hostname verification then accepts it via the CN fallback. The bypass is reachable from stock `ssl:connect` with `verify_peer`, a trusted CA, SNI, and the canonical strict `https` hostname matcher.\n\nThis issue affects OTP from OTP\u00a019.3 before OTP\u00a026.2.5.21, OTP\u00a027.3.4.12, OTP\u00a028.5.0.1, and OTP\u00a029.0.1, corresponding to public_key from 1.4 before 1.15.1.7, 1.17.1.3, 1.20.3.1, and 1.21.1."
}
],
"value": "Improper Certificate Validation vulnerability in Erlang OTP public_key (pubkey_cert and public_key modules) allows a DNS nameConstraints bypass via subject CommonName fallback in TLS hostname verification.\n\nTwo flaws combine to allow a subordinate CA whose DNS nameConstraints are restricted (e.g. permitted;DNS:allowed.example.com) to issue a leaf certificate that an OTP TLS client accepts as a valid identity for an out-of-scope hostname (e.g. victim.example.com):\n\nFirst, pubkey_cert:validate_names/6 in lib/public_key/src/pubkey_cert.erl only checks SAN DNS entries against nameConstraints. Per RFC 5280, a permitted DNS subtree only restricts certificates that contain a DNS-typed name. A leaf with no subjectAltName therefore trivially satisfies any permitted;DNS:... constraint regardless of its subject commonName.\n\nSecond, public_key:pkix_verify_hostname/3 in lib/public_key/src/public_key.erl falls back to the subject commonName when no subjectAltName is present, extracting id-at-commonName attributes as presented IDs and matching them against the reference hostname. The strict pkix_verify_hostname_match_fun(https) matcher does not suppress this fallback.\n\nThe result is that path validation accepts a CN-only leaf under a DNS-constrained intermediate (no SAN means the nameConstraints are not triggered), and hostname verification then accepts it via the CN fallback. The bypass is reachable from stock ssl:connect with verify_peer, a trusted CA, SNI, and the canonical strict https hostname matcher.\n\nThis issue affects OTP from OTP\u00a019.3 before OTP\u00a026.2.5.21, OTP\u00a027.3.4.12, OTP\u00a028.5.0.1, and OTP\u00a029.0.1, corresponding to public_key from 1.4 before 1.15.1.7, 1.17.1.3, 1.20.3.1, and 1.21.1."
}
],
"impacts": [
{
"capecId": "CAPEC-475",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-475 Signature Spoofing by Improper Validation"
}
]
}
],
"metrics": [
{
"cvssV4_0": {
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"attackComplexity": "HIGH",
"attackRequirements": "PRESENT",
"attackVector": "NETWORK",
"baseScore": 7.6,
"baseSeverity": "HIGH",
"privilegesRequired": "NONE",
"providerUrgency": "NOT_DEFINED",
"subAvailabilityImpact": "NONE",
"subConfidentialityImpact": "NONE",
"subIntegrityImpact": "NONE",
"userInteraction": "PASSIVE",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:P/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N",
"version": "4.0",
"vulnAvailabilityImpact": "NONE",
"vulnConfidentialityImpact": "HIGH",
"vulnIntegrityImpact": "HIGH",
"vulnerabilityResponseEffort": "NOT_DEFINED"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-295",
"description": "CWE-295 Improper Certificate Validation",
"lang": "en",
"type": "CWE"
}
]
},
{
"descriptions": [
{
"cweId": "CWE-297",
"description": "CWE-297 Improper Validation of Certificate with Host Mismatch",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-11-11T19:13:56.207Z",
"orgId": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"shortName": "EEF"
},
"references": [
{
"name": "Name Constraints and Subject CommonName Fallback in TLS hostname Verification",
"tags": [
"vendor-advisory",
"related"
],
"url": "https://github.com/erlang/otp/security/advisories/GHSA-22cw-4ph4-6447"
},
{
"name": "EEF CNA record for CVE-2026-42790",
"tags": [
"related"
],
"url": "https://cna.erlef.org/cves/CVE-2026-42790.html"
},
{
"name": "OSV record EEF-CVE-2026-42790",
"tags": [
"related"
],
"url": "https://osv.dev/vulnerability/EEF-CVE-2026-42790"
},
{
"name": "Erlang/OTP version ordering",
"tags": [
"x_version-scheme"
],
"url": "https://www.erlang.org/doc/system/versions.html#order-of-versions"
},
{
"name": "Introducing commit b0c245e in erlang/otp",
"tags": [
"related"
],
"url": "https://github.com/erlang/otp/commit/b0c245e8132bb13171e277b1af59c0cec00c9459"
},
{
"name": "Fix commit 0769050 in erlang/otp",
"tags": [
"patch"
],
"url": "https://github.com/erlang/otp/commit/0769050c69d73762672b0db1347b6993a5b31759"
},
{
"name": "Fix commit fb67c6d in erlang/otp",
"tags": [
"patch"
],
"url": "https://github.com/erlang/otp/commit/fb67c6d1836f51105a96d8b769e71e4215a79457"
},
{
"name": "Fix commit 21abed6 in erlang/otp",
"tags": [
"patch"
],
"url": "https://github.com/erlang/otp/commit/21abed64eb2026b5f82f432709e4e932f9be389a"
}
],
"source": {
"discovery": "EXTERNAL"
},
"title": "nameConstraints DNS bypass via subject CommonName fallback in public_key hostname verification",
"workarounds": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eThe \u003ccode\u003everify_fun\u003c/code\u003e option in the \u003ccode\u003essl\u003c/code\u003e application can be used to ensure that TLS connections fail if the end-entity certificate is missing the \u003ccode\u003esubjectAltName\u003c/code\u003e extension or has no domain name. Do not use a \u003ccode\u003everify_fun\u003c/code\u003e that accepts the \u003ccode\u003ename_not_permitted\u003c/code\u003e error.\u003c/p\u003e"
},
{
"base64": false,
"type": "text/markdown",
"value": "The `verify_fun` option in the `ssl` application can be used to ensure that TLS connections fail if the end-entity certificate is missing the `subjectAltName` extension or has no domain name. Do not use a `verify_fun` that accepts the `name_not_permitted` error."
}
],
"value": "The verify_fun option in the ssl application can be used to ensure that TLS connections fail if the end-entity certificate is missing the subjectAltName extension or has no domain name. Do not use a verify_fun that accepts the name_not_permitted error."
}
]
}
},
"cveMetadata": {
"assignerOrgId": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"assignerShortName": "EEF",
"cveId": "CVE-2026-42790",
"datePublished": "2026-05-27T15:09:01.860Z",
"dateReserved": "2026-04-29T18:06:33.251Z",
"dateUpdated": "2026-11-11T19:13:56.207Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2",
"vulnerability-lookup:meta": {
"epss": {
"cve": "CVE-2026-42790",
"date": "2026-11-13",
"epss": "0.00359",
"percentile": "0.30068"
},
"microsoft_vex": {
"current_release_date": "2026-06-09T01:44:21.000Z",
"cve": "CVE-2026-42790",
"id": "msrc_CVE-2026-42790",
"initial_release_date": "2026-05-02T00:00:00.000Z",
"product_status:fixed": "1",
"product_status:known_affected": "1",
"source": "Microsoft CSAF VEX",
"status": "final",
"title": "nameConstraints DNS bypass via subject CommonName fallback in public_key hostname verification",
"url": "https://msrc.microsoft.com/csaf/vex/2026/msrc_cve-2026-42790.json",
"version": "3"
},
"nvd": {
"cve": {
"affected": [
{
"affectedData": [
{
"cpes": [
"cpe:2.3:a:erlang:erlang\\/otp:*:*:*:*:*:*:*:*"
],
"defaultStatus": "unaffected",
"modules": [
"pubkey_cert",
"public_key"
],
"packageName": "otp",
"packageURL": "pkg:software-id/erlang.org/otp",
"product": "OTP",
"programFiles": [
"lib/public_key/src/pubkey_cert.erl",
"lib/public_key/src/public_key.erl"
],
"programRoutines": [
{
"name": "pubkey_cert:validate_names/6"
},
{
"name": "public_key:pkix_verify_hostname/3"
}
],
"vendor": "Erlang",
"versions": [
{
"changes": [
{
"at": "26.2.5.21",
"status": "unaffected"
},
{
"at": "27.3.4.12",
"status": "unaffected"
},
{
"at": "28.5.0.1",
"status": "unaffected"
},
{
"at": "29.0.1",
"status": "unaffected"
}
],
"lessThan": "*",
"status": "affected",
"version": "19.3",
"versionType": "otp"
}
]
},
{
"cpes": [
"cpe:2.3:a:erlang:erlang\\/otp:*:*:*:*:*:*:*:*"
],
"defaultStatus": "unaffected",
"modules": [
"pubkey_cert",
"public_key"
],
"packageName": "public_key",
"packageURL": "pkg:otp/public_key?repository_url=https:%2F%2Fgithub.com%2Ferlang%2Fotp\u0026vcs_url=git%2Bhttps:%2F%2Fgithub.com%2Ferlang%2Fotp.git",
"product": "OTP",
"programFiles": [
"src/pubkey_cert.erl",
"src/public_key.erl"
],
"programRoutines": [
{
"name": "pubkey_cert:validate_names/6"
},
{
"name": "public_key:pkix_verify_hostname/3"
}
],
"repo": "https://github.com/erlang/otp",
"vendor": "Erlang",
"versions": [
{
"changes": [
{
"at": "1.15.1.7",
"status": "unaffected"
},
{
"at": "1.17.1.3",
"status": "unaffected"
},
{
"at": "1.20.3.1",
"status": "unaffected"
},
{
"at": "1.21.1",
"status": "unaffected"
}
],
"lessThan": "*",
"status": "affected",
"version": "1.4",
"versionType": "otp"
}
]
},
{
"collectionURL": "https://github.com",
"cpes": [
"cpe:2.3:a:erlang:erlang\\/otp:*:*:*:*:*:*:*:*"
],
"defaultStatus": "unaffected",
"modules": [
"pubkey_cert",
"public_key"
],
"packageName": "erlang/otp",
"packageURL": "pkg:github/erlang/otp",
"product": "OTP",
"programFiles": [
"lib/public_key/src/pubkey_cert.erl",
"lib/public_key/src/public_key.erl"
],
"programRoutines": [
{
"name": "pubkey_cert:validate_names/6"
},
{
"name": "public_key:pkix_verify_hostname/3"
}
],
"repo": "https://github.com/erlang/otp",
"vendor": "Erlang",
"versions": [
{
"changes": [
{
"at": "0769050c69d73762672b0db1347b6993a5b31759",
"status": "unaffected"
},
{
"at": "fb67c6d1836f51105a96d8b769e71e4215a79457",
"status": "unaffected"
},
{
"at": "21abed64eb2026b5f82f432709e4e932f9be389a",
"status": "unaffected"
}
],
"lessThan": "*",
"status": "affected",
"version": "b0c245e8132bb13171e277b1af59c0cec00c9459",
"versionType": "git"
}
]
}
],
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db"
},
{
"affectedData": [
{
"collectionURL": "https://access.redhat.com/downloads/content/package-browser/",
"cpes": [
"cpe:/a:redhat:openstack:16.2::el8"
],
"defaultStatus": "affected",
"packageName": "erlang",
"product": "Red Hat OpenStack Platform 16.2",
"vendor": "Red Hat",
"versions": [
{
"lessThan": "*",
"status": "unaffected",
"version": "0:23.3.4.18-2.el8ost",
"versionType": "rpm"
}
]
},
{
"collectionURL": "https://access.redhat.com/downloads/content/package-browser/",
"cpes": [
"cpe:/a:redhat:openstack:18.0::el9"
],
"defaultStatus": "affected",
"packageName": "erlang",
"product": "Red Hat OpenStack Services on OpenShift 18.0",
"vendor": "Red Hat",
"versions": [
{
"lessThan": "*",
"status": "unaffected",
"version": "0:26.2.5.21-2.el9ost",
"versionType": "rpm"
}
]
},
{
"collectionURL": "https://access.redhat.com/downloads/content/package-browser/",
"cpes": [
"cpe:/a:redhat:hummingbird:1"
],
"defaultStatus": "affected",
"packageName": "erlang27",
"product": "Red Hat Hardened Images",
"vendor": "Red Hat"
},
{
"collectionURL": "https://access.redhat.com/downloads/content/package-browser/",
"cpes": [
"cpe:/a:redhat:openstack:17.1"
],
"defaultStatus": "affected",
"packageName": "erlang",
"product": "Red Hat OpenStack Platform 17.1",
"vendor": "Red Hat"
}
],
"source": "0b0ca135-0b70-47e7-9f44-1890c2a1c46c"
}
],
"configurations": [
{
"nodes": [
{
"cpeMatch": [
{
"criteria": "cpe:2.3:a:erlang:erlang\\/otp:*:*:*:*:*:*:*:*",
"matchCriteriaId": "245CC08C-EB1F-4230-8F4B-98CFFB623EB2",
"versionEndExcluding": "26.2.5.21",
"versionStartIncluding": "19.3",
"vulnerable": true
},
{
"criteria": "cpe:2.3:a:erlang:erlang\\/otp:*:*:*:*:*:*:*:*",
"matchCriteriaId": "91269F6D-B8A3-41F2-871C-79EBB9460BE8",
"versionEndExcluding": "27.3.4.12",
"versionStartIncluding": "27.0",
"vulnerable": true
},
{
"criteria": "cpe:2.3:a:erlang:erlang\\/otp:*:*:*:*:*:*:*:*",
"matchCriteriaId": "844A3F01-AF3C-4C48-81DB-932B803D22C4",
"versionEndExcluding": "28.5.0.1",
"versionStartIncluding": "28.0",
"vulnerable": true
},
{
"criteria": "cpe:2.3:a:erlang:erlang\\/otp:*:*:*:*:*:*:*:*",
"matchCriteriaId": "46976598-817C-4E93-AC4B-46434746C25F",
"versionEndExcluding": "29.0.1",
"versionStartIncluding": "29.0",
"vulnerable": true
}
],
"negate": false,
"operator": "OR"
}
]
}
],
"cveTags": [],
"descriptions": [
{
"lang": "en",
"value": "Improper Certificate Validation vulnerability in Erlang OTP public_key (pubkey_cert and public_key modules) allows a DNS nameConstraints bypass via subject CommonName fallback in TLS hostname verification.\n\nTwo flaws combine to allow a subordinate CA whose DNS nameConstraints are restricted (e.g. permitted;DNS:allowed.example.com) to issue a leaf certificate that an OTP TLS client accepts as a valid identity for an out-of-scope hostname (e.g. victim.example.com):\n\nFirst, pubkey_cert:validate_names/6 in lib/public_key/src/pubkey_cert.erl only checks SAN DNS entries against nameConstraints. Per RFC 5280, a permitted DNS subtree only restricts certificates that contain a DNS-typed name. A leaf with no subjectAltName therefore trivially satisfies any permitted;DNS:... constraint regardless of its subject commonName.\n\nSecond, public_key:pkix_verify_hostname/3 in lib/public_key/src/public_key.erl falls back to the subject commonName when no subjectAltName is present, extracting id-at-commonName attributes as presented IDs and matching them against the reference hostname. The strict pkix_verify_hostname_match_fun(https) matcher does not suppress this fallback.\n\nThe result is that path validation accepts a CN-only leaf under a DNS-constrained intermediate (no SAN means the nameConstraints are not triggered), and hostname verification then accepts it via the CN fallback. The bypass is reachable from stock ssl:connect with verify_peer, a trusted CA, SNI, and the canonical strict https hostname matcher.\n\nThis issue affects OTP from OTP\u00a019.3 before OTP\u00a026.2.5.21, OTP\u00a027.3.4.12, OTP\u00a028.5.0.1, and OTP\u00a029.0.1, corresponding to public_key from 1.4 before 1.15.1.7, 1.17.1.3, 1.20.3.1, and 1.21.1."
},
{
"lang": "es",
"value": "Vulnerabilidad de validaci\u00f3n de certificado incorrecta en Erlang OTP public_key (m\u00f3dulos pubkey_cert y public_key) permite una omisi\u00f3n de nameConstraints de DNS a trav\u00e9s de la reserva de CommonName del sujeto en la verificaci\u00f3n de nombre de host TLS.\n\nDos fallos se combinan para permitir que una CA subordinada cuyas nameConstraints de DNS est\u00e1n restringidas (p. ej., permitted;DNS:allowed.example.com) emita un certificado hoja que un cliente TLS de OTP acepta como una identidad v\u00e1lida para un nombre de host fuera de alcance (p. ej., victim.example.com):\n\nPrimero, pubkey_cert:validate_names/6 en lib/public_key/src/pubkey_cert.erl solo verifica las entradas DNS de SAN contra las nameConstraints. Seg\u00fan RFC 5280, un sub\u00e1rbol DNS permitido solo restringe los certificados que contienen un nombre de tipo DNS. Una hoja sin subjectAltName, por lo tanto, satisface trivialmente cualquier restricci\u00f3n permitted;DNS:... independientemente de su commonName de sujeto.\n\nSegundo, public_key:pkix_verify_hostname/3 en lib/public_key/src/public_key.erl recurre al commonName del sujeto cuando no hay subjectAltName presente, extrayendo atributos id-at-commonName como IDs presentados y compar\u00e1ndolos con el nombre de host de referencia. El comparador estricto pkix_verify_hostname_match_fun(HTTPS) no suprime esta reserva.\n\nEl resultado es que la validaci\u00f3n de ruta acepta una hoja solo con CN bajo un intermedio restringido por DNS (sin SAN significa que las nameConstraints no se activan), y la verificaci\u00f3n de nombre de host luego lo acepta a trav\u00e9s de la reserva de CN. La omisi\u00f3n es alcanzable desde ssl:connect est\u00e1ndar con verify_peer, una CA de confianza, SNI y el comparador can\u00f3nico estricto de nombre de host HTTPS.\n\nEste problema afecta a OTP desde OTP 19.3 antes de OTP 26.2.5.21, 27.3.4.12, 28.5.0.1 y 29.0.1 correspondiente a public_key desde 1.4 antes de 1.15.1.7, 1.17.1.3, 1.20.3.1 y 1.21.1."
}
],
"id": "CVE-2026-42790",
"lastModified": "2026-11-11T19:17:39.830",
"metrics": {
"cvssMetricV31": [
{
"cvssData": {
"attackComplexity": "LOW",
"attackVector": "NETWORK",
"availabilityImpact": "NONE",
"baseScore": 8.1,
"baseSeverity": "HIGH",
"confidentialityImpact": "HIGH",
"integrityImpact": "HIGH",
"privilegesRequired": "NONE",
"scope": "UNCHANGED",
"userInteraction": "REQUIRED",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:N",
"version": "3.1"
},
"exploitabilityScore": 2.8,
"impactScore": 5.2,
"source": "nvd@nist.gov",
"type": "Primary"
},
{
"cvssData": {
"attackComplexity": "HIGH",
"attackVector": "NETWORK",
"availabilityImpact": "NONE",
"baseScore": 7.4,
"baseSeverity": "HIGH",
"confidentialityImpact": "HIGH",
"integrityImpact": "HIGH",
"privilegesRequired": "NONE",
"scope": "UNCHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N",
"version": "3.1"
},
"exploitabilityScore": 2.2,
"impactScore": 5.2,
"source": "0b0ca135-0b70-47e7-9f44-1890c2a1c46c",
"type": "Secondary"
}
],
"cvssMetricV40": [
{
"cvssData": {
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"attackComplexity": "HIGH",
"attackRequirements": "PRESENT",
"attackVector": "NETWORK",
"availabilityRequirement": "NOT_DEFINED",
"baseScore": 7.6,
"baseSeverity": "HIGH",
"confidentialityRequirement": "NOT_DEFINED",
"exploitMaturity": "NOT_DEFINED",
"integrityRequirement": "NOT_DEFINED",
"modifiedAttackComplexity": "NOT_DEFINED",
"modifiedAttackRequirements": "NOT_DEFINED",
"modifiedAttackVector": "NOT_DEFINED",
"modifiedPrivilegesRequired": "NOT_DEFINED",
"modifiedSubAvailabilityImpact": "NOT_DEFINED",
"modifiedSubConfidentialityImpact": "NOT_DEFINED",
"modifiedSubIntegrityImpact": "NOT_DEFINED",
"modifiedUserInteraction": "NOT_DEFINED",
"modifiedVulnAvailabilityImpact": "NOT_DEFINED",
"modifiedVulnConfidentialityImpact": "NOT_DEFINED",
"modifiedVulnIntegrityImpact": "NOT_DEFINED",
"privilegesRequired": "NONE",
"providerUrgency": "NOT_DEFINED",
"subAvailabilityImpact": "NONE",
"subConfidentialityImpact": "NONE",
"subIntegrityImpact": "NONE",
"userInteraction": "PASSIVE",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:P/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",
"version": "4.0",
"vulnAvailabilityImpact": "NONE",
"vulnConfidentialityImpact": "HIGH",
"vulnIntegrityImpact": "HIGH",
"vulnerabilityResponseEffort": "NOT_DEFINED"
},
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"type": "Secondary"
}
],
"ssvcV203": [
{
"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"ssvcData": {
"id": "CVE-2026-42790",
"options": [
{
"exploitation": "none"
},
{
"automatable": "no"
},
{
"technicalImpact": "total"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-05-27T00:00:00+00:00",
"version": "2.0.3"
}
}
]
},
"published": "2026-05-27T17:16:36.030",
"references": [
{
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"tags": [
"Third Party Advisory"
],
"url": "https://cna.erlef.org/cves/CVE-2026-42790.html"
},
{
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"tags": [
"Patch"
],
"url": "https://github.com/erlang/otp/commit/0769050c69d73762672b0db1347b6993a5b31759"
},
{
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"tags": [
"Patch"
],
"url": "https://github.com/erlang/otp/commit/21abed64eb2026b5f82f432709e4e932f9be389a"
},
{
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"url": "https://github.com/erlang/otp/commit/b0c245e8132bb13171e277b1af59c0cec00c9459"
},
{
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"tags": [
"Patch"
],
"url": "https://github.com/erlang/otp/commit/fb67c6d1836f51105a96d8b769e71e4215a79457"
},
{
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"tags": [
"Vendor Advisory"
],
"url": "https://github.com/erlang/otp/security/advisories/GHSA-22cw-4ph4-6447"
},
{
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"tags": [
"Mitigation",
"Third Party Advisory"
],
"url": "https://osv.dev/vulnerability/EEF-CVE-2026-42790"
},
{
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"tags": [
"Product"
],
"url": "https://www.erlang.org/doc/system/versions.html#order-of-versions"
},
{
"source": "0b0ca135-0b70-47e7-9f44-1890c2a1c46c",
"url": "https://access.redhat.com/errata/RHSA-2026:39809"
},
{
"source": "0b0ca135-0b70-47e7-9f44-1890c2a1c46c",
"url": "https://access.redhat.com/errata/RHSA-2026:54757"
},
{
"source": "0b0ca135-0b70-47e7-9f44-1890c2a1c46c",
"url": "https://access.redhat.com/security/cve/CVE-2026-42790"
},
{
"source": "0b0ca135-0b70-47e7-9f44-1890c2a1c46c",
"url": "https://bugzilla.redhat.com/show_bug.cgi?id=2482286"
},
{
"source": "0b0ca135-0b70-47e7-9f44-1890c2a1c46c",
"url": "https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-42790.json"
}
],
"sourceIdentifier": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"vulnStatus": "Modified",
"weaknesses": [
{
"description": [
{
"lang": "en",
"value": "CWE-295"
},
{
"lang": "en",
"value": "CWE-297"
}
],
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"type": "Secondary"
},
{
"description": [
{
"lang": "en",
"value": "CWE-295"
}
],
"source": "0b0ca135-0b70-47e7-9f44-1890c2a1c46c",
"type": "Secondary"
}
]
}
},
"redhat_vex": {
"aggregate_severity": "Important",
"current_release_date": "2026-09-21T10:36:41+00:00",
"cve": "CVE-2026-42790",
"id": "CVE-2026-42790",
"initial_release_date": "2026-05-27T15:09:01.860000+00:00",
"product_status:fixed": "170",
"product_status:known_affected": "20",
"product_status:known_not_affected": "158",
"source": "Red Hat CSAF VEX",
"status": "final",
"title": "erlang: Erlang OTP public_key: Certificate validation bypass allows hostname spoofing",
"url": "https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-42790.json",
"version": "3"
},
"vulnrichment": {
"containers": {
"adp": [
{
"affected": [
{
"collectionURL": "https://access.redhat.com/downloads/content/package-browser/",
"cpes": [
"cpe:/a:redhat:openstack:16.2::el8"
],
"defaultStatus": "affected",
"packageName": "erlang",
"product": "Red Hat OpenStack Platform 16.2",
"vendor": "Red Hat",
"versions": [
{
"lessThan": "*",
"status": "unaffected",
"version": "0:23.3.4.18-2.el8ost",
"versionType": "rpm"
}
]
},
{
"collectionURL": "https://access.redhat.com/downloads/content/package-browser/",
"cpes": [
"cpe:/a:redhat:openstack:18.0::el9"
],
"defaultStatus": "affected",
"packageName": "erlang",
"product": "Red Hat OpenStack Services on OpenShift 18.0",
"vendor": "Red Hat",
"versions": [
{
"lessThan": "*",
"status": "unaffected",
"version": "0:26.2.5.21-2.el9ost",
"versionType": "rpm"
}
]
},
{
"collectionURL": "https://access.redhat.com/downloads/content/package-browser/",
"cpes": [
"cpe:/a:redhat:hummingbird:1"
],
"defaultStatus": "affected",
"packageName": "erlang27",
"product": "Red Hat Hardened Images",
"vendor": "Red Hat"
},
{
"collectionURL": "https://access.redhat.com/downloads/content/package-browser/",
"cpes": [
"cpe:/a:redhat:openstack:17.1"
],
"defaultStatus": "affected",
"packageName": "erlang",
"product": "Red Hat OpenStack Platform 17.1",
"vendor": "Red Hat"
}
],
"datePublic": "2026-05-27T15:09:01.860Z",
"descriptions": [
{
"lang": "en",
"value": "A flaw was found in Erlang OTP public_key. This improper certificate validation vulnerability allows a subordinate Certificate Authority (CA) with restricted DNS nameConstraints to bypass these restrictions. By issuing a leaf certificate that lacks a Subject Alternative Name (SAN) but contains a crafted CommonName (CN), an attacker can trick an Erlang OTP TLS client into accepting it as valid for an out-of-scope hostname. This can lead to hostname spoofing and potential man-in-the-middle attacks, compromising the integrity and confidentiality of communications."
}
],
"metrics": [
{
"other": {
"content": {
"namespace": "https://access.redhat.com/security/updates/classification/",
"value": "Important"
},
"type": "Red Hat severity rating"
}
},
{
"cvssV3_1": {
"attackComplexity": "HIGH",
"attackVector": "NETWORK",
"availabilityImpact": "NONE",
"baseScore": 7.4,
"baseSeverity": "HIGH",
"confidentialityImpact": "HIGH",
"integrityImpact": "HIGH",
"privilegesRequired": "NONE",
"scope": "UNCHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N",
"version": "3.1"
},
"format": "CVSS"
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-295",
"description": "Improper Certificate Validation",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-09-18T12:04:51.323Z",
"orgId": "0b0ca135-0b70-47e7-9f44-1890c2a1c46c",
"shortName": "redhat-SADP"
},
"references": [
{
"tags": [
"vdb-entry",
"x_refsource_REDHAT"
],
"url": "https://access.redhat.com/security/cve/CVE-2026-42790"
},
{
"name": "RHBZ#2482286",
"tags": [
"issue-tracking",
"x_refsource_REDHAT"
],
"url": "https://bugzilla.redhat.com/show_bug.cgi?id=2482286"
},
{
"tags": [
"x_sadp-csaf-vex"
],
"url": "https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-42790.json"
},
{
"tags": [
"vendor-advisory",
"x_refsource_REDHAT"
],
"url": "https://access.redhat.com/errata/RHSA-2026:54757"
},
{
"tags": [
"vendor-advisory",
"x_refsource_REDHAT"
],
"url": "https://access.redhat.com/errata/RHSA-2026:39809"
}
],
"solutions": [
{
"lang": "en",
"value": "RHSA-2026:54757: Red Hat OpenStack Platform 16.2"
},
{
"lang": "en",
"value": "RHSA-2026:39809: Red Hat OpenStack Services on OpenShift 18.0"
}
],
"timeline": [
{
"lang": "en",
"time": "2026-05-27T17:02:53.354Z",
"value": "Reported to Red Hat."
},
{
"lang": "en",
"time": "2026-05-27T15:09:01.860Z",
"value": "Made public."
}
],
"title": "erlang: Erlang OTP public_key: Certificate validation bypass allows hostname spoofing",
"workarounds": [
{
"lang": "en",
"value": "Ensure all TLS certificates used in the deployment include Subject Alternative Name (SAN) extensions with the appropriate DNS entries. Certificates relying solely on the CommonName (CN) field for hostname identification are susceptible to this bypass. For Erlang applications, the verify_fun option in the ssl module can be configured to reject peer certificates missing the subjectAltName extension."
}
],
"x_adpType": "supplier",
"x_generator": {
"engine": "sadp-cli 1.0.0"
}
},
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-42790",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "total"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-05-27T17:31:50.271881Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-05-27T17:31:58.755Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"cpes": [
"cpe:2.3:a:erlang:erlang\\/otp:*:*:*:*:*:*:*:*"
],
"defaultStatus": "unaffected",
"modules": [
"pubkey_cert",
"public_key"
],
"packageName": "otp",
"packageURL": "pkg:software-id/erlang.org/otp",
"product": "OTP",
"programFiles": [
"lib/public_key/src/pubkey_cert.erl",
"lib/public_key/src/public_key.erl"
],
"programRoutines": [
{
"name": "pubkey_cert:validate_names/6"
},
{
"name": "public_key:pkix_verify_hostname/3"
}
],
"vendor": "Erlang",
"versions": [
{
"changes": [
{
"at": "26.2.5.21",
"status": "unaffected"
},
{
"at": "27.3.4.12",
"status": "unaffected"
},
{
"at": "28.5.0.1",
"status": "unaffected"
},
{
"at": "29.0.1",
"status": "unaffected"
}
],
"lessThan": "*",
"status": "affected",
"version": "19.3",
"versionType": "otp"
}
]
},
{
"cpes": [
"cpe:2.3:a:erlang:erlang\\/otp:*:*:*:*:*:*:*:*"
],
"defaultStatus": "unaffected",
"modules": [
"pubkey_cert",
"public_key"
],
"packageName": "public_key",
"packageURL": "pkg:otp/public_key?repository_url=https:%2F%2Fgithub.com%2Ferlang%2Fotp\u0026vcs_url=git%2Bhttps:%2F%2Fgithub.com%2Ferlang%2Fotp.git",
"product": "OTP",
"programFiles": [
"src/pubkey_cert.erl",
"src/public_key.erl"
],
"programRoutines": [
{
"name": "pubkey_cert:validate_names/6"
},
{
"name": "public_key:pkix_verify_hostname/3"
}
],
"repo": "https://github.com/erlang/otp",
"vendor": "Erlang",
"versions": [
{
"changes": [
{
"at": "1.15.1.7",
"status": "unaffected"
},
{
"at": "1.17.1.3",
"status": "unaffected"
},
{
"at": "1.20.3.1",
"status": "unaffected"
},
{
"at": "1.21.1",
"status": "unaffected"
}
],
"lessThan": "*",
"status": "affected",
"version": "1.4",
"versionType": "otp"
}
]
},
{
"collectionURL": "https://github.com",
"cpes": [
"cpe:2.3:a:erlang:erlang\\/otp:*:*:*:*:*:*:*:*"
],
"defaultStatus": "unaffected",
"modules": [
"pubkey_cert",
"public_key"
],
"packageName": "erlang/otp",
"packageURL": "pkg:github/erlang/otp",
"product": "OTP",
"programFiles": [
"lib/public_key/src/pubkey_cert.erl",
"lib/public_key/src/public_key.erl"
],
"programRoutines": [
{
"name": "pubkey_cert:validate_names/6"
},
{
"name": "public_key:pkix_verify_hostname/3"
}
],
"repo": "https://github.com/erlang/otp",
"vendor": "Erlang",
"versions": [
{
"changes": [
{
"at": "0769050c69d73762672b0db1347b6993a5b31759",
"status": "unaffected"
},
{
"at": "fb67c6d1836f51105a96d8b769e71e4215a79457",
"status": "unaffected"
},
{
"at": "21abed64eb2026b5f82f432709e4e932f9be389a",
"status": "unaffected"
}
],
"lessThan": "*",
"status": "affected",
"version": "b0c245e8132bb13171e277b1af59c0cec00c9459",
"versionType": "git"
}
]
}
],
"cpeApplicability": [
{
"nodes": [
{
"cpeMatch": [
{
"criteria": "cpe:2.3:a:erlang:erlang\\/otp:*:*:*:*:*:*:*:*",
"versionEndExcluding": "26.2.5.21",
"versionStartIncluding": "19.3",
"vulnerable": true
},
{
"criteria": "cpe:2.3:a:erlang:erlang\\/otp:*:*:*:*:*:*:*:*",
"versionEndExcluding": "27.3.4.12",
"versionStartIncluding": "27.0",
"vulnerable": true
},
{
"criteria": "cpe:2.3:a:erlang:erlang\\/otp:*:*:*:*:*:*:*:*",
"versionEndExcluding": "28.5.0.1",
"versionStartIncluding": "28.0",
"vulnerable": true
},
{
"criteria": "cpe:2.3:a:erlang:erlang\\/otp:*:*:*:*:*:*:*:*",
"versionEndExcluding": "29.0.1",
"versionStartIncluding": "29.0",
"vulnerable": true
}
],
"negate": false,
"operator": "OR"
}
],
"operator": "AND"
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "John Downey"
},
{
"lang": "en",
"type": "remediation developer",
"value": "Ingela Anderton Andin"
},
{
"lang": "en",
"type": "remediation reviewer",
"value": "Dan Gudmundsson"
},
{
"lang": "en",
"type": "remediation reviewer",
"value": "Jakub Witczak"
}
],
"datePublic": "2026-05-27T15:09:01.000Z",
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eImproper Certificate Validation vulnerability in Erlang OTP \u003ccode\u003epublic_key\u003c/code\u003e (\u003ccode\u003epubkey_cert\u003c/code\u003e and \u003ccode\u003epublic_key\u003c/code\u003e modules) allows a DNS \u003ccode\u003enameConstraints\u003c/code\u003e bypass via subject CommonName fallback in TLS hostname verification.\u003c/p\u003e\n\u003cp\u003eTwo flaws combine to allow a subordinate CA whose DNS \u003ccode\u003enameConstraints\u003c/code\u003e are restricted (e.g. \u003ccode\u003epermitted;DNS:allowed.example.com\u003c/code\u003e) to issue a leaf certificate that an OTP TLS client accepts as a valid identity for an out-of-scope hostname (e.g. \u003ccode\u003evictim.example.com\u003c/code\u003e):\u003c/p\u003e\n\u003cp\u003eFirst, \u003ccode\u003epubkey_cert:validate_names/6\u003c/code\u003e in \u003ccode\u003elib/public_key/src/pubkey_cert.erl\u003c/code\u003e only checks SAN DNS entries against \u003ccode\u003enameConstraints\u003c/code\u003e. Per RFC 5280, a permitted DNS subtree only restricts certificates that contain a DNS-typed name. A leaf with no \u003ccode\u003esubjectAltName\u003c/code\u003e therefore trivially satisfies any \u003ccode\u003epermitted;DNS:...\u003c/code\u003e constraint regardless of its subject \u003ccode\u003ecommonName\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eSecond, \u003ccode\u003epublic_key:pkix_verify_hostname/3\u003c/code\u003e in \u003ccode\u003elib/public_key/src/public_key.erl\u003c/code\u003e falls back to the subject \u003ccode\u003ecommonName\u003c/code\u003e when no \u003ccode\u003esubjectAltName\u003c/code\u003e is present, extracting \u003ccode\u003eid-at-commonName\u003c/code\u003e attributes as presented IDs and matching them against the reference hostname. The strict \u003ccode\u003epkix_verify_hostname_match_fun(https)\u003c/code\u003e matcher does not suppress this fallback.\u003c/p\u003e\n\u003cp\u003eThe result is that path validation accepts a CN-only leaf under a DNS-constrained intermediate (no SAN means the \u003ccode\u003enameConstraints\u003c/code\u003e are not triggered), and hostname verification then accepts it via the CN fallback. The bypass is reachable from stock \u003ccode\u003essl:connect\u003c/code\u003e with \u003ccode\u003everify_peer\u003c/code\u003e, a trusted CA, SNI, and the canonical strict \u003ccode\u003ehttps\u003c/code\u003e hostname matcher.\u003c/p\u003e\n\u003cp\u003eThis issue affects OTP from OTP\u0026nbsp;19.3 before OTP\u0026nbsp;26.2.5.21, OTP\u0026nbsp;27.3.4.12, OTP\u0026nbsp;28.5.0.1, and OTP\u0026nbsp;29.0.1, corresponding to public_key from 1.4 before 1.15.1.7, 1.17.1.3, 1.20.3.1, and 1.21.1.\u003c/p\u003e"
},
{
"base64": false,
"type": "text/markdown",
"value": "Improper Certificate Validation vulnerability in Erlang OTP `public_key` (`pubkey_cert` and `public_key` modules) allows a DNS `nameConstraints` bypass via subject CommonName fallback in TLS hostname verification.\n\nTwo flaws combine to allow a subordinate CA whose DNS `nameConstraints` are restricted (e.g. `permitted;DNS:allowed.example.com`) to issue a leaf certificate that an OTP TLS client accepts as a valid identity for an out-of-scope hostname (e.g. `victim.example.com`):\n\nFirst, `pubkey_cert:validate_names/6` in `lib/public_key/src/pubkey_cert.erl` only checks SAN DNS entries against `nameConstraints`. Per RFC 5280, a permitted DNS subtree only restricts certificates that contain a DNS-typed name. A leaf with no `subjectAltName` therefore trivially satisfies any `permitted;DNS:...` constraint regardless of its subject `commonName`.\n\nSecond, `public_key:pkix_verify_hostname/3` in `lib/public_key/src/public_key.erl` falls back to the subject `commonName` when no `subjectAltName` is present, extracting `id-at-commonName` attributes as presented IDs and matching them against the reference hostname. The strict `pkix_verify_hostname_match_fun(https)` matcher does not suppress this fallback.\n\nThe result is that path validation accepts a CN-only leaf under a DNS-constrained intermediate (no SAN means the `nameConstraints` are not triggered), and hostname verification then accepts it via the CN fallback. The bypass is reachable from stock `ssl:connect` with `verify_peer`, a trusted CA, SNI, and the canonical strict `https` hostname matcher.\n\nThis issue affects OTP from OTP\u00a019.3 before OTP\u00a026.2.5.21, OTP\u00a027.3.4.12, OTP\u00a028.5.0.1, and OTP\u00a029.0.1, corresponding to public_key from 1.4 before 1.15.1.7, 1.17.1.3, 1.20.3.1, and 1.21.1."
}
],
"value": "Improper Certificate Validation vulnerability in Erlang OTP public_key (pubkey_cert and public_key modules) allows a DNS nameConstraints bypass via subject CommonName fallback in TLS hostname verification.\n\nTwo flaws combine to allow a subordinate CA whose DNS nameConstraints are restricted (e.g. permitted;DNS:allowed.example.com) to issue a leaf certificate that an OTP TLS client accepts as a valid identity for an out-of-scope hostname (e.g. victim.example.com):\n\nFirst, pubkey_cert:validate_names/6 in lib/public_key/src/pubkey_cert.erl only checks SAN DNS entries against nameConstraints. Per RFC 5280, a permitted DNS subtree only restricts certificates that contain a DNS-typed name. A leaf with no subjectAltName therefore trivially satisfies any permitted;DNS:... constraint regardless of its subject commonName.\n\nSecond, public_key:pkix_verify_hostname/3 in lib/public_key/src/public_key.erl falls back to the subject commonName when no subjectAltName is present, extracting id-at-commonName attributes as presented IDs and matching them against the reference hostname. The strict pkix_verify_hostname_match_fun(https) matcher does not suppress this fallback.\n\nThe result is that path validation accepts a CN-only leaf under a DNS-constrained intermediate (no SAN means the nameConstraints are not triggered), and hostname verification then accepts it via the CN fallback. The bypass is reachable from stock ssl:connect with verify_peer, a trusted CA, SNI, and the canonical strict https hostname matcher.\n\nThis issue affects OTP from OTP\u00a019.3 before OTP\u00a026.2.5.21, OTP\u00a027.3.4.12, OTP\u00a028.5.0.1, and OTP\u00a029.0.1, corresponding to public_key from 1.4 before 1.15.1.7, 1.17.1.3, 1.20.3.1, and 1.21.1."
}
],
"impacts": [
{
"capecId": "CAPEC-475",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-475 Signature Spoofing by Improper Validation"
}
]
}
],
"metrics": [
{
"cvssV4_0": {
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"attackComplexity": "HIGH",
"attackRequirements": "PRESENT",
"attackVector": "NETWORK",
"baseScore": 7.6,
"baseSeverity": "HIGH",
"privilegesRequired": "NONE",
"providerUrgency": "NOT_DEFINED",
"subAvailabilityImpact": "NONE",
"subConfidentialityImpact": "NONE",
"subIntegrityImpact": "NONE",
"userInteraction": "PASSIVE",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:P/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N",
"version": "4.0",
"vulnAvailabilityImpact": "NONE",
"vulnConfidentialityImpact": "HIGH",
"vulnIntegrityImpact": "HIGH",
"vulnerabilityResponseEffort": "NOT_DEFINED"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-295",
"description": "CWE-295 Improper Certificate Validation",
"lang": "en",
"type": "CWE"
}
]
},
{
"descriptions": [
{
"cweId": "CWE-297",
"description": "CWE-297 Improper Validation of Certificate with Host Mismatch",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-11-11T19:13:56.207Z",
"orgId": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"shortName": "EEF"
},
"references": [
{
"name": "Name Constraints and Subject CommonName Fallback in TLS hostname Verification",
"tags": [
"vendor-advisory",
"related"
],
"url": "https://github.com/erlang/otp/security/advisories/GHSA-22cw-4ph4-6447"
},
{
"name": "EEF CNA record for CVE-2026-42790",
"tags": [
"related"
],
"url": "https://cna.erlef.org/cves/CVE-2026-42790.html"
},
{
"name": "OSV record EEF-CVE-2026-42790",
"tags": [
"related"
],
"url": "https://osv.dev/vulnerability/EEF-CVE-2026-42790"
},
{
"name": "Erlang/OTP version ordering",
"tags": [
"x_version-scheme"
],
"url": "https://www.erlang.org/doc/system/versions.html#order-of-versions"
},
{
"name": "Introducing commit b0c245e in erlang/otp",
"tags": [
"related"
],
"url": "https://github.com/erlang/otp/commit/b0c245e8132bb13171e277b1af59c0cec00c9459"
},
{
"name": "Fix commit 0769050 in erlang/otp",
"tags": [
"patch"
],
"url": "https://github.com/erlang/otp/commit/0769050c69d73762672b0db1347b6993a5b31759"
},
{
"name": "Fix commit fb67c6d in erlang/otp",
"tags": [
"patch"
],
"url": "https://github.com/erlang/otp/commit/fb67c6d1836f51105a96d8b769e71e4215a79457"
},
{
"name": "Fix commit 21abed6 in erlang/otp",
"tags": [
"patch"
],
"url": "https://github.com/erlang/otp/commit/21abed64eb2026b5f82f432709e4e932f9be389a"
}
],
"source": {
"discovery": "EXTERNAL"
},
"title": "nameConstraints DNS bypass via subject CommonName fallback in public_key hostname verification",
"workarounds": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eThe \u003ccode\u003everify_fun\u003c/code\u003e option in the \u003ccode\u003essl\u003c/code\u003e application can be used to ensure that TLS connections fail if the end-entity certificate is missing the \u003ccode\u003esubjectAltName\u003c/code\u003e extension or has no domain name. Do not use a \u003ccode\u003everify_fun\u003c/code\u003e that accepts the \u003ccode\u003ename_not_permitted\u003c/code\u003e error.\u003c/p\u003e"
},
{
"base64": false,
"type": "text/markdown",
"value": "The `verify_fun` option in the `ssl` application can be used to ensure that TLS connections fail if the end-entity certificate is missing the `subjectAltName` extension or has no domain name. Do not use a `verify_fun` that accepts the `name_not_permitted` error."
}
],
"value": "The verify_fun option in the ssl application can be used to ensure that TLS connections fail if the end-entity certificate is missing the subjectAltName extension or has no domain name. Do not use a verify_fun that accepts the name_not_permitted error."
}
]
}
},
"cveMetadata": {
"assignerOrgId": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"assignerShortName": "EEF",
"cveId": "CVE-2026-42790",
"datePublished": "2026-05-27T15:09:01.860Z",
"dateReserved": "2026-04-29T18:06:33.251Z",
"dateUpdated": "2026-11-11T19:13:56.207Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
}
}
Drag nodes to arrange them. Double-click a related vulnerability to open it, or a source to visit its link. The Physics button on the left tunes the layout and the simulation; the legend at the bottom left hides or shows nodes by kind and by sighting type.
Sightings
| Author | Source | Type | Date | Other |
|---|
Nomenclature
- Seen: The vulnerability was mentioned, discussed, or observed by the user.
- Confirmed: The vulnerability has been validated from an analyst's perspective.
- Published Proof of Concept: A public proof of concept is available for this vulnerability.
- Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
- Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
- Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
- Not confirmed: The user expressed doubt about the validity of the vulnerability.
- Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.
Vulnerability timeline
Sightings and recorded dates, grouped by day · UTC
How durations are calculated
Following the VTEM framework (Black Hat USA 2015), time to patch starts when the vendor or a coordinator was informed, total time to patch at discovery, and disclosure to patch at public disclosure; vendor response time runs from the report to its acknowledgement. Time to exploit and time unpatched start at the earliest discovery or report, falling back to public disclosure. Unpatched time ends at the first recorded patch, or the calculation time when no patch is recorded. Exploitation to patch shows the interval between those two events; a published proof of concept is a public exploit, not exploitation.
Each result shows its source dates. A negative interval means the end event came first; when date-only inputs leave the order open, the result says so. Date-only inputs are approximate. The earliest evidence wins: KEV report dates and sightings are labelled as such. Records describing another vulnerability are listed but never calculated from, and a PoC alone does not establish exploitation. Missing patch evidence does not prove that no patch exists. Filters below change the event list only.
Loading timeline…
The approach is described in our paper Mapping CVEs to MITRE ATT&CK Techniques: A Curated Gold-Set Classifier and the Limits of LLM-Assisted Label Expansion.
Browse all ATT&CK techniques and the vulnerabilities related to each.
Related by attack behaviour
Vulnerabilities whose description is nearest to this one in the vector space of the CIRCL/vulnerability-attack-technique-biencoder model. This is a similarity search over the bi-encoder space (plain cosine), not a classification, and it has no measured accuracy.