Skip to main content

ssl_verify_fun CVE-2026-117666

| EUVDEUVD-2026-114450 CRITICAL
Improper Validation of Certificate with Host Mismatch (CWE-297)
2026-10-30 EEF
9.1
CVSS 4.0 · Vendor: EEF
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Obtain partial-label wildcard cert from trusted (private) CA
  2. Delivery
    Position as adversary-in-the-middle on TLS path
  3. Exploit
    Present cert to client relying on ssl_verify_fun with SNI disabled
  4. Execution
    try_match_wildcard accepts hostname across label boundary
  5. Impact
    Impersonate peer and read or alter traffic

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A07:2025 - Authentication Failures
ASVS 5.0
V12 - Secure Communication Certificate host validation
Exploitation Conditions

Requires three things together: (1) an attacker-held leaf certificate whose subjectAltName carries a partial-label wildcard such as f*.example.net (or *.168.1.1 for the IP-literal variant), issued by a CA the victim trusts - the CA/Browser Forum Baseline Requirements disallow such certificates, so realistically this means a private/internal PKI; (2) an adversary-in-the-middle position on the TLS connection; and (3) a deployment where ssl_verify_fun performs the sole hostname check. The last condition holds only when the client sets {server_name_indication, disable}, when a TLS server uses ssl_verify_hostname:verify_fun/3 to verify client-certificate hostnames, when code calls ssl_verify_hostname:verify_cert_hostname/2 directly, or when running Erlang/OTP older than 20.0. LIMITING FACTORS: on Erlang/OTP 20.0 and later with server_name_indication set to a hostname (or an IP from a socket upgrade), the ssl layer runs public_key:pkix_verify_hostname and rejects the mismatch with hostname_check_failed before the user verify_fun sees valid_peer, so default SNI-enabled clients are not exploitable. Whole-label wildcards (*.example.net) are matched correctly and are not affected. The documented workaround on OTP 21+ is to keep SNI set and pass {customize_hostname_check, [{match_fun, public_key:pkix_verify_hostname_match_fun(https)}]}; hackney and tls_certificate_check already set both options.

Impact

The signals pull in opposite directions and must be weighed carefully. The input assigns CVSS 4.0 9.1 (Critical) and vuln.today labels this act_now, yet the concrete exploitation path is tightly constrained. The 4.0 vector (AV:N/AC:H/AT:P/PR:N/UI:N) already encodes this tension: network-reachable and unauthenticated, but high complexity with an attack requirement (AT:P), reflecting that the attacker must hold a certificate carrying a partial-label wildcard issued by a CA the victim trusts. The advisory states the CA/Browser Forum Baseline Requirements forbid such certificates, so realistic exposure is confined to private PKI, and exploitation only matters where ssl_verify_fun is the sole hostname check - specifically {server_name_indication, disable}, TLS servers verifying client-certificate hostnames, direct callers of verify_cert_hostname/2, or Erlang/OTP older than 20.0. On OTP 20.0+ with SNI set to a hostname, the ssl layer rejects the mismatch before the library runs, neutralizing the flaw. No KEV listing and no EPSS score are present in the input, so there is no evidence of active or widespread exploitation; status is no public exploit identified as confirmed working code, though the advisory publishes a step-by-step PoC procedure. Net: this is a genuine authentication-bypass/MITM defect that warrants prompt patching per the act_now label, but its real-world blast radius is narrow (private-PKI, non-default-configuration deployments) rather than broad internet-wide risk - the high score reflects impact severity, not ease or breadth of exploitation.

Exploit ScenarioDerived

An adversary who can position themselves in the network path (adversary-in-the-middle) and who possesses a certificate for an identifier like f*.example.net issued by a CA the victim trusts presents it to a client that relies solely on ssl_verify_fun for hostname verification (e.g. with SNI disabled). The library accepts the certificate for f.evil.example.net because the partial-label wildcard is allowed to consume dots across a label boundary, letting the attacker impersonate the host and read or alter the TLS traffic. A detailed PoC procedure (issuing the leaf cert via public_key:pkix_test_data and calling verify_cert_hostname/2) is published in the GHSA advisory, but it is not verified as packaged working exploit code; the high CVSS complexity (AC:H/AT:P) reflects the need for the attacker-held trusted wildcard certificate and a vulnerable non-default configuration.

