问答
发起
提问
文章
攻防
活动
Toggle navigation
首页
(current)
问答
商城
实战攻防技术
漏洞分析与复现
NEW
活动
摸鱼办
搜索
登录
注册
CVE-2024-32002 Git clone远程命令执行
漏洞分析
当用户使用管理员权限执行git clone —recursive 克隆一个恶意仓库时,git中存在的漏洞会触发远程代码执行 攻击者可以创建恶意的仓库,诱导使用git的用户clone,从而在客户端执行任意的系统命令
一、漏洞简介 ====== 当用户使用管理员权限执行git clone —recursive 克隆一个恶意仓库时,git中存在的漏洞会触发远程代码执行 攻击者可以创建恶意的仓库,诱导使用git的用户clone,从而在客户端执行任意的系统命令 **什么是Git?** Git是一个版本管理控制工具,常用来管理代码仓库,它可以记录每一次提交的内容,能够随时恢复到之前的版本。 二、影响版本 ====== 2.45.0 2.44.0 2.43.0 - 2.43.4 2.42.0 - 2.42.2 2.41.0 2.40.0 - 2.40.2 < 2.39.4 只影响windows和mac系统(文件系统大小写不敏感) 三、漏洞原理分析 ======== **1 git中的hook功能:** git里面提供了一个hook的功能,它允许用户在发生特定的git事件时,自动执行用户指定的脚本或操作,例如代码格式化、测试运行、发送通知。 hook脚本存放在.git目录下面,.git目录只会存放在本地,克隆网上的仓库的时候,也不会下载这个目录,它是由本地的git客户端自动生成的 **2** **常见的git事件** \- pre-commit:在提交之前运行。可以用来检查代码格式、运行单元测试等。 \- commit-msg:在提交信息编辑器关闭之后运行。可以用来验证提交消息的格式。 \- post-commit:在提交完成之后运行。可以用来发送通知或执行其他后续任务。 \- post-checkout:在 git checkout 命令执行之后运行。可以用来设置特定文件的状态。 \- post-merge:在合并操作完成之后运行。可以用来重新编译项目或执行其他合并后的任务。 **3 git中的子模块** 一个git仓库嵌套了另一个git仓库,子模块的.git目录通常在外层仓库的.git/modules目录下 **4** **源码分析** 根据漏洞发布通告分析源码(该漏洞目前已做了修复)  引用了新的函数dir\_contains\_only\_dotgit:确保在创建子模块路径时不会跟随符号链接,避免将目录意外地替换为符号链接。  clone\_submodule 函数的变化:在克隆子模块前,Git 现在会检查目标目录是否存在且为空,如果不符合条件,则中止操作,防止覆盖 **5** **漏洞流程** 1\. 恶意的git项目里面有一个子模块,子模块的存储路径为A/modules,子模块里构造了一个hooks目录,里面有个post-checkout脚本,脚本里放恶意代码,代码如下 ```js # 向一个名为 'post-checkout' 的文件写入内容,这个文件位于 'y/hooks/'目录下 cat > y/hooks/post-checkout <<EOF # #!/bin/bash(指定bash shell执行) echo "amal\_was\_here" > /tmp/pwnd (使用 'echo' 命令将字符串 '"amal\_was\_here"'输出到文件 '/tmp/pwnd' 中) calc.exe open -a Calculator.app (打开名为 'Calculator.app' 的计算器应用程序) EOF (标记结束) chmod +x y/hooks/post-checkout # 给执行权限 ``` 2\. 项目中还有一个名为a的符号链接,指向.git目录,这个其实没什么好说的写一个简单的.git钩子就行 3\. 当递归克隆这个项目时,由于大小写区分不敏感,导致子模块被写到了.git/modules目录里 ```js printf ".git" > dotgit.txt (将字符串 ".git" 输出到文件 'dotgit.txt') git hash-object -w --stdin < dotgit.txt > dot-git.hash (使用 Git 的 'hash-object' 命令来计算 'dotgit.txt' 文件内容的哈希值,并将其存储在 Git 数据库中) printf "120000 %s 0\\ta\\n" "$(cat dot-git.hash)" > index.info (生成一个 Git 索引文件的条目,`"120000 %s 0\\ta\\n"` 指定了一个 Git 索引条目的格式,其中 `%s` 是一个占位符,用于通过 '$(cat dot-git.hash)' 插入 'dot-git.hash' 文件中的哈希值。) git update-index --index-info < index.info (通过 '--index-info' 选项告诉它从标准输入读取索引信息。这里,'< index.info'将 'index.info'文件的内容作为标准输入传递给 'update-index'命令。'update-index'命令会根据这些信息更新 Git 的索引文件(即暂存区)) ``` 4\. 而克隆的相关动作会触发post-checkout钩子的执行,而现在的hooks目录下post-checkout脚本里放的是攻击者的恶意代码,于是就导致恶意代码被执行 四、环境搭建 ====== 其实不需要什么环境,只需要一个在影响版本范围内的git,一个用来复现漏洞的github测试账号即可,具体可参考([amalmurali47/git\_rce:利用 CVE-2024-32002 的 PoC 漏洞 (github.com)](https://github.com/amalmurali47/git_rce)) 五、漏洞复现 ====== **2.1** **下载安装git**  **2.2** **创建一个测试用的github账号**  **2.3** **使用ssh-keygen -t ed25519 -C "EMAIL"生成ssh密钥**   **2.4** **在github中配置ssh公钥**  **2.5** **开启Git中的符号链接支持**  **2.6** **克隆恶意仓库,触发漏洞** **git clone --recursive git@github.com:amalmurali47/git\_rce.git**  六、防范措施 ====== **1.** **更新git版本** **2.** **禁用符号链接功能** **3.** **不要克隆来源不明的仓库** **4.** **定期更新系统补丁,减少系统漏洞,提升服务器的安全性** 七、参考 ==== <https://amalmurali.me/posts/git-rce/> <https://github.com/git/git> [Recursive clones on case-insensitive filesystems that support symlinks are susceptible to Remote Code Execution · Advisory · git/git (github.com)](https://github.com/git/git/security/advisories/GHSA-8h77-4q3w-gfgv) [CVE-2024-32002--git rce的分析与复现 - 先知社区 (aliyun.com)](https://xz.aliyun.com/t/14597?time__1311=GqAhDKYKAKKBMBbGkDRDI2WxgCTvh%3Dox)
发表于 2024-08-16 10:03:39
阅读 ( 3697 )
分类:
其他
2 推荐
收藏
0 条评论
请先
登录
后评论
鼠标猴子爱吃香蕉
1 篇文章
×
发送私信
请先
登录
后发送私信
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!