受影响的版本
<= 2.17.3、2.18.2、2.19.3、2.20.2、2.21.1、2.22.2、2.23.1、2.24.1、2.25.2、2.26.0
修补版本
2.17.4、2.18.3、2.19.4、2.20.3、2.21.2、2.22.3、2.23.2、2.24.2、2.25.3、2.26.1
CVE标识符
CVE-2020-5260
影响力
Git使用外部的“凭证帮助程序”来存储和检索操作系统提供的安全存储中的密码或其他凭证。包含编码换行符的特制URL可以将意想不到的值注入到凭据帮助程序协议流中,从而导致凭据帮助程序检索一个服务器(例如good.example.com
)的密码,以向另一个服务器(例如evil.example.com
)发出HTTP请求,结果将前者发送给后者的凭据。两者之间的关系没有任何限制,这意味着攻击者可以制作一个URL,该URL将向其选择的主机提供任何主机的存储凭据。
可以通过向发送恶意URL来触发此漏洞git clone
。但是,受影响的URL看起来可疑。可能的媒介是通过自动克隆用户不可见的URL的系统(例如Git子模块)或围绕Git构建的打包系统。
补丁
该问题已在2020年4月14日发布的版本中修复,可追溯到v2.17.x。希望进一步回退更改的任何人都可以通过应用commit 9a6bbee来做到这一点(完整发行版包括对的额外检查git fsck
,但该提交足以保护客户端免受漏洞攻击)。
解决方法
最完整的解决方法是完全禁用凭据助手:
git config --unset credential.helper
git config --global --unset credential.helper
git config --system --unset credential.helper
一种替代方法是避免恶意URL:
- 检查馈入的URL的主机名和用户名部分
git clone
是否存在编码的换行符(%0a
)或凭据协议注入的证据(例如host=github.com
) - 避免将子模块与不受信任的存储库一起使用(请勿使用
clone --recurse-submodules
;git submodule update
仅在检查在中找到的URL后使用.gitmodules
) - 避免使用可能
git clone
在不可信URL上运行的工具
功劳
此漏洞由Google Project Zero的Felix Wilhelm发现,并由GitHub的Jeff King修复。
参考文献
*来自:Github