白帽故事 · 2024年7月3日 0

警惕利用Git的钓鱼及社工攻击【CVE-2024-32002】

背景说明

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:确保在创建子模块路径时不会跟随符号链接,避免将目录意外地替换为符号链接。

file

clone_submodule 函数的变化:在克隆子模块前,Git 现在会检查目标目录是否存在且为空,如果不符合条件,则中止操作,防止覆盖。

file

测试脚本 t/t7406-submodule-update.sh:包含了一系列设置和操作,用于验证漏洞的复现情况,包括启用文件协议、符号链接支持以及定义一个标记文件来检测RCE是否成功。

file

漏洞复现

首先准备存在漏洞的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

file

结论

根据官方安全公告,禁用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