CVE-2026-44471Gitoxide是用Rust编写的Git实现工具。在0.21.1版本之前,由于路径验证缓存机制存在缺陷,攻击者可构造恶意tree对象。当用户使用gitoxide检出该tree时,攻击者能绕过安全检查,将受控的符号链接写入用户拥有写权限的任意现有目录,可能导致敏感文件被覆盖或劫持。
该漏洞源于gitoxide在检出时处理符号链接的逻辑缺陷。所有符号链接索引条目会被延迟,并使用单个共享的`gix_worktree::Stack`在常规文件之后创建。`gix_fs::Stack::make_relative_path_current()`内部会缓存经过验证的路径前缀。当处理的新路径的前导组件与之前处理的叶子组件完全匹配时,系统仅调用`delegate.push_directory()`,而跳过了`delegate.push()`。由于`push()`方法包含`symlink_metadata()`检查和冲突时的解除链接操作,跳过该步骤意味着安全检查被绕过。最终,`std::os::unix::fs::symlink`在创建符号链接时会跟随父目录中的符号链接。攻击者利用这一机制,提供包含重复符号链接和目录条目的tree对象,即可实现将符号链接写入任意位置。