gogs rce漏洞分析

Posted on 2025-06-29  104 Views


前几天看到了这个

【已复现】Gogs 远程命令执行漏洞

image

当时我看到这篇漏洞复现,我的第一反应是去复现CVE-2024-39931这个漏洞

这个漏洞其实是文件删除漏洞,我也复现成功了,但是我一直想不明白,这玩意和rce有什么关系,反正github漏洞情报说是能rce的

image

当时这个文件删除漏洞的补丁如下

image

可以看到,preview那个方法也加了过滤,于是我看了一下preview方法的代码

image

哈哈,让我逮着你了

吗?

其实没有,这里我试了很多次,都不能rce,文件是能写进去,但是任意文件写不太可能

因为它这里只会写git ls-tree命令结果里存在的文件,如果目标文件不在这个命令的输出里,那就写不出来

image

相关的检测代码在这里

image

为了bypass这个检测,我研究了好几天,最后感觉shell不出来

到这里先打断一下哈,大伙可能会疑惑,为什么这个preview要写入文件呢?用起来不卡吗?

是这样的,因为这个接口是用来对更改的文件进行预览用的,就比如说你在gogs上改了个文件,但是还没有commit,这时你要预览一下本次的改动,就会调用这个方法

这个方法的原理就是clone一个临时仓库下来,然后把变更的内容写进去,最后用git diff命令获取变更内容,再高亮显示在web上

言归正传,CVE-2024-39931的rce我是搞不出来了,还是直接干这几天新出的这个rce吧

长亭的漏洞情报说是符号链接导致的,那就建个符号

image

push上gogs之后,利用preview那个方法写文件到符号里

image

不好意思哈,长亭和带头大哥都打码了,目前也没看到有公开poc,我就也打个码,毕竟这几天上海网安总队24岁生日,我不想被做成生日蛋糕

其实大家可以从我没打码的截图里看出,可以利用git hook去rce

但是在gogs创建的临时仓库里,这个hook是没有执行权限的

image

而且由于是git用户,权限很低,所以计划任务那些也不能写

但是并非不能shell,经过对某路径的写入利用,我成功shell出来了

image

关于漏洞的调用链,其实我不是很想在自己的博客里写一些太严肃的事情,因为这种东西截图出来缺少一种全局视野,最后还是要自己去拉代码下来看的,那不如不放,反正只要漏洞原理清楚就行


你好