Skip to main content

Hex EUVDEUVD-2026-97501

| CVE-2026-105280 MEDIUM
Improper Validation of Integrity Check Value (CWE-354)
2026-10-12 EEF
6.9
CVSS 4.0 · Vendor: EEF
View

Attack ChainAIDerived

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

  1. Access
    Control configured HEX_MIRROR_URL mirror
  2. Delivery
    Victim pipes hex.package fetch stdout
  3. Exploit
    Serve altered tarball or tar error body
  4. Execution
    Unverified bytes written to standard output
  5. Impact
    Pipeline extracts attacker-controlled files

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A08:2025 - Software or Data Integrity Failures
ASVS 5.0
V15 - Secure Coding and Architecture Integrity verification
Exploitation Conditions

Exploitation requires BOTH: (1) the victim has configured a non-default package mirror via the HEX_MIRROR_URL environment variable or the mirror_url setting, and that mirror is attacker-controlled or compromised; and (2) the victim invokes mix hex.package fetch PACKAGE VERSION --output - and pipes standard output into a process that unpacks the tar. The vulnerable path is specifically the stdout branch, which writes the bytes from Hex.SCM.fetch/3 (and any tar-formatted HTTP error body or x-hex-message diagnostic) without the inner/outer checksum comparison. Limiting factors that reduce real-world risk: the default registry (repo.hex.pm) and the --output FILE path are NOT affected because checksum verification still applies there; active user interaction running the exact stdout-pipe command is required (UI:A); and only hex versions from 0.20.2 up to but excluding 2.5.2 are affected.

Impact

This is a genuine but conditionally-gated supply-chain integrity flaw, not a drop-everything emergency. The CVSS 4.0 score of 6.9 (Medium) is driven by high integrity impact (VI:H/SI:H) with zero confidentiality or availability impact (VC:N/VA:N), and crucially carries AT:P (a specific attack requirement) and UI:A (active user interaction) - meaning exploitation is not turnkey. No EPSS score was provided, the CVE is not in CISA KEV, and no public exploit was supplied (only vendor patch commits, which are fixes, not weaponized POCs), so exploitation status is 'no public exploit identified at time of analysis.' The realistic risk is bounded by two stacked preconditions: the victim must have deliberately configured a non-default, attacker-controlled or compromised mirror (HEX_MIRROR_URL / mirror_url), AND must use the specific --output - stdout branch piped into an unpacking process. The default Hex configuration (repo.hex.pm) and the normal --output FILE path are NOT affected because checksum verification still runs there. One conflict to flag: the input tag 'Information Disclosure' contradicts the CVSS vector (VC:N, no confidentiality impact) - this is an integrity/supply-chain substitution issue, not a disclosure issue. Net: treat as a Medium-priority patch for Elixir/Erlang shops that run hex in CI pipelines against custom mirrors; lower priority for everyone on the default registry.

Exploit ScenarioDerived

An organization configures a caching package mirror via HEX_MIRROR_URL and a CI pipeline runs mix hex.package fetch somepkg 1.2.3 --output - piped into a tar extractor. A malicious or compromised mirror returns altered tarball bytes - or answers an update-check/registry request with an error body that is itself a tar archive - and Hex writes those unverified bytes to stdout, so the pipeline extracts attacker-controlled files even though the later checksum comparison fails. No public exploit code is known, and the network attack (AV:N) requires the specific stdout-pipe usage pattern (UI:A) and a mirror already in the trust path.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.2% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Oct 12, 2026

Integrity-check bypass in the Hex package manager (hexpm hex) allows a compromised or attacker-controlled package mirror to substitute package contents when a developer runs mix hex.package fetch PACKAGE VERSION --output - and pipes standard output into an unpacker. The stdout code path writes the raw bytes returned by Hex.SCM.fetch/3 without the inner/outer checksum comparison that the default file-output path performs against the signed registry, and Hex's own diagnostics (a failed HTTP response body or an x-hex-message API warning) can likewise land on stdout as a tar archive ahead of any verified tarball. Hex versions from 0.20.2 up to but excluding 2.5.2 are affected; no public exploit code has been identified at time of analysis, and exploitation additionally requires a non-default mirror (HEX_MIRROR_URL or mirror_url) plus the specific stdout-piping command run by an unauthenticated remote attacker's victim, making this a genuine but conditionally gated supply-chain integrity flaw rather than a drop-everything emergency.

RemediationAI

