GIT-SHELL 沙盒绕过(CVE-2017-8386)

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
  • 安装系统安全更新