MEDIUM 5.5

CVE-2026-54557: mise HTTP Backend Symlink Path Traversal Vulnerability

mise is a popular tool for managing development dependencies like Node.js, Python, CMake, and Terraform across projects. A vulnerability in versions before 2026.6.1 allows an attacker to abuse the HTTP backend's symlink creation logic to place executable files or symlinks outside the intended mise installation directory. By crafting a malicious .tool-versions file in a repository, an attacker can trick mise into creating symlinks at arbitrary filesystem locations. If an attacker places a symlink in a directory that appears in a developer's PATH environment variable before legitimate tools, this could lead to execution of attacker-controlled code when developers run common commands.

Source data · NVD / CISA · public domain

CVSS
3.1 · 5.5 MEDIUM · CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:N/I:H/A:N
Weaknesses (CWE)
CWE-22
Affected products
0 configuration(s)
Published / Modified
2026-06-26 / 2026-06-26

NVD description (verbatim)

mise manages dev tools like node, python, cmake, and terraform. Prior to 2026.6.1, the mise HTTP backend builds its install symlink destination from the raw resolved version string for non-latest versions. Normal tool install paths use the sanitized version pathname, but the HTTP backend's symlink path uses the raw value. On Unix-like systems, if that version is an absolute path, PathBuf::join discards the intended mise installs root. A repository-controlled .tool-versions file can therefore make mise install create a symlink outside the mise install tree. With bin_path, the same issue can place an executable symlink under an attacker-selected absolute prefix, such as a developer-tool prefix that is later added to PATH. This vulnerability is fixed in 2026.6.1.

2 reference(s) · View on NVD →

SEC.co analysis · AI-assisted, reviewed against source

Technical summary

The vulnerability stems from how mise constructs symlink destinations when resolving tool versions via its HTTP backend. For standard tool installations, mise sanitizes version strings before creating filesystem paths. However, the HTTP backend bypasses this sanitization for non-latest versions, using the raw resolved version string directly. On Unix-like systems, when this version string is itself an absolute path, the PathBuf::join operation in Rust discards the intended installation root, allowing symlinks to be created at arbitrary absolute paths. The same path-traversal logic applies to bin_path construction, enabling placement of executable symlinks under attacker-controlled directory prefixes. An attacker controlling a repository's .tool-versions file can exploit this to create symlinks in locations like /usr/local/bin or other directories in a developer's PATH.

Business impact

Development teams using mise to manage tool versions face supply-chain risk if they clone or pull repositories containing malicious .tool-versions files. Attackers can silently inject symlinks pointing to attacker-controlled binaries into system directories, potentially compromising developer workstations. This is particularly dangerous in CI/CD environments where scripts automatically parse .tool-versions without user review. A compromised developer machine can serve as a pivot point for lateral movement or theft of credentials, source code, and secrets. The attack requires no special privileges and succeeds through normal mise operation triggered by repository content.

Affected systems

All versions of mise prior to 2026.6.1 are vulnerable. The issue affects only the HTTP backend, meaning users relying on alternative backends (such as GitHub releases or other non-HTTP sources) may have reduced exposure depending on their configuration. The vulnerability is exploitable on Unix-like systems (Linux, macOS, BSD) where absolute path handling in Rust's PathBuf differs from Windows behavior. Windows users are not affected due to different path-joining semantics.

Exploitability

Exploitability is straightforward and requires minimal attacker effort. An attacker needs only to control or modify a .tool-versions file in a repository that developers will clone or pull. No user interaction beyond normal development workflow (cloning a repo and running mise) is required. The CVSS score of 5.5 (Medium) reflects the local attack surface and user interaction requirement, but underscores that a malicious repository or compromised repository can reliably exploit this. The attack is reliable and deterministic once a .tool-versions file is placed in a target repository.

Remediation

Upgrade mise to version 2026.6.1 or later, which sanitizes version strings consistently across all code paths including the HTTP backend. No workarounds exist for earlier versions short of disabling the HTTP backend or manually auditing all .tool-versions files before running mise. Organizations should treat this as a priority patch given the supply-chain nature of the vulnerability and its ease of exploitation.

