背景说明
CVE-2024-32002漏洞其实在今年5月份左右就已公布,但在一些‘特殊’时期,还需额外警惕利用该漏洞发起的相关攻击手段。
漏洞概述
CVE-2024-32002 利用了 Git 在处理子模块时的一个缺陷,允许攻击者精心构造一个恶意仓库,使 Git 将文件写入到 .git/ 目录而不是预期的子模块工作树中。
这样一来,攻击者可以植入恶意的钩子脚本,在克隆操作仍在进行时即被执行,用户几乎无法事先检查即将执行的代码。
影响的版本包括:
- version 2.45.*< 2.45.1
- version 2.44.*< 2.44.1
- version 2.43.*< 2.43.4
- version 2.42.*< 2.42.2
- version 2.41.*< 2.41.1
- version 2.40.*< 2.40.2
- version 2.39.*< 2.39.4
漏洞成因分析
克隆 Git 源代码到本地,并切换到最后一个已知存在漏洞的版本(v2.45.0),修复该漏洞的提交主要修改了两个文件:builtin/submodule--helper.c 和 t/t7406-submodule-update.sh
新函数 dir_contains_only_dotgit:确保在创建子模块路径时不会跟随符号链接,避免将目录意外地替换为符号链接。
clone_submodule 函数的变化:在克隆子模块前,Git 现在会检查目标目录是否存在且为空,如果不符合条件,则中止操作,防止覆盖。
测试脚本 t/t7406-submodule-update.sh:包含了一系列设置和操作,用于验证漏洞的复现情况,包括启用文件协议、符号链接支持以及定义一个标记文件来检测RCE是否成功。
漏洞复现
首先准备存在漏洞的Git版本,如2.39.3:https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.39.3.tar.gz
# wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.39.3.tar.gz
# tar -zxvf git-2.39.3.tar.gz
# cd git-2.39.3
# make configure
# ./configure --prefix=/usr/local
# make all
# sudo make install
# git --version
git version 2.39.3
然后执行:
# git clone --recursive git@github.com:starnightcyber/captain.git hooked
结论
根据官方安全公告,禁用Git中的符号链接支持(例如,通过 git config –global core.symlinks false)可以阻止此攻击。
此外,避免从不可信来源克隆仓库始终是最佳方案。
具体也可参见:https://github.com/git/git/tags
因此,在“特殊”时期,对于在GitHub上发布的真假PoC/ExP,如果你的Git版本过低,没能及时更新,一定要慎之又慎的进行Git Clone操作,擦亮双眼,仔细辨别。别一不小心,机器就被对方控了!
参考资料:
https://xz.aliyun.com/t/14597
https://www.cnblogs.com/Hi-blog/p/18224773/git_rce_CVE-2024-32002