Medium severity · published Oct 12, 2026
CVE-2026-103503
Hex trusts its bundled CA certificates when cacerts_path is set
5.9
CVSS
0.2%
EPSS
No
On KEV
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.
Exploitation
Is it being used?
Exploit prediction (EPSS)0.2% · higher than 11% of CVEs
Exploited in the wildNo evidence yet
CISA KEVNot listed
Ransomware campaign useNot known
Affected products
Which versions
HE
hex · hexpm
0.20.2 before 2.5.2; c9b26a46928bfcd546773571e09c1d05f4cd9fb7 · source: vendor
References
NVD
https://nvd.nist.gov/vuln/detail/CVE-2026-103503
CVE.org
https://www.cve.org/CVERecord?id=CVE-2026-103503
related
https://github.com/hexpm/hex/security/advisories/GHSA-rw8q-hg7m-cxgr
related
https://cna.erlef.org/cves/CVE-2026-103503.html
related
https://osv.dev/vulnerability/EEF-CVE-2026-103503
related
https://github.com/hexpm/hex/commit/c9b26a46928bfcd546773571e09c1d05f4cd9fb7
patch
https://github.com/hexpm/hex/commit/5f5a2136c7cf5991b6e8a30d645ca9f8e74b0785
patch
https://github.com/hexpm/hex/commit/6232a6498015e559743bec4f4fbec9138837cec8
More from hex
7.5
CVE-2026-96612
Path traversal in Hex via unvalidated dependency app names
7.5
CVE-2026-21619
Unsafe Deserialization of Erlang Terms in hex_core
7.1
CVE-2026-105668
Hex release-age cooldown is lifted package-wide when the locked release is retired
6.9
CVE-2026-105280
Hex writes unverified package tarballs to standard output in mix hex.package fetch
5.9
CVE-2026-96596
erl_tar:extract/2 loops forever on a GNU sparse member with a trailing hole
