← 文章 / 开源项目
GitHub Blog 2小时前 · 2026-11-11 03:01:23 · 2 阅读

Git 发布安全更新,修复六个漏洞

今天,Git 项目发布了新版本,修复六个安全漏洞,其中包括:递归克隆恶意仓库时可能执行任意代码、写入非预期文件,以及处理合并或二进制补丁时的内存损坏问题。

相关修复已包含在 Git 2.56.1 中,并已向后移植到 Git 2.55.1、2.54.1、2.53.1、2.52.1、2.51.3 和 2.50.2。我们建议升级到 Git 2.56.1,或对应维护系列的已修复版本,同时更新所有捆绑了 Git 的应用程序。

Git 中的安全漏洞

CVE-2026-111760:递归克隆过程中的代码执行

Git 在向工作区写入文件前会检查路径,包括拒绝会覆盖自身仓库元数据的路径。但 Git 的 index 处理中存在一个整数截断问题,可能导致超长路径以一个名称通过校验,随后却以更短的名称被写入。

攻击者可以利用这种不一致,把 submodule 的 .git 文件替换为一个符号链接,指向包含恶意配置或 hooks 的目录。当 Git 后续使用该目录时,就可能在递归克隆过程中执行攻击者控制的代码。

修复方案是在路径长度可能被截断之前,直接拒绝超长的 index 条目路径。

[Advisory]

CVE-2026-113408:通过服务器通告的 HEAD 实现路径穿越

使用 Git protocol v2 克隆空仓库时,服务器可以通告一个指向 unborn 分支(尚无任何提交的分支)的 HEAD symref。Git 在将该 symref 存储到本地之前,没有校验其指向的目标。

恶意服务器可以提供一个包含路径穿越组件的名称。在使用 files reference backend 的情况下,后续更新该分支的操作可能会写到预期的 reference 目录之外。

现在,Git 会先校验通告的目标再予以接受。本版本还对通过 protocol v2 接收的其他 reference 名称和符号引用目标进行了校验。

[Advisory]

CVE-2026-114467:移除签名时的栈损坏问题

在从消息中剥离 GPG 签名时,Git 假设签名最多只有两个。一个包含两个以上签名的特制消息会导致 Git 写越界,超出固定大小的栈数组。

合并一个包含超过两个签名的 tag 即可触发此漏洞,造成内存损坏,并可能导致拒绝服务。代用户执行这类合并的托管服务同样会受到影响。

修复方案移除了固定大小数组,使其能处理任意数量的签名。

[安全公告]

CVE-2026-114469:应用二进制补丁时的越界读取

Git 会拒绝超过约 1 GiB 的补丁,因为其补丁应用代码无法安全处理更大的输入。但这个检查只考虑了补丁提交时的原始大小。

二进制补丁经过压缩和编码,一个看似很小的补丁解压后可能超出该限制。特制的补丁可以绕过输入大小检查,导致越界读取,使 Git 崩溃。

现在 Git 在处理二进制补丁前,还会检查其声明的解压后大小。

[安全公告]

CVE-2026-105437:大型合并过程中的堆内存损坏

Git 的合并机制在写出结果前会先计算所需的内存大小。当合并结果非常大时,这个计算可能溢出,例如大量冲突叠加较大的 conflict-marker-size 属性时。

溢出会导致 Git 分配过小的缓冲区,随后越界写入,损坏堆内存。这不仅影响本地合并,也影响使用 Git 合并不受信内容的应用和托管服务。

修复方案改用大小合适的类型并采用带检查的算术运算,对输出大小无法安全表示的合并直接拒绝。

[安全公告]

CVE-2026-114466:通过 fast-import 流访问文件系统

git fast-import 通过读取命令流来构建仓库。某些命令可以访问仓库之外的文件,因此 Git 早已对这些命令做了限制:当它们出现在不受信任的输入流中时会被拦截。

还有三个功能缺乏这层保护。rewrite-submodules-from 和 rewrite-submodules-to 功能可以读取任意文件,并可能通过错误信息泄露文件内容。export-pack-edges 选项则可以创建文件或向现有文件追加数据。

现在,除非调用方显式启用 --allow-unsafe-features,通过输入流传入的这些功能都会被拒绝。只有在信任生成该流的程序时才应启用此选项。

[安全公告]

进一步加固

除上述修复外,本次发布还在 checkout 和 tree 处理过程中为相关的索引条目分配增加了溢出检查。这些检查与前面的路径长度限制互为补充,确保 Git 在将路径复制进内存之前,分配大小不会被截断或溢出。

保护 GitHub 用户

  • 我们已在 github.com、GitHub Enterprise Cloud 以及支持数据驻留的 GitHub Enterprise Cloud 上部署了针对这些漏洞的修复。
  • GitHub Enterprise Server 的更新已包含在 3.19.15、3.20.11、3.21.9 和 3.22.4 版本中,建议管理员尽快升级。
  • 我们正在协调发布内置修复版 Git 的 GitHub Desktop 和 GitHub Copilot 应用。
  • GitHub Codespaces 和 GitHub Actions 也将获得修复后的 Git 版本。

更新 Git

更新是防范这些漏洞最有效的手段。请从操作系统或 Git 发行渠道安装修复后的版本,并更新那些自带 Git 的应用。管理员还应更新自动化流程和代用户处理仓库的服务所使用的 Git。

如果暂时无法更新,请只从可信服务器克隆,避免对不可信仓库进行递归克隆,避免合并不可信的内容或标签,也不要处理来自不可信来源的二进制补丁或 fast-import 流。但这些预防措施并不能替代安装修复补丁。

原始来源: GitHub Blog

评论 (0)