Git 项目发布了 2.56.1 版本,用于修复六个安全漏洞。其中一个允许在递归克隆恶意仓库时执行他人的代码。其他漏洞涉及写入未预期的文件,以及在合并和二进制补丁过程中造成的内存损坏。这很重要,因为 Git 内置于许多公司的编辑器、自动化工具和服务器之中,需要在所有地方都完成更新。
在进入具体事实之前,先了解几个术语。 递归克隆是指复制一个仓库及其所有子模块。子模块是嵌套在另一个仓库中的仓库。钩子(hook)是 Git 在特定时刻启动的程序。路径遍历(path traversal)利用包含特殊组件的路径跳出允许的目录。CVE是用于标识公开漏洞的编号。
Git 项目发布了什么?
据 GitHub 博客报道,修复已包含在 2.56.1 版本中。同时也为 2.55.1、2.54.1、2.53.1、2.52.1、2.51.3 和 2.50.2 系列提供了回移补丁。
GitHub 建议升级到 2.56.1 或你所在系列的修复版本,并同时更新内置了 Git 副本的应用程序。如果你读过我们的面向开发者的 Git 系列文章,就会知道这个工具在日常工作流中有多普及。
递归克隆如何导致代码执行?
该缺陷被编号为 CVE-2026-111760,是索引处理中的一个整数截断问题。一条极长的路径通过了 Git 的检查,但随后被以更短的名称写入磁盘,攻击者可以利用这一点让它变成 .git。
这样一来,子模块的 .git 文件就可以被替换为指向含有恶意钩子或配置的目录的符号链接。正如 The Hacker News 所解释的,Git 会拒绝用符号链接替换 .git 目录,但在刚克隆的子模块中,.git 是一个文件。当 Git 使用该目录时,攻击者的代码就可能被执行。
修复方式是在长度被截断之前就丢弃过长的路径。
另外五个漏洞是什么?
- CVE-2026-113408。使用 v2 协议克隆空仓库时,恶意服务器可以提供带有路径遍历的名称。在基于文件的引用后端下,后续的更新操作可能写入预定目录之外的位置。
- CVE-2026-114467。带有两个以上 GPG 签名的标签在合并时会破坏栈内存,并可能导致服务中断。
- CVE-2026-114469。体积很小但展开后非常庞大的二进制补丁,可以绕过约 1 GiB 的限制,使 Git 崩溃。
- CVE-2026-105437。一次规模很大、冲突很多的合并,若 conflict-marker-size 属性设置得很大,会破坏堆内存。
- CVE-2026-114466。fast-import 的三个功能可以读取任意文件,或创建文件并向其中追加数据。
针对最后一种情况,Git 现在会在输入流中拒绝这些功能,除非使用 --allow-unsafe-features 选项。该选项只应在你信任生成该流的程序时使用。
谁面临的风险最大,GitHub 已经更新了什么?
风险最大的是代表用户执行合并的服务器。分配了 CVE-2026-105437 的 GitLab 指出,git merge-tree 很可能是攻击目标,因为服务器可能用它来检查合并请求能否顺利合并。该属性设置在仓库的 .gitattributes 文件中,因此任何能够发起合并请求的人都可能触发该缺陷。
GitHub 表示已修复 github.com 和 GitHub Enterprise Cloud。对于 Enterprise Server,需要升级到 3.19.15、3.20.11、3.21.9 或 3.22.4 版本。GitHub Desktop、Copilot 应用、Codespaces 和 Actions 也将获得修复后的 Git。
需要了解的局限
现有资料没有提及正在发生的攻击,也没有给出每个 CVE 的严重程度。我们不清楚是否已有人利用这些缺陷。据 The Hacker News 报道,截至周二 19:09 UTC,Git for Windows 尚未推出基于 2.56.1 的版本,因此该平台的时间表可能会变化。GitHub Desktop、Copilot、Codespaces 和 Actions 的时间表也尚不明确。
这对数字工作者意味着什么
第一步是梳理 Git 在哪里运行。不仅是你的电脑,还包括那些内置了 Git 副本的程序、持续集成系统,以及处理他人仓库的服务。管理包含第三方仓库的服务器的人,也要更新自动化流程。如果暂时无法立即更新,GitLab 给出的临时方案是在每个仓库的 info/attributes 文件中添加 conflict-marker-size=7,或者对不受信任的仓库禁用相关检查。依赖提供托管安全更新的托管服务的用户,可以把部分工作交给服务商。
我们的看法
漏洞有六个,但信息只有一条。Git 应当被当作处理不可信输入的软件,而不仅仅是本地工具。我们在不加思索地克隆、合并和应用外部来源的补丁,而自动化流程也在替我们这样做。最实际的风险来自那些隐藏在其他程序中的 Git 副本,除非有人想起来,否则没人会去更新它们。GitHub 列出的防范措施可以作为权宜之计,但终究只是权宜之计。说到大量使用 Git 的工具,我们此前报道过 GitHub Rubicon,其中不可信输入的问题显得更加突出。
常见问题
我应该安装哪个版本的 Git?
请安装 2.56.1,或你所在版本系列中对应的修复版本,即 2.55.1、2.54.1、2.53.1、2.52.1、2.51.3 或 2.50.2。同时也要更新那些内置了自有 Git 副本的应用程序。
只要不克隆不认识的仓库就够了吗?
这有帮助,但还不够。GitHub 建议只从可信服务器克隆,避免对不可信来源执行递归克隆、合并和二进制补丁,同时也说明这些防范措施无法替代更新。
哪个漏洞最严重?
资料没有给出排名。能在递归克隆时执行代码的是 CVE-2026-111760,报道也主要集中在这一个漏洞上。
Git for Windows 已经更新了吗?
据 The Hacker News 最近一次核查,还没有。截至周二 19:09 UTC,发布标签中尚未出现基于 2.56.1 的版本。
GitHub 用户需要做什么吗?
视情况而定。GitHub 已修复 github.com 和 Enterprise Cloud。使用 Enterprise Server 的用户需要升级到指定版本,使用本地工具的用户则需要更新 Git。
未来几天需要关注的 Git 更新
修复已经存在,但分发仍然参差不齐。最好持续关注那些尚未发布其版本的厂商。
- 留意 Git for Windows 何时发布基于 2.56.1 的版本,并及时更新。
- 关注 GitHub Desktop、Copilot 应用、Codespaces 和 Actions 修复版本的发布时间。
- 如果你管理代码托管服务器,在无法立即更新之前,可以考虑采用 GitLab 给出的临时方案。




