{"id":"EUVD-2026-30200","enisaUuid":"d5ae3f43-d6d0-3bb7-b3a8-aca4b0692791","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()\u0027s 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\u0027s possible to provide a tree with duplicate symlink and directory entries that exploits this. This vulnerability is fixed in 0.21.1.","datePublished":"May 13, 2026, 9:36:44 PM","dateUpdated":"May 14, 2026, 12:59:51 PM","baseScore":7.8,"baseScoreVersion":"3.1","baseScoreVector":"CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H","references":"https://github.com/GitoxideLabs/gitoxide/security/advisories/GHSA-f89h-2fjh-2r9q\n","aliases":"CVE-2026-44471\nGHSA-f89h-2fjh-2r9q\n","assigner":"GitHub_M","epss":0.29,"enisaIdProduct":[{"id":"b1495e87-ffda-34d9-aaf9-de4ae7f8746a","product":{"name":"gitoxide","vendor":{"name":"GitoxideLabs"}},"product_version":"\u003c 0.21.1"}],"enisaIdVendor":[{"id":"0e668260-37a1-374f-b778-f315ce9f9050","vendor":{"name":"GitoxideLabs"}}],"enisaIdVulnerability":[{"id":"05943da8-7000-37b7-a320-bb1075800ac3","vulnerability":{"id":"GHSA-f89h-2fjh-2r9q","description":"gix-fs: Symlink prefix-reuse allows worktree escape during checkout","datePublished":"May 7, 2026, 12:01:28 AM","dateUpdated":"May 14, 2026, 8:43:45 PM","baseScore":0.0,"references":"https://github.com/GitoxideLabs/gitoxide/security/advisories/GHSA-f89h-2fjh-2r9q\nhttps://nvd.nist.gov/vuln/detail/CVE-2026-44471\nhttps://github.com/GitoxideLabs/gitoxide\n","enisa_id":"EUVD-2026-30200\n","aliases":"CVE-2026-44471\nGHSA-f89h-2fjh-2r9q\n","epss":0.0,"dataProcessed":"Oct 25, 2026, 1:55:50 AM","vulnerabilityProduct":[],"vulnerabilityVendor":[]}},{"id":"bf49726e-8e50-3f55-af11-14ec504a4ee4","vulnerability":{"id":"CVE-2026-44471","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()\u0027s 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\u0027s possible to provide a tree with duplicate symlink and directory entries that exploits this. This vulnerability is fixed in 0.21.1.","datePublished":"May 13, 2026, 9:36:44 PM","dateUpdated":"May 14, 2026, 12:59:51 PM","status":"PUBLISHED","baseScore":7.8,"baseScoreVersion":"3.1","baseScoreVector":"CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H","references":"https://github.com/GitoxideLabs/gitoxide/security/advisories/GHSA-f89h-2fjh-2r9q\n","enisa_id":"EUVD-2026-30200\n","assigner":"GitHub_M","epss":0.29,"dataProcessed":"Oct 28, 2026, 7:17:27 AM","vulnerabilityProduct":[{"id":"35fc0713-883b-3e16-ba15-5eed7a899f4f","product":{"name":"gitoxide","vendor":{"name":"GitoxideLabs"}},"product_version":"\u003c 0.21.1"}],"vulnerabilityVendor":[{"id":"3ee8044d-e3a1-3c76-8c8c-e0936c625ab2","vendor":{"name":"GitoxideLabs"}}]}}],"enisaIdAdvisory":[]}