---
id: "CVE-2026-117666"
kind: "vulnerability"
aliases: ["CVE-2026-117666"]
title: "ssl_verify_fun: partial wildcard certificates impersonate TLS peers in hostname checks"
severity: "critical"
cvss: 9.1
epss: null
exploited: false
status: "open"
category: "package"
products: []
ecosystems: []
tags: ["erlang", "package", "rebar3", "ssl_verify_fun", "tls"]
not_affected_if: ["default-config", "no-client-cert-hostname-check", "sni-enabled-client"]
published_at: "2026-10-30T21:16:51+00:00"
first_seen_at: "2026-10-30T21:25:52+00:00"
updated_at: "2026-10-30T21:26:28+00:00"
sources: [{"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-117666", "first_seen_at": "2026-10-30T21:25:52+00:00"}]
---

# ssl_verify_fun: partial wildcard certificates impersonate TLS peers in hostname checks

ssl_verify_fun is an Erlang library that checks TLS certificate hostnames. A partial-label wildcard such as f*.example.net wrongly matches names like f.evil.example.net, so an attacker in the middle can impersonate a TLS peer.

_Summary, check and fix written by a model from the sources; labelled as such._

## How to check

- Look for the `ssl_verify_fun` dependency in your Erlang project's lock file or `rebar.lock`, and note its version.
- Check whether clients disable SNI or servers verify client certificate hostnames with this library.
- Check whether your code calls `verify_cert_hostname/2` directly.

## Fix

- `ssl_verify_fun` `1.1.8` or later (fixed in versions from `1.0.1` before `1.1.8`)

## Timeline

- 2026-10-30T21:25:52+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-117666

## From the sources

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.

---

_Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai_
