Py学习  »  Git

【漏洞通告】Git符号链接代码执行漏洞(CVE-2021-21300)

深信服千里目安全实验室 • 3 年前 • 857 次点击  

漏洞名称Git符号链接代码执行漏洞

组件名称 : Git

威胁等级 :

影响范围 2.14.2<=Git<=2.14.6,

2.15.0<=Git<=2.15.4,

2.16.0<=Git<=2.16.6,

2.17.0<=Git<2.17.6,

2.18.0<=Git<2.18.5,

2.19.0<=Git<2.19.6,

2.20.0<=Git<2.20.5,

2.21.0<=Git<2.21.4,

2.22.0<=Git<2.22.5,

2.23.0<=Git<2.23.4,

2.24.0<=Git<2.24.4,

2.25.0<=Git<2.25.5,

2.26.0<=Git<2.26.3,

2.27.0<=Git<2.27.1,

2.28.0<=Git<2.28.1,

2.29.0<=Git<2.29.3,

2.30.0<=Git<2.30.2。

漏洞类型 远程代码执行

利用条件 : 1、用户认证:不需要用户认证

2、前置条件:用户执行git clone操作
3、触发方式:远程

造成后果 : 受影响版本的Git仓库中如果包含符号链接文件,可能会导致在不区分大小写的文件系统克隆时执行刚刚切换分支的脚本。攻击者利用此漏洞可以执行任意代码。


漏洞分析


组件介绍

Git 是一个开源的分布式版本控制系统。是 Linus Torvalds 开发的一个开放源码的版本控制软件,采用了分布式版本库的方式。可以有效、高速地处理从很小到非常大的项目。


2 漏洞描述

2021年3月10日,深信服安全团队监测到一则Git组件存在代码执行漏洞的信息,漏洞编号:CVE-2021-21300,漏洞危害:高危。该漏洞是由于Git对符号链接文件的处理不严密,攻击者可利用该漏洞在未授权的情况下,创建恶意git仓库对克隆此仓库的用户进行远程代码执行攻击。


漏洞分析

在区分大小写的文件系统中,创建的仓库可以同时存在两个仅大小写不同的目录或文件,如:

此状态可以被正常的保存在区分大小写的系统中,但是当一个基于不区分大小写的文件系统的客户端试图克隆此存储库时,由于需要获取区分大小写的文件,会在磁盘上更改文件类型,使缓存处于无效状态。一般来说,如果以索引顺序checkout不会产生问题。


但是在Git使用Git LFS帮助处理大文件时,出于存储效率的需要开启status=delayed选项以推迟某些项目的checkout行为,从而导致修改了checkout 的顺序。


这时仓库中同时存在目录和符号链接,当目录被符号链接替换时,会根据符号链接的指向将文件指向错误的位置,甚至可能是仓库以外的路径,从而可以导致代码执行。


补丁检测了Git在--always-delay模式下工作的情况。处理命令时,若存在路径则将变量requested和count置为1,一旦存在删除目录就会重置lmdir缓存,避免软连接文件在随后被checkout到非法位置而执行。


漏洞复现

搭建Git组件2.26.1版本环境,复现该漏洞,效果如下:

该结果表明网上的PoC有效且存在造成RCE的可能。


影响范围


Git可以运行在几乎所有计算机平台上,由于其分布式,跨平台和开源的特点被广泛使用,成为最流行的版本控制工具之一。有多种代码托管平台基于Git开发。可能受漏洞影响的资产广泛分布于世界各地。此漏洞涉及的版本多,用户量大,但是需要用户主动克隆被精心构造的仓库,因此漏洞影响力总体较大。


目前受影响的Git版本:

2.14.2<=Git<=2.14.6,

2.15.0<=Git<=2.15.4,

2.16.0<=Git<=2.16.6,

2.17.0<=Git<2.17.6,

2.18.0<=Git<2.18.5,

2.19.0<=Git<2.19.6,

2.20.0<=Git<2.20.5,

2.21.0<=Git<2.21.4,

2.22.0<=Git<2.22.5,

2.23.0<=Git<2.23.4,

2.24.0<=Git<2.24.4,

2.25.0<=Git<2.25.5,

2.26.0<=Git<2.26.3,

2.27.0<=Git<2.27.1,

2.28.0<=Git<2.28.1,

2.29.0<=Git<2.29.3,

2.30.0<=Git<2.30.2。


解决方案


如何检测组件版本

使用Git Bash 执行:

git version

回显内容即为Git的版本,若属于受影响版本则存在漏洞。


官方修复建议

当前官方已发布最新版本,建议受影响的用户及时更新升级到最新版本。链接如下:

https://mirrors.edge.kernel.org/pub/software/scm/git/


详细更新版本方法:

Windows平台:

Git Bash输入

git update-git-for-windows

或使用控制面板->添加删除程序进行卸载后,访问https://git-scm.com/downloads下载最新版本。


Linux平台:

使用以下命令完成git的源码安装(以2.30.2版本为例)

sudo apt-get purge gitsudo apt-get install curl curl-devel zlib-devel openssl-devel perl cpio expat-devel gettex-devel autoconfgit clone https://github.com/git/git.git

(若此步因网络原因报错,可尝试从

https://mirrors.edge.kernel.org/pub/software/scm/git/ 下载所需的安全版本。)

tar -zxvf git-2.30.2.tar.gz  cd git-2.30.2autoconf./configuremakemake install

最后执行git --version查看版本。


临时暂缓建议

避免从不信任的来源克隆仓库。


时间轴


2021/3/9  Git官方发布安全补丁。

2021/3/11  深信服千里目安全实验室发布漏洞通告。



点击阅读原文,及时关注并登录深信服智安全平台,可轻松查询漏洞相关解决方案。


深信服千里目安全实验室

深信服科技旗下安全实验室,致力于网络安全攻防技术的研究和积累,深度洞察未知网络安全威胁,解读前沿安全技术。

● 扫码关注我们



Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/108757
 
857 次点击