记录黑客技术中优秀的内容, 传播黑客文化,分享黑客技术精华

git漏洞cve-2014-9390分析

2015-01-10 00:43

漏洞简介

前段时间,git爆出客户端漏洞CVE-2014-9390,该漏洞是由于clone项目时,服务端存在‘.GiT’之类文件夹,可以覆盖windows及OS X (HFS+) 的git客户端仓库文件夹中.git目录,导致可以覆盖hooks目录中可执行脚本,并可传送恶意程序到客户端,导致任意代码执行漏洞。

不含该漏洞的git版本为v1.8.5.6, v1.9.5, v2.0.5, v2.1.4, v2.2.1。

git漏洞成因

在git仓库文件夹中存在‘.git’文件夹,该文件夹是git仓库的自动生成文件夹,其中包含一些仓库配置文件,等等。
1

在区分大小写的文件系统中(例如Linux的文件系统)我们可以创建‘.Git’、‘.GIT’之类的文件夹,并可在该文件夹中存放文件;在不区分大小写的文件系统中我们是不能创建这样的文件夹的。

在github.com及gitlab.com之类的网站,在他们修补漏洞之前我们是可以上传‘.Git’、‘.GIT’之类的文件夹,其中的文件可以一并上传;现在,做了限制,就会出现以下提示:

2

未限制的情况下,我们可以传任意文件夹。下面我们说的情况是在未限制的情况下可能发生的。

当在Linux环境下上传含有‘.Git’、‘.GIT’之类的文件夹,在windows环境下clone该项目的情况下 ,会导致‘.Git’、‘.GIT’之类的文件夹下的文件传送到windows端仓库的‘.git’文件夹下

在.git下面增加个普通文件没有影响,但是git客户端的执行机制导致,如果‘.git/hooks/’文件夹下出现特殊脚本文件的时候,可以执行该脚本文件。

看一下‘.git/hooks/’的文件列表:

3

看一下.sample文件内容:

4

是shell脚本,shell脚本在windows下不能执行,但是,git客户端自带解释器bash.exe,可以执行。

5

.git/hooks’如果被覆盖一个脚本,是有可能被执行的。比如客户端执行git clone,就会执行post-checkout脚本,如果修改该脚本内容为执行calc,覆盖到本地,计算器程序会被执行:

注意:覆盖的脚本不要带后缀名.sample

6

所以插个后门程序的,是可以的。

所以如果git客户端不能有效处理‘.Git’、‘.GIT’之类的文件覆盖问题,会导致任意代码执行。

git hooks机制

请移步http://gitbook.liuhui998.com/5_8.html。

漏洞修复

更新git客户端,已修复处理大小写问题。

源头上,github.com,不能上传,‘.Git’、‘.GIT’等文件夹。

subversion分析

调研subversion机制,看是否会产生github的问题。不会.原因如下:

它的机制决定了它不会

subversion的hooks机制在server端,subversion文档建议不要手动改动hooks下面的脚本,除非你可以确保不搞烂这个仓库.

服务端文件列表

7

hooks文件夹中文件

8

subversion并不上传.svn中的文件到服务端

尝试在客户端.svn加入测试文件,并提交到服务端,看服务端,及客户端反应.客户端及服务端并没有什么反应,猜测,应该是客户端并不提交.svn中的文件,并且只取.svn中的信息当做传输的配置.

如果有权改变服务端仓库内容,时候会有什么问题

再看一下服务端一个仓库的结构

10

分别测试db和hooks会否有文件传输到客户端,测试结果是没有

hooks在上面已经提过,为服务端调用脚本,覆盖不到,看一下db

11

圈圈标的两个文件夹,里面就是与我们保存的文件相关保存位置,但是,它是根据一些复杂算法而生成的压缩文件。看一下里面的文件,

12

13

复杂压缩算法,介绍详见,

http://svn.apache.org/repos/asf/subversion/trunk/notes/skip-deltas

再看上面一个很明显的数据库文件,rep-cache.db,一个sqlite数据库,里面存放的checksum。

关于subversion的FSFS文件系统,请看链接,

http://svn.apache.org/repos/asf/subversion/trunk/subversion/libsvn_fs_fs/structure

所以,

一,服务端能改数据,但是客户端不取除数据本身之外的数据,

二,生成符合svn的数据需要掌握svn内部算法,

三,生成的覆盖数据在客户端不具备执行权限。

关于TortoiseSVN的Hook Scripts

14

此Hook不是彼Hook,这个hook是客户端为了执行一些提交前的工作而准备的,比如,检查一下代码格式是否符合规范,譬如,PEP8.

15

上边填写你的提交的目录,下边填写你要做的操作,该操作可以写到环境变量中(PATH),在这里写上执行脚本即可.

关于subversion和git的版本控制

subversion基于记录文件及目录的更改,git基于文件树快照,具体就自行Google吧.

知识来源: blog.vulnhunt.com/index.php/2015/01/01/git-cve-2014-9390/

阅读:83952 | 评论:0 | 标签:安全分析 cve-2014-9390 漏洞

想收藏或者和大家分享这篇好文章→复制链接地址

“git漏洞cve-2014-9390分析”共有0条留言

发表评论

姓名:

邮箱:

网址:

验证码:

公告

关注公众号hackdig,学习最新黑客技术

推广

工具

标签云