GIT-SHELL 沙盒绕过(CVE-2017-8386)
影响版本
- Git 2.4.12之前的版本
- Git 2.5.6之前的2.5.x版本
- Git 2.6.7之前的2.6.x版本
- Git 2.7.5之前的2.7.x版本
- Git 2.8.5之前的2.8.x版本
- Git 2.9.4之前的2.9.x版本
- Git 2.10.3之前的2.10.x版本
- Git 2.11.2之前的2.11.x版本
- Git 2.12.3之前的2.12.x版本
受影响的产品
- Ubuntu Linux 17.04
- Ubuntu Linux 16.10
- Ubuntu Linux 16.04 LTS
- Ubuntu Linux 14.04 LTS
- Debian Linux 8.0 (Jessie)
- Fedora 24
- Fedoraproject Fedora 25
- Fedoraproject Fedora 26
- Novell Leap 42.1
- Opensuse Leap 42.1
- GIT 2.12
- GIT 2.11
- GIT 2.10
漏洞描述
GIT-SHELL 沙盒绕过(CVE-2017-8386)导致任意文件读取、可能的任意命令执行漏洞。
漏洞原理
执行git-upload-archive --help
(或git-receive-pack --help
),将会进入一个交互式的man页面,man又调用了less命令,less命令有一个特性,就是其支持一些交互式的方法。比如在less页面中,按shift
+e可以打开Examine功能,通过这个功能可以读取任意文件;输入!id
就可以执行id这个命令。
如果目标服务器使用了第一种方法,我们即使成功执行了git-upload-archive '--help'
进入帮助页面,也不能执行命令。因为!id
还是在git-shell下执行,git-shell中没有id命令,所以依旧执行不成功。
但读取文件是一定可以的,因为读取文件不是通过命令读取的,所以不受git-shell沙盒的影响。
如果目标服务器是用第二种方法配置的git-shell,在/etc/passwd
文件设置git用户的shell是bash,而在authorized_keys中覆盖command,执行git-shell。
这种情况下,如果我进入了帮助页面,输入!id
是可以成功执行id命令的,因为此时id是在bash下执行的,而不是在git-shell下执行的,所以没有沙盒限制。
修复建议
- 更新Git
- 安装系统安全更新