Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessPublish release with '../../target' app label
-
DeliveryVictim project depends on release directly or transitively
-
ExploitDeveloper runs mix deps.get or deps.update
-
ExecutionHex rm_rf! and unpacks outside deps/
-
ImpactTarget directory deleted and attacker files planted
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V5 - File Handling Path canonicalization, traversal prevention
MITRE ATT&CK
2 techniques across 2 tactics: Discovery, Collection The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires that the victim's Mix project depend - directly or transitively - on a Hex package release that the attacker controls or has compromised, and whose requirement entry carries a malicious OTP application label (e.g., '../../target'); hex.pm only length-checks this label, so traversal sequences pass. A developer must then actively run mix deps.get or mix deps.update, which triggers File.rm_rf! on the resolved out-of-tree path and extraction of the package there before any dependency code compiles. Affects hex versions from 0.6.0 up to (not including) 2.5.2. Limiting factors: the attacker must get a malicious release into a registry/repository the victim consumes AND the victim must choose to depend on it, and exploitation only fires on explicit developer dependency-fetch actions (UI required) - there is no server-side or unauthenticated-victim trigger. No authentication is required on the victim side; impact lands on the developer/CI host performing the fetch. |
| Impact | This is a supply-chain path traversal in Hex, the package manager for the Elixir/Erlang (Mix) ecosystem, rated CVSS 7.5 under the vendor's 4.0 vector (AV:N/AC:L/AT:P/PR:N/UI:A/VC:H/VI:H/VA:H). The network attack vector is real in the sense that the malicious payload travels through the public/private Hex registry, but exploitation is gated by two significant conditions the raw score partially captures: AT:P (the victim must depend, directly or transitively, on a release the attacker controls) and UI:A (a developer must actively run mix deps.get / mix deps.update). It is therefore not a drive-by remote exploit against a listening service - it is a build-time/developer-workstation attack requiring victim action and a dependency relationship. No EPSS score, CISA KEV listing, or public POC was provided in the input, so exploitation status is 'no public exploit identified at time of analysis'; absence of these signals is not evidence of safety, but it argues against widespread opportunistic exploitation and toward targeted, trust-abuse scenarios. The vendor's VC:H (confidentiality high) rating is debatable - the described primitive is arbitrary directory deletion plus arbitrary file extraction (integrity/availability), not information disclosure - so this signal should be verified rather than taken as confirmed. Overall this is a genuine, patch-worthy supply-chain integrity flaw for any Elixir shop, but its real-world priority is moderated by the dependency and user-interaction prerequisites rather than being an internet-facing critical. |
| Exploit ScenarioDerived | A malicious or compromised package publisher pushes a Hex release whose dependency requirement carries a crafted OTP application label such as '../../target'. When a developer whose project depends on that release (directly or transitively) runs mix deps.get, Hex trusts the registry-supplied label, resolves the checkout path to deps/../../target, runs File.rm_rf! on it, and unpacks the attacker's package files into that location before any code is compiled. No public POC was provided, but the primitive enables deletion of arbitrary directories and planting of attacker-controlled files on the developer's machine. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 12, 2026
Path traversal in the Hex package manager for the Elixir/Erlang (Mix) ecosystem, versions 0.6.0 through 2.5.1, lets a malicious package publisher delete a directory outside the project's deps/ folder and write the package's files into that location when a developer runs mix deps.get or mix deps.update. The attacker abuses a dependency's OTP application label, which Hex copies from the signed registry without validation and Mix joins onto deps/ as the checkout path, so a crafted label such as '../../target' escapes the project tree through File.rm_rf!/1 before any dependency code is compiled. Exploitation requires the victim project to depend directly or transitively on the attacker-controlled release and the developer to explicitly fetch dependencies, so no victim-side authentication is needed (PR:N) but user interaction is required; no public exploit identified at time of analysis, and the vendor rates it CVSS 7.5.
RemediationAI
Upgrade Hex to 2.5.2 or later - vendor-released patched version 2.5.2 is the authoritative fix, and its upstream changes also migrate the lockfile format, so review regenerated mix.lock entries after upgrading; details are in GHSA-2vjj-c5hr-6xc3, https://cna.erlef.org/cves/CVE-2026-96612.html and the patch commits 1b3e2ae8f0dd7273a2c2625b9e50b6c67c8568fb and 72279a8e2004b32b20d8767ff010c117193dd02c. Until upgrading, inspect dependency metadata and mix.lock for application labels or dependency names containing path separators or '..' and refuse to fetch any release carrying them, and only pull packages from a registry you trust (trade-off: switching to a curated private mirror or pinning to vetted releases reduces exposure but forgoes convenient access to new public packages). Because the destructive File.rm_rf!/1 executes during dependency resolution and can target any path reachable as deps/<label> - including sibling directories to the project root - run mix deps.get in a disposable container or ephemeral CI workspace that mounts only a scratch copy of the repository, and keep the project and adjacent directories under version control or on snapshotted storage so an unintended deletion is recoverable; note these mitigations limit blast radius rather than prevent the traversal itself, and sandboxing offers no protection if the project directory is bind-mounted from the host.
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 for Erlang/Elixir and is consumed through Mix, which fetches dependencies from the hex.pm registry or a mirror/private repository. The flaw is CWE-22 path traversal caused by trust placed in metadata: a package release's requirements carry an OTP application label that Hex reads from the repository's signed registry and uses directly as the dependency's application name in Hex.RemoteConverger.deps/2 and Hex.Mix.to_lock/1. Mix derives the checkout directory as deps/<app>, and Hex.SCM.update/1 calls File.rm_rf!/1 on that path and unpacks the package into it, so a label containing traversal sequences resolves to an arbitrary directory relative to the project root; hex.pm only validated the label's length, so values like '../../target' passed. The upstream fix (commits 380f87054e1bc08ee13d2b5311bc01f98dad2fc6, 1b3e2ae8f0dd7273a2c2625b9e50b6c67c8568fb, 72279a8e2004b32b20d8767ff010c117193dd02c) separates the package name from the OTP application label throughout the registry reader, resolver and lockfile format (requirement tuples gain a distinct name/app split and the lock entry becomes {:hex, name, version}), which removes the unchecked mapping from publisher-supplied label to filesystem path. The vendor's CVSS 4.0 vector (AV:N/AC:L/AT:P/PR:N/UI:A/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N) and the independent CVSS 3.1 assessment (AV:N/AC:H/PR:N/UI:R/S:U/C:N/I:H/A:H) agree on unauthenticated network reach and high integrity/availability impact confined to the developer or CI host performing the fetch, not to the registry or to other consumers; the AT:P and AC:H ratings reflect the prerequisite of publishing/adopting a malicious release. Affected product is catalogued as cpe:2.3:a:hexpm:hex:*:*:*:*:*:*:*:*.
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:H/VI:H/VA:H/SC:N/SI:N/SA:N
Payload traverses the registry (AV:N) but needs the victim to depend on the attacker release and fetch it, so AC:H and UI:R; arbitrary file write/deletion gives I:H/A:H with no disclosure (C:N).
Primary rating from Vendor (EEF).
CVSS VectorVendor: EEF
DescriptionCVE.org
Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal') vulnerability in hexpm hex allows a malicious package publisher to delete a directory outside the project's deps directory and extract package files into it when a developer fetches dependencies.
A package release's requirements carry an app label that names the dependency's OTP application. Hex takes this label from the repository's signed registry and uses it as the dependency's application name without validating it (Hex.RemoteConverger.deps/2, Hex.Mix.to_lock/1). Mix derives the dependency's checkout directory as deps/<app>, and Hex.SCM.update/1 runs File.rm_rf!/1 on that directory and unpacks the package into it. hex.pm only checks the label's length, so a publisher can set it to a value such as ../../target. When a project depends on such a release directly or transitively, mix deps.get or mix deps.update deletes the directory the label resolves to and writes the labelled package's files there. This happens before any dependency code is compiled.
This issue affects hex: from 0.6.0 before 2.5.2.
Executive ViewAI
Organizations using the Elixir/Erlang Mix toolchain with Hex versions 0.6.0 through 2.5.1 face a high-severity supply-chain risk that could allow a hostile dependency to damage files outside the intended dependencies area during routine dependency retrieval. This affects developers and CI/CD pipelines, where an incident could cause lost work, disrupted builds, or unauthorized changes to project or system files. No public exploit identified at time of analysis, but leadership should prioritize patching because the vulnerability can compromise software delivery integrity and operational continuity.
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
Path traversal exploits occur when applications use user-controlled input to construct file system paths without proper validation.
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`
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
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-97508
NVD
CVE.org
EPSS
GitHub
Exploit-DB