Skip to main content

hex_core EUVDEUVD-2026-97568

| CVE-2026-105274 LOW
Improper Handling of Highly Compressed Data (Data Amplification) (CWE-409)
2026-10-12 EEF
2.1
CVSS 4.0 · Vendor: EEF
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Serve crafted compressed hex response as mirror
  2. Exploit
    Client gunzips or binary_to_term's payload
  3. Execution
    Decoded term inflates before signature check
  4. Impact
    Erlang 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.

Monitor Track and reassess. Why: LOW severity (CVSS 0.1-3.9).
Patch available 0.4% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

hex_core 0.1.0 <0.20.0
rebar3 209c02ec57c2cc3207ee0174c3af3675b8dc8f79 <*
rebar3 3.9.1 <*
hex 2.1.0 <2.5.2
hex_core fbb6d9de472e5edb8d6fb6b32a91cb266137892e <ebe25d110717f6a3addba5232cd4a7dc1c76b628
hex 671f695ac548ed01f5828c2a739ecaa942b21007 <d8b60eee97abb119d525306f048969a217d793a5

Affected Packages

euvd hex fix: 2.5.2
euvd hex_core fix: 0.20.0

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

Vendor (EEF) PRIMARY 2.1 LOW
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
vuln.today AI 3.1 LOW

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).

3.1 AV:N/AC:H/PR:N/UI:R/S:U/C:N/I:N/A:L
4.0 AV:N/AC:L/AT:P/PR:N/UI:A/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N

Primary rating from Vendor (EEF).

CVSS VectorVendor: EEF

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
Present
Privileges Required
None
User Interaction
Active
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
None
Vulnerable system: Availability
Low
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

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

EPSS Score
0.4%
Top 65% exploitable
Prevalence
Medium
standard package/build tooling for Elixir and Erlang, limited to that ecosystem
Social Media
1
Sightings
Data Quality
5 sources
Confidence: Medium

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.

SignalValue
Severity LOW
CISA KEV No
Public POC No
EPSS 0.4%
Patch available Yes
Active threat No
Deciding rule
LOW severity (CVSS 0.1-3.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Defer
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact· derived
Low

Priority Score

10
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +10
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

More in Hexpm

View all
CVE-2026-21622 CRITICAL
9.5 Mar 05

Insufficient session expiration in hexpm. Password reset tokens never expire, enabling persistent account takeover.

CVE-2026-32148 HIGH
8.9 Apr 30

Silent dependency checksum bypass in hexpm/hex package manager (versions 0.16.0 through 2.4.1) allows attackers to subst

CVE-2026-21618 HIGH
8.5 Jan 19

Improper input sanitization in hexpm's SharedAuthorizationView module allows unauthenticated attackers to inject malicio

CVE-2026-75542 HIGH
8.3 Aug 24

Incorrect authorization in the hex.pm OAuth `client_credentials` endpoint allows any API key bearing the `repositories`

CVE-2026-96612 HIGH
7.5 Oct 12

Path traversal in the Hex package manager for the Elixir/Erlang (Mix) ecosystem, versions 0.6.0 through 2.5.1, lets a ma

CVE-2026-105668 HIGH
7.1 Oct 12

Hex, the package manager used by Elixir and Erlang projects, fails to properly scope its 'release-age cooldown' protecti

CVE-2026-23940 HIGH
7.1 Mar 13

An uncontrolled resource consumption vulnerability in the Hex.pm package manager allows authenticated attackers to cause

CVE-2026-21621 HIGH
7.0 Mar 05

Hexpm's OAuth implementation fails to enforce read-only API key restrictions during token exchange, allowing an attacker

CVE-2026-105280 MEDIUM
6.9 Oct 12

Integrity-check bypass in the Hex package manager (hexpm hex) allows a compromised or attacker-controlled package mirror

CVE-2026-23939 MEDIUM
6.9 Feb 26

Path traversal in hexpm's Local Storage backend allows unauthenticated attackers to read sensitive files through relativ

CVE-2026-103502 MEDIUM
5.9 Oct 12

Improper TLS server-certificate validation in hex_core (0.1.0 through versions before 0.20.0) lets an attacker who alrea

CVE-2026-103503 MEDIUM
5.9 Oct 12

Improper certificate validation in Hex (the Elixir/Erlang package manager client, versions 0.20.2 through 2.5.1) allows

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy