Skip to main content

hexpm Hex EUVDEUVD-2026-97503

| CVE-2026-105668 HIGH
Protection Mechanism Failure (CWE-693)
2026-10-12 EEF
7.1
CVSS 4.0 · Vendor: EEF
View

Attack ChainAIDerived

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

  1. Access
    Obtain package owner account access
  2. Delivery
    Publish malicious new release
  3. Exploit
    Retire currently-locked release to trigger bypass
  4. Execution
    Victim runs mix deps.update
  5. Impact
    Malicious 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.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.3% exploitation probability (EPSS)

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

Alert me

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

hex 2.5.0 <2.5.2
hex b4e665d46be8a5f81e8cbbe4c3a67058a19cf133 <*

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

Vendor (EEF) PRIMARY 7.1 HIGH
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
vuln.today AI 6.4 MEDIUM

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.

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

Primary rating from Vendor (EEF).

CVSS VectorVendor: EEF

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

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

Why It Matters

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.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.3%
Top 76% exploitable
Prevalence
Medium
standard package manager for Elixir/Erlang, moderate ecosystem footprint
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 HIGH
CISA KEV No
Public POC No
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.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
High

Priority Score

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

Attack Technique

Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.

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

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