Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessServe crafted compressed hex response as mirror
-
ExploitClient gunzips or binary_to_term's payload
-
ExecutionDecoded term inflates before signature check
-
ImpactErlang VM memory exhausted, process crashes
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V2 - Validation and Business Logic Compression ratio limits
|
| Exploitation Conditions | Requires the attacker to control the data served to the hex_core/Hex/rebar3 client: an untrusted or compromised repository mirror, a malicious server answering hex_core's API requests, or a network MITM on the fetch. Two code paths are vulnerable: hex_repo:get_names/1, get_versions/1, get_package/2 and get_policy/2 run zlib:gunzip/1 and decode the signed envelope BEFORE verifying the signature (so no repository private key is needed - the mirror only controls the compressed bytes); and hex_api decoding of application/vnd.hex+erlang responses via hex_safe_binary_to_term:safe_binary_to_term/1 calls binary_to_term(Binary, [safe]), which still accepts compressed terms and does not bound decoded size, with the function/port rejection running only after the term is built. Limiting factors: the victim must actively run a Hex/mix/rebar3 fetch operation (UI:A), the attacker must be positioned as the mirror/API server or MITM (AT:P), and it is not exploitable against the default trusted hex.pm repository over TLS unless that server or transport is compromised; impact is confined to memory exhaustion of the client-side Erlang VM (no code execution, no data exposure). |
| Impact | This is a low-severity availability issue, not a high-priority emergency. The CNA-supplied CVSS 4.0 vector (base 2.1) captures it well: AV:N but AT:P and UI:A, with impact limited to VA:L and no confidentiality or integrity effect (VC:N/VI:N). The flaw is a decompression/data-amplification bomb (CWE-409): because hex_repo decompresses via zlib:gunzip/1 and hex_api decodes compressed Erlang terms via binary_to_term before the signature/safety checks complete, a small crafted response can balloon into an arbitrarily large term and exhaust the Erlang VM's memory. Crucially, exploitation is NOT remote-unauthenticated-against-anyone: the attacker must be the repository mirror or API server the client talks to (or a network MITM), and the client must actively initiate a fetch (AT:P + UI:A), so this is positional rather than broadly sprayable. No EPSS score was provided (unknown), the CVE is NOT in CISA KEV, and no public exploit was identified in the supplied data, so there is no evidence of active exploitation. The one tension to flag: the input Tags label this 'Information Disclosure', which directly contradicts the CWE-409 category and the availability-only impact metrics - this is a denial-of-service/resource-exhaustion bug, not disclosure. Priority: patch during normal maintenance, prioritizing environments that fetch from untrusted or self-hosted mirrors. |
| Exploit ScenarioDerived | A developer or CI pipeline configures Hex/rebar3 to use an untrusted or compromised repository mirror (or an attacker MITMs the fetch). When the client calls get_names/get_versions/get_package or a hex+erlang API endpoint, the attacker returns a few kilobytes of highly compressed data that decompresses into a multi-gigabyte envelope/term before the signature or safety check runs, exhausting the Erlang VM memory and crashing the build/fetch process. No public exploit code was identified in the provided intelligence. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 12, 2026
Memory exhaustion in hex_core (a library vendored into Hex/mix and rebar3) lets an untrusted repository mirror or a malicious server answering hex_core API requests abort the client-side Erlang VM by returning a tiny, highly compressed response that expands into a very large term or signed envelope. The vulnerable code paths decompress and decode attacker-controlled bytes before the registry signature is verified, and the Erlang safe-binary decoder used for application/vnd.hex+erlang responses accepts compressed terms without bounding the decoded size. Exploitation requires the attacker to control the served data (malicious/compromised mirror, hostile API server, or TLS MITM) and the victim to actively run a fetch operation; this is an unauthenticated remote issue per the assessed vector (CVSS:4.0 PR:N, UI:A, AT:P), but it is a low-severity availability-only problem with no code execution or data exposure, and no public exploit identified at time of analysis.
RemediationAI
Vendor-released patch: hex_core 0.20.0 (fix commit ebe25d110717f6a3addba5232cd4a7dc1c76b628), Hex 2.5.2 (fix commit d8b60eee97abb119d525306f048969a217d793a5), and for rebar3 an upstream fix commit is published (209c02ec57c2cc3207ee0174c3af3675b8dc8f79), though a released patched rebar3 version was not independently confirmed, so pin to a build containing that commit if no tagged release with it yet exists. Upgrade each vendored copy as well, since Hex bundles mix_hex_repo/mix_hex_api and rebar3 bundles r3_hex_repo/r3_hex_api; applying only the standalone hex_core library dependency may not remove the vulnerable vendored modules. Where immediate upgrade is not possible, compensating controls are: restrict fetches to the default hex.pm registry over verified TLS and disable or remove any untrusted custom mirror/repo entries in mix.exs/rebar.config (trade-off: loss of mirror-based caching and offline/air-gapped package sources); where a private mirror must be used, place it behind a mutually authenticated, trusted network path so an attacker cannot answer client requests, and cap HTTP response body sizes and/or wrap the fetch in an OS-level memory limit (ulimit/cgroup) on the build agent (trade-off: large but legitimate registry responses could be truncated, and memory caps may abort unrelated build steps). Note also that blocking interception of the fetch does not mitigate a compromised mirror itself, so mirror trust should be reassessed. Details are in the GitHub advisory at https://github.com/hexpm/hex_core/security/advisories/GHSA-7c4r-cgf9-9jmq and the ERLEF CNA page at https://cna.erlef.org/cves/CVE-2026-105274.html.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
CWE-409 (Improper Handling of Highly Compressed Data / data amplification) underlies this issue. In the registry path, hex_repo:get_names/1, get_versions/1, get_package/2 and get_policy/2 call zlib:gunzip/1 on the HTTP response and then decode the signed protobuf envelope before checking the repository signature - a mirror cannot forge the signature, but it fully controls the compressed bytes, so a small gzip payload can inflate to an arbitrarily large in-memory binary before verification rejects it. In the API path, hex_api handles responses with content type application/vnd.hex+erlang through hex_safe_binary_to_term:safe_binary_to_term/1, which calls binary_to_term(Binary, [safe]); the safe flag blocks new atom creation but still permits compressed terms and does not limit decoded term size, and the guard that rejects functions and ports executes only after the term has already been constructed - a gap left by the earlier fix for CVE-2026-21619. The same code is vendored into multiple ecosystems: mix_hex_repo/mix_hex_api in Hex (Elixir) and r3_hex_repo/r3_hex_api in rebar3 (Erlang), so patching requires updating each consumer, not just the standalone hex_core package.
Know when Hexpm 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
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:A/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N
Attacker must be positioned as the mirror/API server or MITM (AC:H) and the victim must initiate a fetch (UI:R); no auth is needed by the attacker (PR:N), and impact is only client-side memory exhaustion (A:L, C/I:N).
Primary rating from Vendor (EEF).
CVSS VectorVendor: EEF
DescriptionCVE.org
Improper Handling of Highly Compressed Data (Data Amplification) vulnerability in hexpm hex_core allows an untrusted repository mirror, or a server answering hex_core's API requests, to exhaust the memory of the Erlang VM running hex_core. The same code is vendored in Hex (mix_hex_repo, mix_hex_api) and rebar3 (r3_hex_repo, r3_hex_api).
hex_repo:get_names/1, hex_repo:get_versions/1, hex_repo:get_package/2 and hex_repo:get_policy/2 decompress the registry response with zlib:gunzip/1 and decode the signed envelope before verifying its signature. A mirror doesn't have the repository's private key, but it chooses the compressed bytes, so a small response decompresses into an envelope of any size before the signature check rejects it.
hex_api decodes responses with the application/vnd.hex+erlang content type through hex_safe_binary_to_term:safe_binary_to_term/1, which calls binary_to_term(Binary, [safe]). The safe option prevents atom creation, but it accepts compressed terms and doesn't limit the size of the decoded term, and the check that rejects functions and ports runs after the term has been built. The fix for CVE-2026-21619 added the safe option and that check without bounding the decoded size.
This issue affects rebar3: from 3.9.1 onward; hex: from 2.1.0 before 2.5.2; hex_core: from 0.1.0 before 0.20.0.
Threat Intelligence Overview
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Insufficient session expiration in hexpm. Password reset tokens never expire, enabling persistent account takeover.
Silent dependency checksum bypass in hexpm/hex package manager (versions 0.16.0 through 2.4.1) allows attackers to subst
Improper input sanitization in hexpm's SharedAuthorizationView module allows unauthenticated attackers to inject malicio
Incorrect authorization in the hex.pm OAuth `client_credentials` endpoint allows any API key bearing the `repositories`
Path traversal in the Hex package manager for the Elixir/Erlang (Mix) ecosystem, versions 0.6.0 through 2.5.1, lets a ma
Hex, the package manager used by Elixir and Erlang projects, fails to properly scope its 'release-age cooldown' protecti
An uncontrolled resource consumption vulnerability in the Hex.pm package manager allows authenticated attackers to cause
Hexpm's OAuth implementation fails to enforce read-only API key restrictions during token exchange, allowing an attacker
Integrity-check bypass in the Hex package manager (hexpm hex) allows a compromised or attacker-controlled package mirror
Path traversal in hexpm's Local Storage backend allows unauthenticated attackers to read sensitive files through relativ
Improper TLS server-certificate validation in hex_core (0.1.0 through versions before 0.20.0) lets an attacker who alrea
Improper certificate validation in Hex (the Elixir/Erlang package manager client, versions 0.20.2 through 2.5.1) allows
EUVD-2026-97568
NVD
CVE.org
EPSS
GitHub
Exploit-DB