CVE-2026-103503
5.9MediumPublished 12 Oct 2026 · NVD status: Deferred · AI triage by gemini-3.8-flash
- Attack vector
- Network
- Complexity
- High
- Privileges needed
- None
- User interaction
- Active
- Impact
- High impact on confidentiality
- Weakness
- CWE-295
Impact
A machine-in-the-middle attacker holding a valid certificate from Hex's bundled CAs can impersonate a Hex host even if you explicitly excluded that CA via a custom CA store. The attacker requires network interception capabilities and a certificate matching the target host.
Root cause
Hex always builds its partial_chain validation callback using the bundled CA bundle, causing it to trust bundled CA certificates even when overridden with cacerts_path.
Affected systems
hex from 0.20.2 before 2.5.2
CVSS v4.0 · CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:A/VC:H/VI:L/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
Fix & remediation
Upgrade hex to version 2.5.2 or later. No interim mitigation is documented if you rely on cacerts_path to restrict CAs, so prioritize the upgrade.
$ mix local.hex --forceAI-suggested. Run it in staging first and check it against the vendor advisory. Why?
NVD description
Improper Certificate Validation vulnerability in hexpm hex allows an attacker who can intercept HTTPS connections, and holds a certificate for a Hex host issued by a CA in Hex's bundled CA store, to impersonate that host to users who set cacerts_path to a CA store that leaves that CA out. cacerts_path (HEX_CACERTS_PATH) is documented as the path to the CA certificate store, used instead of the CA bundle that ships with Hex. Hex.HTTP.SSL.ssl_opts/1 passes the configured store as the cacerts option, but builds the partial_chain callback from the bundled store whether cacerts_path is set or not. Hex.HTTP.SSL.partial_chain/2 accepts a server chain when any certificate in it has the same public key as a bundled CA certificate, so a chain that leads to a bundled CA passes verification although the configured store doesn't contain that CA. Hostname verification still applies. This issue affects hex: from 0.20.2 before 2.5.2.
References
- https://cna.erlef.org/cves/CVE-2026-103503.html
- https://github.com/hexpm/hex/commit/5f5a2136c7cf5991b6e8a30d645ca9f8e74b0785
- https://github.com/hexpm/hex/commit/6232a6498015e559743bec4f4fbec9138837cec8
- https://github.com/hexpm/hex/commit/c9b26a46928bfcd546773571e09c1d05f4cd9fb7
- https://github.com/hexpm/hex/security/advisories/GHSA-rw8q-hg7m-cxgr
- https://osv.dev/vulnerability/EEF-CVE-2026-103503