Description
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.
Published: 2026-10-12
Score: 7.1 High
EPSS: < 1% Very Low
KEV: No
Impact: Bypasses release‑age cooldown for newly published releases, permitting malicious or untested releases to be adopted immediately.
Action: Immediate Patch
AI Analysis

Impact

This vulnerability is a protection mechanism failure (CWE‑693) and a bypass of security enforcement (CWE‑807) that allows the package owner or an attacker who has compromised that account to override the release‑age cooldown. When a locked release is retired or marked with a security advisory, Hex RemoteConverger lifts the cooldown for every version of that package and any package it depends on. Consequently, a malicious release can be published retired, and the next run of mix deps.update will pick the new release regardless of how old it is, even though the cooldown is still configured. The bypass also applies to packages with the same name in other repositories because the check uses only the package name. Packages protected by an organization dependency policy are unaffected.

Affected Systems

This issue impacts the Hex package manager from hexpm, affecting all releases from version 2.5.0 up to, but excluding, 2.5.2.

Risk and Exploitability

The CVSS score is 7.1, indicating a high‑level risk that a malicious actor could force the adoption of untested releases. The EPSS score is < 1%, and the vulnerability is not listed in CISA’s KEV catalog. The exploit requires the attacker to publish or retire a package release, so an attacker must have valid credentials or have compromised the package owner’s account. Once the bypass is triggered, any mix deps.update command will ignore the release‑age cooldown, allowing the package maintainers or developers to install newer releases immediately. The impact is confined to projects that use Hex for dependency resolution and does not directly expose a remote network vulnerability.

Generated by OpenCVE AI on October 17, 2026 at 07:43 UTC.

Remediation

Vendor Solution

Upgrade Hex to 2.5.2 or later, for example with mix local.hex. A retired locked release then no longer lifts the release-age cooldown for its package. A locked release with a security advisory still lifts it for its package and the direct dependencies of the locked release, only in the repository the package is locked from.


Vendor Workaround

Enforce the cooldown through an organization dependency policy instead of the local cooldown setting, or run mix hex.audit before mix deps.update and don't update a package whose locked release was retired until its replacement has been reviewed.


OpenCVE Recommended Actions

  • Update Hex to version 2.5.2 or later (for example, run `mix local.hex --force`).
  • Enforce an organization dependency policy so that the release‑age cooldown remains active even when a locked release is retired.
  • Before running `mix deps.update`, execute `mix hex.audit` and avoid updating a package whose locked release has been retired until its replacement has been reviewed.

Generated by OpenCVE AI on October 17, 2026 at 07:43 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Fri, 16 Oct 2026 19:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'no', 'Exploitation': 'none', 'Technical Impact': 'total'}, 'version': '2.0.3'}


Fri, 16 Oct 2026 00:30:00 +0000

Type Values Removed Values Added
Weaknesses CWE-807
References
Metrics threat_severity

None

cvssV3_1

{'score': 6.8, 'vector': 'CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:U/C:H/I:H/A:H'}

threat_severity

Moderate


Mon, 12 Oct 2026 15:45:00 +0000

Type Values Removed Values Added
Description 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.
Title Hex release-age cooldown is lifted package-wide when the locked release is retired
First Time appeared Hexpm
Hexpm hex
Weaknesses CWE-693
CPEs cpe:2.3:a:hexpm:hex:*:*:*:*:*:*:*:*
Vendors & Products Hexpm
Hexpm hex
References
Metrics cvssV4_0

{'score': 7.1, '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'}


cve-icon MITRE

Status: PUBLISHED

Assigner: EEF

Published:

Updated: 2026-10-16T17:38:34.235Z

Reserved: 2026-10-07T22:15:01.885Z

Link: CVE-2026-105668

cve-icon Vulnrichment

Updated: 2026-10-16T17:38:21.226Z

cve-icon NVD

Status : Deferred

Published: 2026-10-12T16:17:02.943

Modified: 2026-10-16T18:17:23.523

Link: CVE-2026-105668

cve-icon Redhat

Severity : Moderate

Publid Date: 2026-10-12T15:31:58Z

Links: CVE-2026-105668 - Bugzilla

cve-icon OpenCVE Enrichment

Updated: 2026-10-17T07:45:05Z

Weaknesses
  • CWE-693

    Protection Mechanism Failure

  • CWE-807

    Reliance on Untrusted Inputs in a Security Decision