ssl_verify_fun: Partial-label wildcard certificate accepted across label boundary
Summary
The Erlang library ssl_verify_fun accepts certificates with a partial-label wildcard such as f*.example.net, so the wildcard also matches hostnames spanning several labels, for example f.evil.example.net. It also lets *.168.1.1 match the IP address 192.168.1.1. An attacker in a man-in-the-middle position who holds such a certificate from a trusted CA could impersonate the affected host and read or alter the connection. Clients that keep server_name_indication set are protected by the hostname check in Erlang/OTP, but clients with SNI disabled, servers verifying client certificates with this library and direct callers of verify_cert_hostname/2 are exposed.
Affected
- ssl_verify_fun from 1.0.1 before 1.1.8 (Hex)
- Git revisions a49ca56923356c7a3981692b23c42ef32c2990e0 to before ca34031299cd2e0c98794c0da4ba556b94e39aad
- Erlang/OTP older than 20.0 is also exposed
Fixed in
- Upgrade to ssl_verify_fun 1.1.8 or later
Workaround
- Keep server_name_indication set to the target hostname and add {customize_hostname_check, [{match_fun, public_key:pkix_verify_hostname_match_fun(https)}]} to the ssl options (Erlang/OTP 21 or later). This does not cover clients with SNI disabled, server-side client certificate checks or direct calls to verify_cert_hostname/2.
Exploitation
- No public proof-of-concept or exploitation known.
- Attack requires a man-in-the-middle position and a partial-label wildcard certificate from a CA the client trusts, which the CA/Browser Forum Baseline Requirements do not allow, so the realistic exposure is private PKI.
- Not listed in CISA KEV as far as known; not checked directly.
Our recommendation
- Check lock files (mix.lock, rebar.lock) and software inventories for ssl_verify_fun versions 1.0.1 to 1.1.7.
- Upgrade to 1.1.8 or later where found and verify the version on Hex before pinning.
- Prioritise services that disable SNI or verify client certificates with this library.
- Apply the interim configuration workaround where an upgrade cannot be done immediately.
Public exploits
PoC-in-GitHub, Metasploit and Exploit-DB list nothing for this CVE.
Research sources
- CVE record CVE-2026-117666 (CNA EEF) cna.erlef.org
- OSV record EEF-CVE-2026-117666 osv.dev
- GitHub security advisory GHSA-7gw2-hphm-c5px github.com
- Fix commit ca34031 github.com
- Commit a49ca56 github.com
- Pull request #33 github.com
- Hex package ssl_verify_fun hex.pm
- VulDB entry 429397 vuldb.com
Researched and written up in English and German by an AI (Claude by Anthropic) based on NVD, CISA, EPSS and the sources listed. The vendor information is authoritative. Researched on 31 Oct 2026, 05:05.
Original description (NVD)
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.
NVD references (6)
- https://cna.erlef.org/cves/CVE-2026-117666.html
- https://github.com/deadtrickster/ssl_verify_fun.erl/commit/a49ca56923356c7a3981692b23c42ef32c2990e0
- https://github.com/deadtrickster/ssl_verify_fun.erl/commit/ca34031299cd2e0c98794c0da4ba556b94e39aad
- https://github.com/deadtrickster/ssl_verify_fun.erl/pull/33
- https://github.com/deadtrickster/ssl_verify_fun.erl/security/advisories/GHSA-7gw2-hphm-c5px
- https://osv.dev/vulnerability/EEF-CVE-2026-117666
Sources
The tracker combines official, freely usable data sources – updated continuously:
- NVD (NIST) – CVEs, rating (CVSS), affected products
- CISA KEV – vulnerabilities confirmed by CISA as actively exploited
- CISA Vulnrichment – CISA assessment (SSVC) in the official CVE record
- FIRST EPSS – probability of exploitation
- Microsoft MSRC – Patch Tuesday: vulnerabilities, severity, updates
- PoC-in-GitHub – public proof-of-concept repositories
- Metasploit (Rapid7) – modules of the Metasploit Framework
- Exploit-DB (OffSec) – archive of public exploits (links only)
- Patch days: official vendor pages (linked per vendor) (Vendor patch days)
This product uses data from the NVD API but is not endorsed or certified by the NVD. EPSS data © FIRST.org.
Affected? We can help.
We check whether your systems are affected, install updates and close the gap – continuously with the System Health Checker if you wish.
