Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessControl configured HEX_MIRROR_URL mirror
-
DeliveryVictim pipes hex.package fetch stdout
-
ExploitServe altered tarball or tar error body
-
ExecutionUnverified bytes written to standard output
-
ImpactPipeline 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 |
| 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 |
| Exploit ScenarioDerived | An organization configures a caching package mirror via HEX_MIRROR_URL and a CI pipeline runs |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – 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
Affected Packages
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
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
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).
Primary rating from Vendor (EEF).
CVSS VectorVendor: EEF
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
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
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
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
EUVD-2026-97501
NVD
CVE.org
EPSS
GitHub
Exploit-DB