漏洞预警 | Git 远程代码执行(CVE-2024-32002)漏洞复现与分析

漏洞预警 | Git 远程代码执行(CVE-2024-32002)漏洞复现与分析

源鲁安全实验室 2024-05-23 20:53

此文章原创作者为源鲁安全实验室,转载请注明出处!此文章中所涉及的技术、思路和工具仅供网络安全学习为目的,不得以盈利为目的或非法利用,否则后果自行承担!

0x00 简介

Git是一款免费开源的分布式版本控制系统,支持在多个系统中安装运行,广泛用于协作开发和管理软件项目。在git中提供了许多功能,比如从服务器上克隆完整的Git仓库,项目版本控制等。

在开发项目中如果需要在两个独立项目中,如果需要在一个项目中去使用另一个项目,可通过git的子模块来解决这个问题。通过 git submodule命令进行添加子模块,clone的时候通过recursive选项进行递归clone子模块。

该漏洞将会在受害者通过git clone
–recursive去下载远程攻击者创建带有特殊子模块和符号链接的恶意存储库时触发恶意脚本,从而造成远程代码执行,因此该漏洞可能将被用于钓鱼或投毒。

0x01 漏洞复现

git clone --recursive [email protected]:amalmurali47/git_rce.git

Windows下在管理员权限下通过Git Bash可复现此漏洞【需要管理员权限】

Mac环境:

0x02 漏洞分析

补丁地址:

https://github.com/git/git/commit/97065761333fd62db1912d81b489db938d8c991d

在补丁更新中主要变更了两个文件,一个是漏洞修复的builtin/submodule–helper.c文件,另一个则为漏洞测试脚本。

dir_contains_only_dotgit函数用于确认一个目录中是否只包含 .git,防止包含符号链接。

在clone_submodule函数中使用dir_contains_only_dotgit函数确保
clone_data_path中没
有符号链接,通过检查目录是否存在.git来达到修复的效果。

之后观察下t/t7406-submodule-update.sh
检测脚本:

根据测试脚本可以看出漏洞利用条件需要设置”test_config_global core.symlinks true”,

即开启symlinks功能。

之后继续分析测试脚本,可见漏洞利用还需要:

1.创建了hook项目,在这个项目中可以存放攻击者的恶意payload。

2.
在captain项目中使用git submodule add –name x/y “$hook_repo_path” A/modules/x命令添加子项目模块,也就是刚刚创建的hook项目,定义子模块名称为x/y,路径在A/modules/x文件夹内。
–name的名称指定了在父模块中./git/modules模块中的子项目名称。

3.
在captain中创建一个符号链接,并且是和子模块路径同名,但是区分大小写。之后符号链接指向了.git文件夹。

4.
git clone –recursive captain hooked完成了利用。

其中利用windows、mac系统不区分大小写的特性,和在git存储库中构造区分大小写的项目,从而递归克隆两个项目时目录造成差异性,欺骗git来将恶意hook文件传递到主项目文件夹的.git/modules中仓库目录hook文件夹内,之后触发父模块modules文件夹子模块里的Hook。

需要注意git submodules时候,使用–name指定名称会在父模块.git/modules中生成子模块的仓库目录名称,里面的内容对应子模块仓库中原有的.git 目录中的文件,此时虽然子模块目录下的.git依然存在,但是已经由一个文件夹变成了文件,内容格式为:

gitdir: ../.git/modules/xxx

指向了父模块的 .git/modules/xxx 目录。

但由于此时.git目录和子模块项目相同,为了父项目的.git/modules中子模块的仓库路径和子模块路径中的.git文件不产生冲突,–name需要多一层目录来将两个模块区分开。

0x03 
漏洞影响范围

仅影响Windows和MAC系统下如下版本:

git 2.45.0

git 2.44.0

2.43.0<=
git < 2.43.4

2.42.0<= 
git< 2.42.2

git 2.41.0

2.40.0<=
gi
t < 2.40.2

git < 2.39.4

0x04 修复方案

临时修复方案:

1.
在Git中禁用符号链接(git config --global core.symlinks false

2.
避免在不受信任的来源克隆存储库

官方修复方案:

厂商(
https://github.com/git/git/tags)已发布修复版本,请将Git更新到如下版本:

v2.45.1  v2.44.1  v2.43.4  v2.42.2  v2.41.1  v2.40.2  v2.39.4

0x05 产品支持方案

源鲁IT资产及健康监测系统支持该漏洞的排查

0x06 引用

https://github.com/git/git/commit/97065761333fd62db1912d81b489db938d8c991d

https://github.com/git/git/tags

关于源鲁安全实验室

源鲁安全实验室,是一支以攻防研究为核心的安全团队,团队成员来源于一线攻防团队,安全研究团队。研究方向涉及WEB安全,APP安全,漏洞研究,代码审计,内网渗透,二进制,安全产品研究等多个领域,致力为客户提供一流的服务,保障客户业务安全。