7.8

CVE-2026-44471: gitoxidelabs gitoxide Link Following

CVSS: 7.8v3.1HighAnalyzed
AliasesUBUNTU-CVE-2026-44471DEBIAN-CVE-2026-44471CGA-5j6m-8rh9-9h75
Published 13-05-2026Last modified 14-05-2026

Vulnerability summary

CVE-2026-44471 is a high (CVSS 7.8) Link Following vulnerability in gitoxidelabs gitoxide. EPSS estimates a 0.21% chance of exploitation in the next 30 days, higher than 10% of scored vulnerabilities. 1 public exploit is recorded.

Overall risk
41/100
0100
Medium · default modelHow is this calculated?
CVSS score
7.8/10
010
High · v3.1 (CVE.org)
EPSS score
0.21%
0%100%
Low · -0.04 pp in 30 days
KEVNot listedIn no KEV catalog
RansomwareNone recordedNo known use recorded
Public exploits1github

Advisory lineage

Upstream 0 · Downstream 0 · Related 2

Timeline

  1. 13-05-2026
    PublishedVulnerability first disclosed.
  2. 14-05-2026
    Last modifiedVulnerability information updated.

Description

gitoxide is an implementation of git written in Rust. Prior to 0.21.1, a malicious tree can be constructed that will, when checked out with gitoxide, permit writing an attacker-controlled symlink into any existing directory the user has write access to. During checkout, all symlink index entries are deferred and created after regular files using a single shared gix_worktree::Stack. Internally, this uses a gix_fs::Stack. gix_fs::Stack::make_relative_path_current() caches validated path prefixes: when the previously-processed leaf component exactly matches the leading component(s) of the next path, the leaf-to-directory transition at gix-fs/src/stack.rs invokes only delegate.push_directory(), never delegate.push(). In gix_worktree::stack::delegate::StackDelegate, when the state member is State::CreateDirectoryAndAttributesStack, Attributes::push_directory() only loads attributes (from the ODB, in the clone case), and does not perform any other checks. The on-disk symlink_metadata() check and unlink-on-collision live in StackDelegate::push()'s invocation of create_leading_directory(), which is therefore bypassed for the cached prefix. The final symlink is created with plain std::os::unix::fs::symlink, which follows symlinks in parent directories. Therefore, it's possible to provide a tree with duplicate symlink and directory entries that exploits this. This vulnerability is fixed in 0.21.1.

CVSS metrics

7 scores · 7 sources · 1 version

EPSS trend

Probability

0.21%

Chance of exploitation in the next 30 days

Percentile

10%

Versus all other CVEs

30-day change

-0.04 pp

From 0.25% on 19-09-2026

19-09-202619-10-2026
EPSS score
0.21%

Known exploited

Compare KEV catalogs

Not in any of the 3 tracked catalogs.

Public exploits

1 found
  • githubUnverified

    Gitoxide

    Maturity: poc

Weaknesses

CWE · root cause

Affected systems

Chainguard7 products
  • cargo-audit< 0.22.2-r0
  • cargo-c< 0.10.24-r0
  • codex< 0.148.0-r1 | < 0.149.0-r0
  • helixAll versions (No fix recorded)
  • jujutsu< 0.41.0-r0
Wolfi4 products
  • cargo-audit< 0.22.2-r0
  • cargo-c< 0.10.24-r0
  • helixAll versions (No fix recorded)
  • starship< 1.25.1-r1
Gitoxidelabs2 products
Crates.Io1 product
  • gix-fs< 0.21.1
Debian1 product
  • rust-gix-fsAll versions (No fix recorded) | < 0.16.1-2
Ubuntu1 product
  • rust-gix-fsAll versions (No fix recorded)

6 vendors · 16 products

References

7 links