Patch guidance

Apply mise version 2026.6.1 or later across all development machines and CI/CD pipelines. Verify the upgrade by checking `mise --version` and testing tool resolution against a known .tool-versions file. If your organization uses a package manager (Homebrew, apt, etc.), confirm the packaged version includes the fix. For organizations with custom mise builds or distributions, verify patches are included in the build process. After patching, no additional configuration changes are required.

Detection guidance

Monitor for unexpected symlinks appearing in system directories (particularly those in PATH such as /usr/local/bin, ~/.cargo/bin, or custom tool prefixes) that point outside the mise installation directory (typically ~/.mise or similar). Inspect .tool-versions files in repositories for version strings that resemble absolute paths or unusual characters. Log mise version resolution and symlink creation events if available in your environment. On developer machines, audit recent symlink creation using `find ~/.mise -type l -mtime -7` to identify recently modified symlinks, and cross-reference against known tool versions. Validate that symlinks created by mise remain within the expected installation root.

Why prioritize this

While the CVSS score is Medium (5.5), the practical risk is elevated due to the supply-chain attack vector and the ubiquity of mise in modern development environments. A single compromised or malicious repository can affect all developers who clone it. The ease of exploitation and the potential for code execution via PATH injection make this a high-priority patch despite the medium severity rating. Teams should prioritize this alongside critical patches due to the real-world attack scenario.

Risk score, explained

The CVSS 3.1 score of 5.5 (Medium) is assigned because the attack requires local access (AV:L), has low attack complexity (AC:L), requires no privileges (PR:N), but does require user interaction—specifically, a developer cloning a malicious repository and running mise (UI:R). The impact is integrity-focused (I:H) with no confidentiality or availability impact. The score accurately reflects the standalone severity of the flaw but may underrepresent organizational risk in development environments where repository cloning is routine and trusted.

Frequently asked questions

Does this affect my organization if we only use mise for local development and don't share repositories externally?

If your repositories are private and access is restricted, the risk is lower but not eliminated. Insider threats, compromised credentials, or authorized users with malicious intent could still exploit this. Additionally, many development teams pull in third-party repositories or dependencies—for example, cloning open-source projects or internal monorepo dependencies. Any of those could be compromised or malicious, triggering the vulnerability.

Are Windows users affected?

No. Windows uses different path-joining semantics than Unix-like systems. The vulnerability is specific to Linux, macOS, and BSD where absolute path handling in Rust's PathBuf causes the installation root to be discarded. Windows developers are not at risk from this particular flaw, though they should remain current on patches for other reasons.

What happens if I upgrade mise but don't audit or re-run tool resolution?

Upgrading mise prevents new malicious .tool-versions files from creating out-of-bounds symlinks going forward. However, any symlinks created by the vulnerable version will remain on disk and could still pose a risk. After upgrading, inspect and remove any suspicious symlinks in system directories, and consider re-cloning critical repositories to ensure clean state.

Can I detect if this vulnerability has been exploited on my machine?

Yes. Look for symlinks in your PATH directories (especially /usr/local/bin, ~/.cargo/bin, or similar) that point outside the mise installation directory. Use `ls -la /path/to/suspicious/symlink` to check the target. Additionally, review recent git history and .tool-versions changes in your repositories for unusual version strings that look like absolute paths (e.g., anything starting with / or containing multiple slashes).

This analysis is provided for informational purposes and is based on publicly available vulnerability data as of the publication date. No exploit code or weaponized proof-of-concept is included. Organizations should validate all information against official vendor advisories and their own security assessments before making remediation decisions. Patch version numbers and affected software details should be confirmed against the official mise project and vendor documentation. Security postures vary by organization; consult your security team for guidance tailored to your environment. Source: NVD (public-domain), retrieved 2026-08-05. Analysis generated by SEC.co (claude-haiku-4-5).