该安全漏洞,追踪为CVE-2018-11235和CVE-2018-11233,已经解决与发布的Git v2.17.1,v2.13.7,v2.14.4,v2.15.2和v2.16.4的。
其中更为严重的CVE 2018-11235与子模块名称和递归克隆存储库相关。这个问题是由Etienne Stalmans发现的,他通过GitHub的bug奖励计划报告了这个问题。
微软的Visual Studio团队服务(VSTS)团队已经提供了一些关于漏洞的信息,说明了用户如何检查它们是否受到影响,以及需要采取哪些措施来缓解每个平台上的风险。
Microsoft Visual Studio Team Service中的Git项目经理Edward Thomson针对此漏洞提供了以下描述:
“当Git存储库包含子模块时,该子模块的存储库结构与.git文件夹内的父级存储器结构一起存储。此结构通常存储在与子模块名称相同的文件夹中,但此文件夹的名称可由父存储库中的文件配置。
易受攻击的git版本允许文件夹名称包含不一定位于.git目录下的路径。这可以让攻击者仔细地创建一个拥有另一个Git存储库的父存储库,作为该父存储库内的一个文件夹。然后,签入的存储库可以作为子模块添加到父存储库。该子模块的位置可以设置在.git文件夹之外,指向父级本身内的签入存储库。
当您递归克隆这个父库时,Git会查看已配置的子模块,然后查找存储该子模块库的位置。它将遵循配置到父存储库本身,到已作为文件夹检入的存储库。该存储库将用于检出子模块......不幸的是,该检入存储库中的任何挂钩都将运行。
因此,攻击者可以将这个存储库配置与一个恶意的post-checkout挂钩捆绑在一起,并且他们的代码将在您的(递归)存储库克隆中立即执行。“
微软,GitLab,GitHub和其他可能的Git托管服务提供商已采取措施防止滥用。但是,用户仍然被建议更新他们的Git客户端。
第二个缺陷被认为不太严重。这个问题与Git执行“在NTFS上进行路径健全性检查有关,可能被愚弄为读取任意内存”。