Act Now Prioritize within 24-48h. Why: CRITICAL severity.
Patch available 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 30, 2026

Hostname verification in the Erlang library ssl_verify_fun (versions 1.0.1 through 1.1.7) mishandles partial-label wildcard certificate identifiers, letting a certificate such as f*.example.net be accepted for f.evil.example.net. A man-in-the-middle holding such a certificate from a CA the victim trusts could impersonate the peer, but only where ssl_verify_fun is the sole hostname check - clients with server_name_indication disabled, TLS servers using it to check client certificates, direct callers of verify_cert_hostname/2, or Erlang/OTP older than 20.0, since OTP 20.0+ with SNI set rejects the mismatch in ssl first. Fixed in 1.1.8; no public exploit identified at time of analysis, though a detailed proof-of-concept procedure is published in the advisory.

RemediationAI

Upgrade ssl_verify_fun to 1.1.8 or later (fix commit ca34031, pull request https://github.com/deadtrickster/ssl_verify_fun.erl/pull/33, advisory GHSA-7gw2-hphm-c5px). If upgrading is not immediately possible, the vendor documents a workaround on Erlang/OTP 21 or later: keep server_name_indication set to the target hostname and pass {customize_hostname_check, [{match_fun, public_key:pkix_verify_hostname_match_fun(https)}]} in the ssl options, so the ssl-layer check rejects cross-label wildcard matches before ssl_verify_fun runs while legitimate whole-label wildcards still match - the trade-off is dependence on OTP's matcher and inapplicability to OTP older than 21. For servers verifying client certificate hostnames and for direct callers of verify_cert_hostname/2 there is no equivalent compensating control in the library itself: remove reliance on partial-label wildcard matching by re-issuing any internal-PKI certificates with whole-label or no wildcards, and restrict trust to a private CA whose issuance policy forbids partial-label wildcards. Note the vendor states that the ssl-layer workaround covers only the configurations listed; updating the library is the complete fix.

Affected VersionsENISA

ssl_verify_fun a49ca56923356c7a3981692b23c42ef32c2990e0 <ca34031299cd2e0c98794c0da4ba556b94e39aad
ssl_verify_fun 1.0.1 <1.1.8

Affected Packages

euvd ssl_verify_fun fix: 1.1.8

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

CWE-297 (Improper Validation of Certificate with Host Mismatch) in ssl_verify_fun's src/ssl_verify_hostname.erl. try_match_hostname/2 strips trailing dots, attempts a case-insensitive exact match and otherwise calls parse_and_validate_wildcard_identifier/2, which accepts an identifier with a single * in the left-most label plus at least two labels after it and flags the label as SingleCharW only when it is exactly '*'. try_match_wildcard/4 then, in the non-SingleCharW case, verifies only that the presented hostname ends with the suffix after the '*' and starts with the text before it - it never inspects the span the '*' consumes, so dots are swallowed and f*.example.net matches f.evil.example.net and f.a.b.example.net. RFC 6125 section 6.4.3 confines wildcards to the left-most label; the wildcard_not_in_a_label/2 guard only rejects internationalized xn-- labels. Because the reference identifier is treated as a DNS name regardless of shape, *.168.1.1 also matches the IP literal 192.168.1.1, whereas OTP's ssl converts an IP-literal string to an {ip, ...} reference that only matches iPAddress entries. Whole-label wildcards (*.example.net) compare from the first dot onward and behave correctly. The fix commit ca34031 computes the wildcard-consumed span and rejects matches where it contains a dot.

Know when Erlang gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (EEF) PRIMARY 9.1 CRITICAL
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N
vuln.today AI 7.4 HIGH

AC:H because exploitation needs a trusted partial-label-wildcard cert plus a non-default config (SNI disabled, server-side, or OTP<20); PR:N as the TLS peer is unauthenticated; MITM read/alter gives C:H/I:H, A:N.

3.1 AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N
4.0 AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (EEF).

CVSS VectorVendor: EEF

Attack Vector
Network
Attack Complexity
High
Attack Requirements
Present
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
High
Vulnerable system: Integrity
High
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

DescriptionCVE.org

Improper Validation of Certificate with Host Mismatch vulnerability in deadtrickster ssl_verify_fun allows an adversary in the middle to impersonate a TLS peer via a certificate that carries a partial-label wildcard. try_match_wildcard/4 in src/ssl_verify_hostname.erl anchors only the text before and after the * of an identifier such as f*.example.net, so the wildcard also consumes dots and the certificate is accepted for f.evil.example.net. RFC 6125 confines a wildcard to the left-most label. The same matcher lets *.168.1.1 match the IP literal 192.168.1.1. Whole-label wildcards are matched correctly.

Erlang/OTP 20.0 and later check the hostname in ssl before a user verify_fun sees valid_peer, so a client that keeps server_name_indication set rejects the mismatch regardless. Exposed are clients that disable SNI, servers that verify client certificate hostnames with this library, and direct callers of verify_cert_hostname/2.

This issue affects ssl_verify_fun: from 1.0.1 before 1.1.8.

Technical POC Analysis

CWE-297: Improper Validation of Certificate with Host Mismatch.

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Executive ViewAI

Why It Matters

A critical hostname verification flaw in the Erlang library ssl_verify_fun (versions 1.0.1-1.1.7) allows man-in-the-middle attackers to impersonate trusted peers using a crafted wildcard certificate. This affects Erlang-based applications where ssl_verify_fun is the sole hostname check, such as TLS servers validating client certs or clients with SNI disabled, potentially enabling credential theft or data breach.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.2%
Top 91% exploitable
Prevalence
Low
niche Erlang/OTP ecosystem library, limited production footprint
Data Quality
3 sources
Confidence: Low

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity CRITICAL
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
CRITICAL severity
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact
High

Priority Score

46
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +46
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

More in Erlang

View all
CVE-2025-32433 CRITICAL POC
10.0 Apr 16

Erlang/OTP SSH server allows unauthenticated remote code execution by exploiting a flaw in SSH protocol message handling

CVE-2017-1000385 MEDIUM POC
5.9 Dec 12

The Erlang otp TLS server answers with different TLS alerts to different error types in the RSA PKCS #1 1.5 padding. Rat

CVE-2023-48795 MEDIUM POC
5.9 Dec 18

The SSH transport protocol with certain OpenSSH extensions, found in OpenSSH before 9.6 and other products, allows remot

CVE-2020-13802 CRITICAL POC
9.8 Sep 02

Rebar3 versions 3.0.0-beta.3 to 3.13.2 are vulnerable to OS command injection via URL parameter of dependency specificat

CVE-2014-1693 HIGH POC
7.5 Dec 08

Multiple CRLF injection vulnerabilities in the FTP module in Erlang/OTP R15B03 allow context-dependent attackers to inje

CVE-2021-29221 HIGH POC
7.0 Apr 09

A local privilege escalation vulnerability was discovered in Erlang/OTP prior to version 23.2.3. Rated high severity (CV

CVE-2016-10253 CRITICAL
9.8 Mar 18

An issue was discovered in Erlang/OTP 18.x. Rated critical severity (CVSS 9.8), this vulnerability is remotely exploitab

CVE-2022-37026 CRITICAL
9.8 Sep 21

In Erlang/OTP before 23.3.4.15, 24.x before 24.3.4.2, and 25.x before 25.0.2, there is a Client Authentication Bypass in

CVE-2026-89422 CRITICAL
9.3 Sep 22

Erlang/OTP's ssl application in affected releases (OTP 22.2 through the fixed 27.3.4.18, 28.5.0.7 and 29.1.1) will compl

CVE-2026-67404 CRITICAL
9.2 Sep 23

RabbitMQ brokers that use the OAuth2 plugin can silently fall back to disabled TLS certificate verification when no CA b

CVE-2026-67231 CRITICAL
9.1 Sep 23

TLS client-authentication bypass in the RabbitMQ trust-store plugin lets a remote unauthenticated attacker whose forged

CVE-2026-55953 CRITICAL
9.1 Jul 27

An on-path attacker can force an Erlang/OTP TLS 1.2 or DTLS client to accept an anonymous cipher suite not offered by th

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy