Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain package owner account access
-
DeliveryPublish malicious new release
-
ExploitRetire currently-locked release to trigger bypass
-
ExecutionVictim runs mix deps.update
-
ImpactMalicious release installed in build
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V15 - Secure Coding and Architecture Protection mechanism completeness
|
| Exploitation Conditions | Exploitation requires that the attacker already hold package-owner permission on the target package (or have taken over an owner's account) - this is not an unauthenticated flaw. It further requires that (1) a release of that package be locked in the victim's mix.lock, (2) local cooldown be enabled via the cooldown config / HEX_COOLDOWN environment variable, (3) the attacker publish a malicious release and then retire the currently-locked release (or that release carry a security advisory), triggering build_cooldown_bypass/3 and unsafe_lock_bypass/1, and (4) the victim run a mix deps.update that unlocks the package. Limiting factors that reduce real-world risk: owner-level privilege is mandatory, victim action (deps.update) is required, only Hex versions 2.5.0 up to (not including) 2.5.2 are affected, and cooldown configured through an organization dependency policy is NOT affected. A secondary condition broadens impact: because Hex.Registry.Cooldown.versions/2 checks the bypass by package name alone, the bypass also lifts cooldown for same-named packages in other repositories. |
| Impact | This is a real but conditional supply-chain weakness (CWE-693 Protection Mechanism Failure) rather than a broadly dangerous remote flaw. The vendor CVSS 4.0 vector (CVSS:4.0/AV:N/AC:L/AT:P/PR:H/UI:A/VC:H/VI:H/VA:H) scores 7.1 but is heavily gated: PR:H means the attacker must already be a package owner (or have hijacked an owner's account), AT:P flags a required precondition (a release of that package must be locked in the victim's mix.lock and then retired/advisoried), and UI:A means a victim must actively run mix deps.update. No EPSS score was provided, the CVE is not listed in CISA KEV, and no public exploit code was supplied - so there is no public exploit identified at time of analysis. The high VC/VI/VA (full code-execution-grade compromise of the consuming build) is what pushes severity up, but the prerequisite of owner-level privilege plus victim action makes this a targeted, not opportunistic, threat. One signal worth noting: the cross-repository aspect (Hex.Registry.Cooldown.versions/2 keys the bypass by package name alone, so the bypass also lifts cooldown for same-named packages in other repositories) meaningfully widens blast radius beyond the single malicious package. Net: priority for organizations relying on Hex cooldown as a defense-in-depth control against compromised maintainers, but lower urgency for those using organization dependency policy cooldown, which is explicitly unaffected. |
| Exploit ScenarioDerived | An attacker who controls a package (legitimate owner or via account takeover) publishes a malicious new release, then retires the version currently locked in victims' mix.lock - retiring needs the same owner permission as publishing. The retirement triggers Hex's cooldown bypass, so when a victim runs mix deps.update the resolver selects the brand-new malicious release despite it being younger than the configured cooldown window, defeating the age delay meant to give time to detect a hostile upload. No public exploit code was supplied. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 12, 2026
Hex, the package manager used by Elixir and Erlang projects, fails to properly scope its 'release-age cooldown' protection in versions 2.5.0 through 2.5.1, allowing an authenticated package owner to slip a freshly published, malicious release past the cooldown. The attacker must already hold package-owner permission on the target package, retire (or rely on a security advisory for) the release locked in the victim's mix.lock, and then wait for the victim to run mix deps.update - at which point Hex.RemoteConverger.build_cooldown_bypass/3 and unsafe_lock_bypass/1 lift the cooldown for every version of that package and its dependencies, so the new release is selected regardless of age. A secondary scoping defect causes the bypass to be keyed on package name alone, extending it to identically named packages in other repositories; cooldown configured through an organization dependency policy is not affected. This is a conditional supply-chain weakness rather than a broadly dangerous remote flaw, and no public exploit or in-the-wild activity has been identified at time of analysis. Patches are available from the vendor in Hex 2.5.2.
RemediationAI
Upgrade the Hex client to 2.5.2 or later - the vendor-released fix for the 2.5.0-to-before-2.5.2 range - using your normal Hex update mechanism (mix archive.install hex, or the equivalent self-update path), then re-run mix deps.get / mix deps.update to resolve against corrected behavior. The patched code lives in commits b4e665d46be8a5f81e8cbbe4c3a67058a19cf133 (primary), eed2bdf85320ae9e244629511c03f5f3f8c5d0b5, and 1b6fddfeadd98ed26a143f60356efade0494e2ae, with the authoritative advisory at https://github.com/hexpm/hex/security/advisories/GHSA-pqhp-5x9x-69h7. As a compensating control where immediate upgrade is not possible, move cooldown enforcement from the local cooldown config / HEX_COOLDOWN setting into an organization dependency policy, which the advisory confirms is not affected by this bypass; the trade-off is that org-policy cooldown does not protect projects outside that organization's policy scope. Projects that cannot upgrade and do not need cooldown at all can set the cooldown value to "0" (or unset HEX_COOLDOWN) to disable the mechanism entirely, which removes the bypass vector but also removes the supply-chain delay protection - a net loss for most teams and therefore a last resort. Treat mix.lock as a reviewable artifact: require human review of any dependency bump that follows a package retirement or a security advisory on a pinned release, since that retirement event is precisely the trigger for the vulnerable bypass. The patched version also adds a cooldown_exclude_repos configuration value that lets operators scope cooldown exemptions by repository, which limits the cross-repository name-collision exposure described in the advisory.
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 Elixir/Erlang package manager and registry client; its cooldown feature (configured via the cooldown setting or the HEX_COOLDOWN environment variable) withholds versions younger than a configured age during dependency resolution, functioning as a supply-chain defense that gives the community time to detect a malicious or broken release before it is adopted. The defect is classified as CWE-693 (Protection Mechanism Failure) and its root cause is incorrect scoping of the cooldown bypass: when a release locked in mix.lock is retired or carries a security advisory, the functions Hex.RemoteConverger.build_cooldown_bypass/3 and Hex.RemoteConverger.unsafe_lock_bypass/1 deliberately lift the cooldown so that mix deps.update can move the project off the unsafe release - but they lift it for every version of that package and of every package the locked release depends on, rather than only for the remediation path. Because retiring a release requires the same package-owner permission as publishing one, an attacker who already controls the package can publish a malicious release and then retire the currently locked release, converting the intended escape hatch into an adoption path for their new release. The scoping bug is compounded by Hex.Registry.Cooldown.versions/2, which evaluates the bypass by package name alone and therefore also suppresses cooldown for same-named packages in other repositories. The upstream fix (commit b4e665d and companion commits eed2bdf and 1b6fddf) introduces a consolidated Hex.Cooldown module with duration parsing for the cooldown config, a cooldown_exclude_repos setting (project/global config or comma-separated env var) that allows repo-scoped exemption, cutoff construction, eligibility checks against a release's published_at timestamp, and the eligible_on/format_summary reporting helpers. Per the CNA-assigned CVSS 4.0 vector (CVSS:4.0/AV:N/AC:L/AT:P/PR:H/UI:A/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N), the flaw is network-reachable but requires prior package-owner privileges (PR:H) and user interaction (UI:A); the independent assessment concurs on privilege and interaction requirements while rating complexity higher (CVSS:3.1/AV:N/AC:H/PR:H/UI:R/S:U/C:H/I:H/A:H).
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:H/UI:A/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
Owner permission required (PR:H); a specific locked-then-retired precondition plus victim deps.update make AC:H and UI:R; selecting a malicious release yields full C/I/A:H in the victim build.
Primary rating from Vendor (EEF).
CVSS VectorVendor: EEF
DescriptionCVE.org
Protection Mechanism Failure vulnerability in hexpm hex allows the owner of a package, or an attacker who has taken over the owner's account, to get a newly published release past the release-age cooldown.
The cooldown (cooldown config, HEX_COOLDOWN) withholds versions younger than the configured age during dependency resolution. When the release of a package locked in mix.lock is retired or has a security advisory, Hex.RemoteConverger.build_cooldown_bypass/3 and Hex.RemoteConverger.unsafe_lock_bypass/1 lift the cooldown for every version of that package and of every package the locked release depends on, so that mix deps.update can move off the unsafe release. Retiring a release needs the same package owner permission as publishing one. An attacker who publishes a malicious release can retire the currently locked release, and the next mix deps.update that unlocks the package selects the new release regardless of its age. Hex.Registry.Cooldown.versions/2 checks the bypass by package name alone, so the bypass also covers packages with the same name in other repositories. Cooldown configured through an organization dependency policy is not affected.
This issue affects hex: from 2.5.0 before 2.5.2.
Executive ViewAI
Hex, the package manager for Elixir and Erlang projects, contains a supply-chain integrity weakness in versions 2.5.0 and 2.5.1 that could allow a package owner to bypass release-age cooldown protections and introduce a malicious dependency into downstream builds. Organizations using these Hex versions in CI/CD or developer workflows face potential unauthorized code execution, data compromise, and erosion of customer trust if a compromised dependency is adopted. No public exploit identified at time of analysis, but leadership should prioritize patching because dependency compromise can affect product integrity and regulatory obligations.
Apply vendor patch.
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
Attack Technique
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
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
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
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-97503
NVD
CVE.org
EPSS
GitHub
Exploit-DB