
核心漏洞为整数截断问题,子模块场景可触发代码执行
Git存在一处高危代码执行漏洞,若用户递归克隆包含子模块的恶意仓库,攻击者可在用户设备上执行任意代码。Git项目本周在2.56.1版本中修复了该漏洞,同时为2.50至2.55版本系列推送了对应补丁,覆盖2.50.2、2.51.3、2.52.1、2.53.1、2.54.1、2.55.1等版本。
该漏洞编号为CVE-2026-111760,成因是Git处理索引时存在整数截断问题。仓库中的超长路径可绕过Git的安全校验,Git后续将路径写入磁盘时会截断为较短文件名,攻击者可将截断后的文件名设置为.git。
攻击者可借助这一问题,将子模块的.git文件替换为符号链接,指向存放恶意钩子或恶意配置的文件夹。钩子是Git在特定操作节点自动运行的程序,一旦Git调用该文件夹内的内容,攻击者植入的代码就会执行。
子模块是触发该漏洞的关键条件。Git本身不允许将.git文件夹替换为符号链接,但在新克隆的子模块中,.git本身是文件而非文件夹,因此可以被替换。修复后的版本会在路径长度被截断前直接拦截这类超长路径,从根源阻断攻击路径。
多平台同步推送修复,未升级用户可采取临时防护
GitHub在旗下多款工具中内置了Git组件,该公司已发布详细公告说明修复方案,建议用户通过操作系统或Git发行渠道安装修复版本,同时更新所有内置Git副本的应用。
目前GitHub已为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。
据The Hacker News核对Git for Windows的发布标签信息,截至UTC时间周二19:09,该项目尚未发布基于Git 2.56.1的修复版本。
在安装正式修复版本前,GitHub给出了以下临时缓解措施,注意这些措施无法替代官方补丁:
- 仅克隆来自可信服务器的仓库
- 不要递归克隆来源不可信的仓库
- 不要合并不受信任的内容或标签
- 不要处理来自不可信来源的二进制补丁或fast-import流
同批次修复五个漏洞,托管平台面临特定攻击风险
本次Git版本更新还同步修复了另外五个安全漏洞,涵盖路径遍历、拒绝服务、越界读写、任意文件访问等多种风险类型。
- CVE-2026-113408:用户通过Git协议v2克隆空仓库时,恶意服务器可发送包含路径遍历特征的分支名。若使用文件引用后端,后续对该分支的更新可将文件写入Git引用文件夹之外的位置。
- CVE-2026-114467:合并携带超过两个GPG签名的标签会破坏Git栈内存,可导致拒绝服务,为用户提供合并操作服务的代码托管平台也可能受影响。
- CVE-2026-114469:解压后体积极大的二进制补丁可绕过Git约1GiB的补丁大小限制,触发越界读取导致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分配编号。GitLab表示,代码托管服务器最可能通过git merge-tree功能遭到该漏洞攻击,服务器通常会运行该命令检查拉取请求或合并请求是否可正常合并。攻击者可在提交到仓库的.gitattributes文件中设置conflict-marker-size属性,如果服务器直接读取仓库内的属性配置,任何拥有分支推送权限、可发起拉取或合并请求的用户都能触发该漏洞。
暂时无法升级的服务器可采取临时缓解措施:在每个仓库的info/attributes文件中添加conflict-marker-size=7配置,或对不受信任的仓库关闭这类合并检查。
Git Patches Flaw That Lets Malicious Repositories Execute Code During Recursive Clones