CVE-2019-11229 gitea远程命令执行分析

96
_LuckyCat_
0.4 2019.07.23 15:39* 字数 650

前言

4月13日,gitea发布v1.7.6,修复一处远程命令执行漏洞



因为之前也跟过gitea的其他洞,这次也继续调洞

分析

首先查看commit修复了什么
https://github.com/go-gitea/gitea/pull/6593/files#diff-6b299323ba0a072129c7841649f49536

image.png

看这样子是修复了设置remote origin的时候的洞,猜测是CRLF,直接看代码
定位SaveAddress函数
image.png

跟进SetValue函数
image.png

看着只是设置了键值对,那么跟进SaveToIndent康康
image.png

将键值对写入buffer后写入文件,跟进writeToBuffer康康他是怎么处理键值对的
关键来了,如果存在换行就用"""框住
image.png

这样就能用"""来逃逸了23333

复现

首先正常迁移一个外部仓库,选择镜像
进入仓库设置,修改URL


image.png

用burp一把梭


image.png

然后config文件成功被篡改
image.png

看上去很乱,但是重新点一下更新仓库设置就能格式化了
image.png

那么能篡改config文件后,怎么rce呢
通过阅读git文档和场外求助,共找到3种利用方式

利用链1

第一种就是使用hooksPath,通过设置core.hooksPath,我们能够指定hooks文件,如果能指定到仓库所存放到地方不就可以为所欲为了吗
在转成普通仓库后,对文件进行修改后,会在data/tmp/local-repo/{repo_id}下生成仓库文件,只要不重启gitea就不会消失,那么不久可以利用这个来做hooksPath
可能有人要问,repo_id我怎么知道呢,莫慌,可以使用搜索api来获取

image.png

首先创建一个镜像仓库,拉取恶意的hook文件,然后通过搜索api来获取repo_id,然后篡改url为

http://www.baidu.com"""
[core]
hooksPath = ../../../data/tmp/local-repo/6/hooks/update.d
[remote "origin"]
cat = """

然后转换为普通仓库后,随便更新一个文件后就能触发了

image.png

gif太大了显示不了,点击查看

注意,hook文件一定要有执行权限,在上传至远程git仓库时一定要加上执行权限,这样拉下来的hook也带有执行权限了
然而这种利用链存在问题,首先我是在用户目录下运行binary的,这样就可以用相对路径穿上去,但是不是每一个人都会在用户目录下运行的。虽然可以使用绝对路径,但是猜不到绝对路径就gg。还有在1.8版本,更改完文件后,临时的仓库文件就会被删除。所以这个利用链不完美。

利用链2

使用gitProxy,git文档对其对描述是能够执行命令

image.png

修改url为

git://www.baidu.com/catcat/test.git"""
[core]
gitProxy = touch
[remote "origin"]
cat = """

修改完成后点击更新就能执行touch命令

image.png

image.png

但是gitProxy是把值当作一个命令来执行的,所以不能带参数就不能扩大利用了

利用链3

在git文档里,gitProxy的下面就是sshCommand,可以利用这个来执行命令

image.png

触发条件是执行git fetchgit push,先看看gitea同步时的操作
image.png

调用了git remote update,那再来看看git remote update又调用了谁
image.png

nice,调用了git fetch,那么利用链完成
修改url为

git@github.com:luckycat/luckycat"""
[core]
sshCommand = open /Applications/Calculator.app | ssh
[remote "origin"]
cat = """

点击同步,一键getshell
gif太大了显示不了,点击查看

参考

感谢@lorexxar师傅提供利用链2的思路
感谢@lz1y师傅提供利用链3的思路
https://www.lz1y.cn/2019/07/20/CVE-2019-11229-Gitea-RCE/
https://git-scm.com/docs/git-config

Web安全