Share via


Git中.gitconfig 文件的漏洞

原文发表地址: Git vulnerability with .git\config

原文发表时间: 2014-12-18 1:47 PM

今天Git社区披露了Git的一个问题,即就是:在最坏的情况下,允许开发人员接管机器。这个问题出现在Git的整个系统, 而不仅仅出现在微软的Git实现或窗口中。我将会在下文来描述这个问题和问题的解决措施,以确保我们的客户使用Git存储库来防止这个问题。

首先,我想感谢Hg(Mercurial)社区的帮助。Hg(Mercurial)社区发现了一个类似的问题。他们在研究Git时,发现存在同样的问题。他们谨慎地通知了社区中相应的人,并在披露之前做好共享信息和控制信息来减轻这个问题的影响。这是社区合作中的一个很好的例子。

问题

Git中有一个叫config的文件, 它存储在本地Git 存储库 的git文件夹里。这个文件包含大量的个人/选项设置, 其中有关于git命令的替换名。几乎所有git命令都可以通过执行替换名来做任何你想要的事情。

通常情况下,git客户端要避免重写该文件。即使你提交.git \config 文件并把它发送到一个共享的邮箱, 其他人的git客户端也不能将其放在自己的私人邮箱内。然而,在重命名.git 文件夹时, 发现了一个bug, (如大小写混合, gIT, GiT 等等, Windows文件名缩短.git ~ 123,可忽略的Unicode codepoints .g \ u200cit \config, 等) 一个不能被Git客户端逻辑过滤的问题。这样,如果有人发送一个有上述一种情况的恶意config文件,其他人的Git客户端就会检查出来,覆盖他们的个人配置文件并且改变他们的Git命令。至少,这会影响Windows NTFS和Mac OS X HFS +文件系统,而这两者都是区分大小写的文件系统

风险

风险并不像听起来那么糟糕。当有人要向你做一些有风险的事情时,他们必须向你申请获取信息的邮箱的权限。在一个公司,风险可能就会是内部攻击。最可能的(不是唯一,但最有可能) 场景是在一些小的OSS项目里。大公司通常有知名的/可以信任的提交者。接下来,您将看到已经采取的措施来缓解这个问题。

修复

我们和Git社区的其他成员一起工作准备将这个问题公布出来。我没有对别人说,但是我知道Git核心和GitHub已经在减轻这个问题的影响。我将具体说一下我们(微软) 已经采取的一些步骤。

        1. 大概一周之前,,我们在VS Online和Codeplex上应用了一个补丁,防止服务器接受推送的.git \config文件。这个bug其实不是在服务器上(它是在客户端上的),但通过这样做,我们可以减少从我们正在开发的服务器上获取任何更新的客户端的可能性。

        2. 我们已经准备了相同的服务器来修复TFS 2013(RTM和Update4)。TFS 2013是唯一支持托管Git存储库的TFS版本。这允许TFS管理员采取与VS Online和Codeplex相同的预防措施。如果你用的是TFS 2013 Update4以外的Update(Update1、2或3), 在应用补丁之前,你需要升级到Update4。

                a. TFS 2013 RTM patch

                b. TFS 2013 Update 4 patch

        3. 我们已经发布了Visual Studio 2013 RTM的补丁, Visual Studio 2013 Update 4和VS 2012 VSIX扩展这样客户可以修补他们的客户端让它变的安全。请注意,Visual Studio不能使用任何Git替换名命令, 但我们想要确保VS不能被当作攻击点来获得恶意的config 文件,这些文件是从一些人的机器下载的并且已经被损坏了,例如在第一次攻击完成之后,开发人员使用一些git CLI略去命令行。如果你用的是VS 2013 Update4 以外的Update(Update1、2或3),你需要在应用补丁之前升级到Update 4。

                a. VS 2013 RTM patch

                b. VS 2013 Update 4 patch

                c. VS 2012 VSIX update

        4. 这只是其中一部分, 我们还与社区其他人一起做了一个用于实现共享Git核心执行的LibGit2 开源库的补丁。

你可以在这里找到一些其他重要的相关博客:

希望这篇文章清楚地解释了这个问题和怎样解决它。