Git曝最危险漏洞,允许攻击者远程执行代码!

关键时刻,第一时间送达!

一场由Git引发的漏洞危机,影响到的将是社区上的全体开发者。

5月29日,微软Visual Studio Team Services项目经理Edward Thomson在DevOps博客中提到,Git社区最近发现Git存在的漏洞,允许黑客在用户的系统上远程执行任意代码。

目前,Git和各种提供Git存储库托管服务的公司开发人员已采取相关措施,以修复在Git源代码版本控制软件中的危险漏洞。

据了解,Git 2.17.1的客户端软件已经发布,该补丁修复了两个安全漏洞CVE-2018-11233和CVE-2018-11235。

▌Git漏洞产生于何处?

其中,CVE 2018-11235 被认为最危险的漏洞,它的一段代码允许恶意行为创建一个包含特殊Git子模块的格式错误的Git存储库。

在Edward Thomson的技术说明中这样阐述:

当用户在恶意代码库中操作时,他们可能会受到任意代码执行攻击。远程代码存储库包含子模块定义和数据,它们作为文件夹捆绑在一起并提交给父代码存储库。 当这个代码仓库被来回复制时,Git 最初会将父仓库放到工作目录中,然后准备复制子模块。

但是,Git 稍后会发现它不需要复制子模块,因为子模块之前已经提交给父存储库,它也被写入工作目录,这个子模块已经存在于磁盘上。 因此,Git 可以跳过抓取文件的步骤,并直接在磁盘上的工作目录中使用子模块。

正是子模块配置漏洞犯了这个错误,所以 Git 由子模块来设置漏洞。 子模块存储库提交给父存储库,并且从未实际复制过。 子模块存储库中可能存在已配置的挂钩。 当用户再次出现时,恶意的父库会被精心设计。 将写入工作目录,然后 Git 读取子模块,将这些子模块写入工作目录,最后一步执行子模块存储库中的任何 Post-checkout 挂钩。

▌如何解决这一问题?

起先,发现该漏洞是一位名为Etienne Stalmans的人,他通过GitHub的bug奖励计划进行了报告。

随后,Thomson进行了补充说明,如果用户在他的博客上运行易受攻击的Git客户端便可进行检测。

具体如下:

这一问题的解决方案非常简单有效:现在,Git客户端可以更仔细地检查子模块的文件夹名称。它们必须位于.git存储库文件夹中,而不在实际的存储库工作目录中。

Git将拒绝与包含此类子模块配置的存储库一起运行。 Visual Studio Team Services以及其他多数托管提供商,将主动拒绝推送包含此类子模块配置的存储库,以帮助保护尚未升级的客户端。

GitHub的一名工作人员 Jeff King提到:“漏洞修复本身不难,但在Git推送操作期间的检测需要大量重构。”

他补充道,这其中还涉及很多项目。“我为Git编写了补丁,但其他人还在编写libgit2,JGit和VSTS”。

不过在最后,还是建议用户需更新自己的Git桌面或服务器客户端。

参考链接:

https://blogs.msdn.microsoft.com/devops/2018/05/29/announcing-the-may-2018-git-security-vulnerability/

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180531A1HX5Y00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券