git爆递归clone严重漏洞致任意代码执行

技术 作者:HackerEye 2019-07-23 21:50:29
0x00 概述 今日git 和git for window相继发布最新版本Git 2.17.1、Git for Windows 2.17.1主要用于解决git一个严重(非史诗级)漏洞CVE-2018-11235。 该漏洞允许在运行'git clone --recurse-submodules'(或已弃用的'git clone --recursive')时可实现任意代码的执行。恶意仓库包含指向仓库外部的.git modules子模块配置文件。 当git clone这样的仓库时,它可以被诱骗到clone子模块内(非.git目录)的hook,从而实现任意代码执行。 0x01 bug详解 当Git仓库包含子模块时,为了编译项目管理,子模块的仓库结构与.git文件夹内的父级仓库结构可以存在一起。子模块的仓库结构通常存储在与子模块名称相同的文件夹中,但此文件夹的名称可由父仓库中的文件配置。 问题版本的git允许配置中包含不一定属于.git目录的路径。导致攻击者可以精心设计创建一个拥有另一个Git仓库的父仓库,作为该父仓库内的一个文件夹。然后,该仓库可以作为子模块添加到父仓库。该子模块的位置可以配置非.git文件夹,指向父仓库本身内的签入仓库。 当递归clone这个父仓库时,Git会检查已配置的子模块,然后查找存储该子模块库的位置。它将遵循父仓库本身的配置,检入仓库。该操作用于检出子模块,由于没有特殊过滤导致该检入仓库中的任何hook脚本都可运行。 因此,攻击者可以将这个仓库配置与一个恶意的post-checkout脚本捆绑在一起,当对该仓库递归clone是就会触发执行。 0x11漏洞影响 0x1101 Git托管商 由于,实际中大多数人依赖托管服务提供商(比如Github)来存储代码,因此通过服务托管商配置就可简单地阻止问题仓库,防止漏洞扩散。据悉目前 Visual Studio Team Services、GitLab和Github都是会主动阻止任何试图在.git目录之外设置git子模块的仓库。 0x1102 Git客户端 阻止托管提供程序中的恶意仓库会关闭攻击媒介源,但是不排除有其他的托管商以及其他恶意利用的途径(比如假冒个github站点)。所以虫虫建议尽快升级git客户端。 0x12漏洞检测 漏洞的检查也非常加单,你可以通过如下脚本来检查git是否存在问题: 新建一个临时目录运行它: mkdir chongchongtemp && cd chongchongtemp git init test && \ cd test && \ git update-index --add --cacheinfo 120000,e69de29bb2d1d6434b8b29ae775ad8c2e48c5391,.gitmodules 注意:该命令不会将克隆任何仓库,也没有任何危险的指令。 如果显示为: error: Invalid path '.gitmodules'fatal: git update-index: --cacheinfo cannot add .gitmodules 则你的git版本不受该漏洞影响。 如果你的git显示,以下信息,并且创建一个空仓库,那么你的版本有问题。 0x13漏洞解决 windows: 从gitforwindows获取最新版本的Git for Windows(2.17.1版)。 macOS 苹果通过用Xcode发布Git,但是有定期更新机制。因此,你需要第三方的包管理器来实现升级。 在此建议你使用Homebrew包管理器。 如果你还没有安装Homebrew,你需要首先安装。 然后,你可以使用Homebrew来更新git: brew update git Linux(Debian,Ubuntu) 如果你使用的发行版为Ubuntu或Debian,可能很快就会有更新包发布,请注意更新。 Redhat,CentOS下: sudo yum update git Debian,Ubuntu下: sudo apt-get update git

关注公众号:拾黑(shiheibook)了解更多

[广告]赞助链接:

四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

公众号 关注网络尖刀微信公众号
随时掌握互联网精彩
赞助链接