Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessHost malicious repo with crafted symlink entry
-
DeliveryVictim clones repo on Windows with core.symlinks=true
-
ExploitIncremental checkout materializes reparse point at path P
-
ExecutionSecond checkout pass follows reparse point
-
PersistAttacker-controlled blob written to external filesystem path
-
ImpactTarget file overwritten outside worktree
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V5 - File Handling Symlink resolution safety
|
| Exploitation Conditions | Exploitation requires all of the following conditions to be simultaneously true: the victim must be running gitoxide (gix-worktree-state) on Windows; core.symlinks must be set to true (non-default on Windows, must be explicitly configured); the checkout must be incremental rather than a fresh materialization (destination_is_initially_empty: false); and the victim must clone or check out an attacker-controlled repository containing the crafted two-phase symlink/regular-file entry sequence at the same path. Exploitation is limited to Windows due to the NTFS reparse-point mechanism; Linux and macOS users of gitoxide are not affected. The requirement for user-initiated checkout of a malicious repository (UI:P in CVSS 4.0) is an additional friction point that limits opportunistic mass exploitation. |
| Impact | The CVSS 4.0 vector (AV:N/AC:H/AT:P/PR:N/UI:P, score 6.0) accurately reflects the multi-condition nature of exploitation: network-delivered payload requires high attack complexity, a specific prerequisite configuration (AT:P - core.symlinks=true on Windows), and passive user interaction (the victim must perform a checkout of a malicious repository). The integrity impact to the vulnerable system is rated High (VI:H), meaning successful exploitation yields arbitrary file write, which is a severe primitive - capable of enabling code execution if writeable paths include startup items, DLL directories, or configuration files. However, the real-world risk is meaningfully constrained: gitoxide is a niche Rust-native git client with limited enterprise deployment, core.symlinks is not the default on Windows, and the attack requires a two-phase checkout sequence that only triggers during incremental (not fresh) materializations. No KEV listing and no public POC further reduce near-term exploitation probability. The EPSS score is not provided in the input data, so exploitation probability cannot be quantified numerically. The scope is limited to Windows environments running gitoxide with symlinks explicitly enabled; organizations using standard git-for-windows or libgit2-based tooling are unaffected. |
| Exploit ScenarioDerived | An attacker publishes a malicious Git repository containing two entries at the same path P: first a symlink entry (mode 120000) whose target resolves to a sensitive path outside the worktree (e.g., a Windows startup folder or application DLL directory), and then a regular-file entry (mode 100644) with attacker-controlled blob content. A Windows developer using gitoxide with core.symlinks=true performs an incremental checkout of that repository - the first pass creates the reparse point, and the second pass writes the blob content through the reparse point to the external path, potentially overwriting a legitimate file and enabling persistent code execution. No public POC is known at time of analysis. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 28, 2026
Arbitrary file write outside the worktree boundary in gix-worktree-state (part of gitoxide) before 0.33.0 on Windows enables an attacker-controlled repository to overwrite files at arbitrary paths on a victim's filesystem. The flaw manifests when gix_worktree_state::checkout() performs an incremental materialization: a malicious repo first places a symlink entry at path P pointing outside the worktree, then a subsequent incremental checkout of a regular-file entry at the same path follows the Windows reparse point and writes attacker-supplied blob content through the link. No public exploit code is identified at time of analysis, and the vulnerability is not listed in the CISA KEV catalog.
RemediationAI
Upgrade gix-worktree-state (and the containing gitoxide crate) to version 0.33.0 or later, as documented in the vendor advisory at https://github.com/GitoxideLabs/gitoxide/security/advisories/GHSA-pmm9-4h7q-24c8. If an immediate upgrade is not feasible, set core.symlinks=false in Git configuration to disable symlink materialization entirely - this prevents the reparse-point creation that is the prerequisite for exploitation, but will cause symlink entries in repositories to be materialized as plain text files containing the link target path instead, which may break workflows relying on symlinked content. A second workaround is to avoid performing incremental checkouts (always use fresh/exclusive checkout with destination_is_initially_empty: true), though this is an application-level control that may not be easily configurable by end users. Only clone and check out repositories from trusted sources as a general defense until patched.
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
gitoxide (cpe:2.3:a:gitoxidelabs:gitoxide) is a pure-Rust reimplementation of Git. The affected component, gix-worktree-state, handles materializing working-tree entries during checkout. CWE-59 (Improper Link Resolution Before File Access, 'Link Following') is the root cause: when destination_is_initially_empty is false (incremental/non-exclusive mode), the checkout logic does not validate whether an already-materialized path is a symlink before writing a subsequent regular-file entry through it. On Windows, Git symlinks are implemented as NTFS reparse points, and the OS transparently follows them during write operations. The attack requires core.symlinks=true, which on Windows is non-default for most users but can be enabled explicitly or via repository configuration. The vulnerability is Windows-specific because Unix implementations handle symlink traversal differently during file creation.
Know when Gitoxide 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:H/AT:P/PR:N/UI:P/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N
Network-delivered via malicious repo; high complexity due to multi-condition prerequisites; no auth needed to publish repo; user must initiate checkout; scope changes as writes land outside worktree boundary.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
Lifecycle Timeline
2DescriptionCVE.org
gix-worktree-state before 0.33.0 (part of gitoxide) allows writing files outside the worktree on Windows. gix_worktree_state::checkout() follows an existing terminal symlink during non-exclusive (incremental) materialization (destination_is_initially_empty: false) when core.symlinks is true. If a symlink entry (mode 120000) is first checked out at a path P pointing outside the worktree, a subsequent incremental checkout of a regular-file entry (mode 100644) at the same path follows the existing reparse point and writes the blob content through the link, overwriting files outside the worktree.
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
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
Command injection in the gitoxide Rust library (gix-submodule crate before 0.82.0, gix before 0.83.0) allows attackers c
Path traversal and trust inheritance flaws in gitoxide's Rust crates gix (≤ 0.72.0) and gix-validate (≤ 0.10.0) allow an
Symlink following in gitoxide before 0.52.1 and the gix crate before 0.83.0 allows an attacker who supplies a malicious
Path traversal in gitoxide before 0.52.1 and gix before 0.83.0 allows an attacker who supplies a malicious git repositor
Denial-of-service in gitoxide's gix-pack crate before 0.69.0 exposes Rust Git clients to remote process crashes during c
Credential exfiltration in gitoxide's gix-transport crate allows a server controlling an HTTP redirect response to steal
Credential theft in gitoxide's curl-based HTTP transport backend allows attackers to capture authentication tokens (pass
Index-out-of-bounds panic in gitoxide's gix-packetline library (versions before 0.21.5) allows a malicious Git server to
Control-character injection in gitoxide's gix-transport crate before version 0.59.2 lets crafted git-daemon URLs smuggle
Credential hijacking in gitoxide before 0.38.2 allows remote attackers to redirect credential helper lookups to attacker
EUVD-2026-67700
GHSA-r399-grgc-5vpp
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB