Git 项目在 11 月 10 日发布了一组维护版本,一次修掉 6 个漏洞。最重的是 CVE-2026-111760:用 git clone --recurse-submodules 克隆一个由攻击者控制的仓库,可能在你的机器上执行对方的代码,GitHub 的安全公告给它评 8.0 分(高危)。Git 项目说,2.27.0 以后的所有版本都受影响。修复版本是 2.50.2、2.51.3、2.52.1、2.53.1、2.54.1、2.55.1 和 2.56.1;比 2.50 更老的版本同样受影响,但已经不再出维护版本。
六个漏洞各在什么时候触发
- CVE-2026-111760:Git 把文件路径的长度存在一个 32 位字段里。攻击者构造一个极长的路径,它能通过路径安全检查,写到磁盘时却被截成
.git。新克隆的子模块里.git是一个文件,会被换成指向恶意目录的符号链接,那里面的钩子或配置随后被执行。触发条件是对攻击者控制的仓库做递归克隆。 - CVE-2026-113408:恶意服务器在 v2 协议里把 HEAD 指向带
../的名字,之后你执行git commit时,Git 会把内容写到引用目录以外的文件。 - CVE-2026-114467:标签的说明里带有超过两个 GPG 签名时,
git merge会写坏栈内存,可以造成拒绝服务。 - CVE-2026-114469:一个解压后远超 1 GiB 的二进制补丁能绕过大小检查,
git apply时越界读取并崩溃。 - CVE-2026-105437:三方合并代码里的堆溢出,由
.gitattributes里超大的conflict-marker-size加上大量冲突触发,merge、rebase、cherry-pick 和 merge-tree 都会走到这段代码。 - CVE-2026-114466:
git fast-import的几个功能可以读写任意文件,现在默认禁用,确实要用得加--allow-unsafe-features。这是一个不向后兼容的改动。
跟服务器有什么关系
- 部署脚本和 CI:很多脚本里写着递归克隆。Git 项目说,这种恶意仓库过不了主流托管平台的检查,很难直接推上去,但它可以放在攻击者自己的服务器上,只要一个看起来正常的
.gitmodules指过去就够了。也就是说,风险来自你引用的第三方仓库里的子模块。 - 自建 Git 托管服务:托管服务会在服务器端替用户检查能否合并。公告提到,合并里的那个堆溢出在 GitLab 上可以进一步升级为远程代码执行。GitHub 说 github.com 已经修好,GitHub Enterprise Server 的修复版本是 3.19.15、3.20.11、3.21.9 和 3.22.4。
- 发行版自带的 Git:截至 11 月 12 日,Debian 12 的 2.39.5 和 Debian 13 的 2.47.3 仍标为 vulnerable。版本老并不等于安全,Ubuntu 22.04 自带的 2.34.1 按上游给的范围同样在受影响之列,要等发行版把修复回补进来。
现在能做的
先用 git --version 看版本,发行版的修复包一到就升级,自带一份 Git 的应用也要跟着升级。在补丁装上之前,GitHub 给的建议是:只从信任的服务器克隆;不要对不信任的仓库做递归克隆;不要合并不信任的内容和标签;不要处理来路不明的二进制补丁和 fast-import 数据流。GitHub 同时说明,这些做法不能代替安装修复。同类的供应链风险,我们在npm 蠕虫那篇报道里讲过;用 Git 拉代码部署的典型流程见部署 Node.js 应用和Docker 入门;怀疑部署机已经执行过不明代码,按入侵排查与安全加固处理。