Vendor-released patch: upgrade Hex to 2.5.2, the first release outside the affected "from 0.20.2 before 2.5.2" range, using mix local.hex --force (or mix archive.install hex hex) and confirm the installed version with mix hex.info; the upstream fixes are the commits referenced in the advisory (https://github.com/hexpm/hex/commit/d1f5a085d9d4748e1f7d195e4bc39ebd77c28d9c, https://github.com/hexpm/hex/commit/8a14632ca6ba8a8afd2a3f2098bc267c13e13d93, https://github.com/hexpm/hex/commit/69489f8b74213f03db10169e6e5407e6d5fee512) and the full guidance is at https://github.com/hexpm/hex/security/advisories/GHSA-98jr-23pm-vj7c. Until every developer and CI runner is upgraded, stop using the vulnerable stdout form: fetch to a file with --output FILE (which still performs the inner/outer checksum comparison and will hard-fail on a substituted tarball) and unpack the verified file afterwards, at the cost of writing artifacts to disk that must be cleaned up; never pipe mix hex.package fetch ... --output - directly into tar, an unpacker, or any script that executes extracted content, since that is the only path where verification is skipped. As a compensating control, remove or unset HEX_MIRROR_URL and the mirror_url setting so Hex uses the signed default registry repo.hex.pm, or restrict mirror usage to a mirror on an allowlisted, trusted host reachable only over TLS; the trade-off is that air-gapped or proxied builds that depend on a mirror must either accept the residual risk or front the mirror with artifact-integrity verification. Additionally, do not trust tooling that consumes Hex stdout as data, because Hex may emit HTTP error bodies or x-hex-message diagnostics in that stream; parse stderr or require file-based artifacts instead. Note that the CVSS 4.0 vector records PR:N but UI:A, so exploitation still depends on a victim running the exact stdout-piping command against a compromised mirror, and no public exploit code has been identified at time of analysis.

Affected VersionsENISA

hex 0.20.2 <2.5.2
hex d1f5a085d9d4748e1f7d195e4bc39ebd77c28d9c <*

Affected Packages

euvd hex fix: 2.5.2

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

Hex is the package manager and registry client for the Elixir/Mix ecosystem, distributed to developers as a Mix archive and identified here by CPE cpe:2.3:a:hexpm:hex. Hex tarballs carry two integrity values: an inner checksum computed over the package contents and an outer checksum recorded in the repository's cryptographically signed registry; Hex normally compares both before a fetched tarball is written to disk or unpacked, which is what binds a package to the publisher's signed metadata. CVE-2026-105280 is a CWE-354 (Improper Validation of Integrity Check Value) defect in the mix hex.package fetch task: the --output - branch streams the bytes from Hex.SCM.fetch/3 directly to standard output, and Hex.SCM.fetch/3 does not itself verify freshly downloaded tarballs. The comparison is therefore skipped only on that branch, while --output FILE still fails with a checksum mismatch on altered bytes. A second, related channel exists because Hex prints request diagnostics to stdout: the body of a failed HTTP response from the update check or a registry fetch, and API warnings from the x-hex-message header. A mirror that answers such a request with an error body that is itself a tar archive gets that archive emitted to stdout before the checksum check can fail, so a pipeline that unpacks stdout extracts mirror-supplied files regardless. The upstream fix (commits d1f5a085, 8a14632c, 69489f8b) reworks the fetch task to route stdout output through the registry-prefetch/verification path and to reject combining --output - with --unpack.

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 6.9 MEDIUM
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:A/VC:N/VI:H/VA:N/SC:N/SI:H/SA:N
vuln.today AI 6.1 MEDIUM

Network-served mirror needs no victim privileges (PR:N) but requires a non-default mirror config plus the specific stdout-pipe usage (AC:H, UI:R); integrity-only impact crosses into the downstream pipeline (S:C, I:H, C:N/A:N).

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

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
High
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
High
Subsequent system: Availability
None

DescriptionCVE.org

Improper Validation of Integrity Check Value vulnerability in hexpm hex allows a package mirror to substitute the tarball that mix hex.package fetch PACKAGE VERSION --output - writes to standard output.

Hex compares a fetched tarball's inner and outer checksums with the repository's signed registry before writing it to a file or unpacking it. The standard output branch of mix hex.package fetch writes the bytes returned by Hex.SCM.fetch/3 without that comparison, and Hex.SCM.fetch/3 doesn't verify freshly downloaded tarballs itself. When a mirror configured with HEX_MIRROR_URL or mirror_url serves altered bytes, the command prints them and exits successfully, while the same fetch with --output FILE fails with a checksum mismatch.

Hex also prints diagnostics to standard output while the command runs: the body of a failed HTTP response from the update check or a registry fetch, and API warnings from the x-hex-message header. A mirror that answers one of those requests with an error whose body is a tar archive gets that archive written to standard output ahead of the verified tarball, so a pipeline that unpacks standard output extracts the mirror's files. This happens even when the checksum check then fails, because the archive is already on standard output.

This issue affects hex: from 0.20.2 before 2.5.2.

Threat Intelligence Overview

EPSS Score
0.2%
Top 92% exploitable
Prevalence
Medium
standard Elixir/Erlang package manager, but niche language ecosystem
Data Quality
6 sources
Confidence: High

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 MEDIUM
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.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
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact· derived
Medium

Priority Score

34
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +34
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-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

CVE-2026-96596 MEDIUM
5.9 Oct 14

Denial of service in Erlang OTP's stdlib erl_tar module (OTP 29.0 before 29.1.2, stdlib 8.0 before 8.1.1) allows an atta

Vendor StatusVendor

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