{
  "ticket_id": "CVE-2026-44471",
  "code_root": "external/gitoxide",
  "source": {
    "type": "cve",
    "cve_id": "CVE-2026-44471",
    "advisory_id": "GHSA-f89h-2fjh-2r9q",
    "advisory_url": "https://github.com/GitoxideLabs/gitoxide/security/advisories/GHSA-f89h-2fjh-2r9q",
    "vendor": "GitoxideLabs",
    "product": "gitoxide",
    "repo": "https://github.com/GitoxideLabs/gitoxide"
  },
  "facts": {
    "cve_id": "CVE-2026-44471",
    "advisory_id": "GHSA-f89h-2fjh-2r9q",
    "issue_summary": "During worktree checkout, the gix-fs crate processes symlink index entries in a way that lets a malicious git tree reuse a path prefix to write an attacker-controlled symlink into an existing directory the user can write to. A later index entry then resolves through that symlink, causing files to be written outside the intended worktree directory.",
    "vulnerability_type": "Link Following / improper link resolution (worktree escape on checkout)",
    "suspected_cwe": ["CWE-59"],
    "affected_versions": "gix-fs < 0.21.1 (gitoxide < 0.21.1)",
    "fixed_versions": ["0.21.1"],
    "reproduce_version": "0.21.0",
    "verify_fixed_version": "0.21.1",
    "repo_url": "https://github.com/GitoxideLabs/gitoxide.git",
    "code_root": "external/gitoxide",
    "ecosystem": "crates.io",
    "package": "gix-fs",
    "install_recipe": "Build a small Rust binary depending on the `gix` crate (which pulls in `gix-fs`). Pin `gix` to a version whose `gix-fs` dependency resolves to 0.21.0 (vulnerable) or to 0.21.1 (fixed). The crates.io releases of `gix-fs` 0.21.0 / 0.21.1 are the canonical artifacts.",
    "attacker_access": "An attacker who controls the contents of a git tree/repository that the victim checks out into a worktree.",
    "exploit_outline": "Build a crafted malicious git tree fixture that includes a symlink entry pointing outside the worktree plus a later entry that reuses the path prefix so the checkout resolves through the planted symlink. Check the tree out into a worktree using the gix crate's checkout path.",
    "vulnerable_indicator": "On gix-fs 0.21.0 the checkout of the crafted tree creates a symlink and/or writes a file at a path outside the intended worktree directory - a file appears on the filesystem outside the worktree.",
    "fixed_indicator": "On gix-fs 0.21.1 the checkout refuses the malicious symlink entry; no file or symlink is created outside the worktree directory and the operation errors or skips the entry.",
    "reproduction_requirements": "A Rust toolchain and the `gix`/`gix-fs` crates at the specified versions. A crafted malicious git tree fixture. No network service, database, or browser required - the difference is observable as a file written outside the worktree on the local filesystem.",
    "notes": "The escape works by reusing a path prefix so a planted attacker-controlled symlink is followed by a subsequent checkout entry; the fix in 0.21.1 prevents the malicious symlink entry from being honored during checkout."
  }
}
