文章标题:Git 修复漏洞:恶意仓库可在递归克隆期间执行代码
正文:

Git 中的一个漏洞可以让恶意仓库在递归克隆它及其子模块的计算机上运行攻击者的代码。Git 项目本周在 Git 2.56.1 中修复了该漏洞,并在 2.50.2、2.51.3、2.52.1、2.53.1、2.54.1 和 2.55.1 中为 2.50 至 2.55 系列提供了对应的修复。
该漏洞编号为 CVE-2026-111760,是 Git 处理其索引时发生的整数截断。仓库中极长的路径可以通过 Git 的安全检查,但 Git 随后会以较短的名称将其写入磁盘,而攻击者可以将该名称设为 .git。
这使得攻击者可以将子模块的 .git 文件替换为指向某个文件夹的符号链接,该文件夹中包含恶意钩子或配置。钩子是 Git 在设定时点运行的程序,因此一旦 Git 使用该文件夹,攻击者的代码就可以运行。
子模块在这里很关键,因为 Git 拒绝用符号链接替换 .git 文件夹,但在新克隆的子模块中,.git 是一个文件。
Git 项目发布公告中列出的修复版本会在这些极长路径的长度被截短之前拒绝它们。
GitHub 在其自有工具中附带 Git,它在一份详细说明中解释了这些修复。它建议从操作系统或 Git 发行方安装修复版本,并更新任何自带 Git 副本的应用。
该公司已将修复应用到 github.com 和 GitHub Enterprise Cloud。对于 GitHub Enterprise Server,修复包含在 3.19.15、3.20.11、3.21.9 和 3.22.4 版本中。
GitHub Desktop 和 GitHub Copilot 应用的修复版本正在准备中。GitHub Codespaces 和 GitHub Actions 也将获得修复后的 Git。
截至周二 19:09 UTC,The Hacker News 对其发布标签的检查发现,Git for Windows 尚未发布基于 Git 2.56.1 的版本。
在安装修复版本之前,GitHub 建议采取以下步骤,这些步骤不能替代修复:
- 只从你信任的服务器克隆。
- 不要递归克隆你不信任的仓库。
- 不要合并你不信任的内容或标签。
- 不要处理来自你不信任来源的二进制补丁或 fast-import 流。
这些 Git 版本还修复了另外五个漏洞:
- CVE-2026-113408:当有人通过 Git 协议 v2 克隆空仓库时,恶意服务器可以发送包含路径遍历的分支名称。使用 files reference 后端时,之后对该分支的更新可能会写入 Git 的 reference 文件夹之外。
- CVE-2026-114467:合并带有超过两个 GPG 签名的标签会破坏 Git 的栈内存,并可能导致拒绝服务。为用户运行此类合并的托管服务也可能受到影响。
- CVE-2026-114469:一个展开后体积非常大的二进制补丁可以绕过 Git 约 1 GiB 的补丁大小限制,并通过越界读取使 Git 崩溃。
- CVE-2026-105437:一次非常大的合并,带有许多冲突和较大的 conflict-marker-size 属性,可能使 Git 写入超出过小缓冲区末尾,破坏堆内存。
- CVE-2026-114466:三个 git fast-import 特性 rewrite-submodules-from、rewrite-submodules-to 和 export-pack-edges 可被用于读取任意文件,或创建文件并向其中添加数据。Git 现在会在输入流中拒绝它们,除非设置了 --allow-unsafe-features。
分配 CVE-2026-105437 的 GitLab 表示,代码托管服务器最有可能通过 git merge-tree 成为攻击目标。服务器可能会运行该命令来检查拉取请求或合并请求是否可以合并。
conflict-marker-size 属性可以在提交到仓库的 .gitattributes 文件中设置。如果服务器从仓库读取属性,那么任何能够推送分支并打开拉取请求或合并请求的用户都可以触发该漏洞。
文章标题:Git 修复了一个漏洞,该漏洞允许恶意仓库在递归克隆期间执行代码
作为该漏洞的临时解决方案,尚无法升级的服务器可以在每个仓库的 info/attributes 文件中添加 conflict-marker-size=7,或者对不受信任的仓库关闭这些合并检查。