前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Git被爆重大RCE漏洞,Windows和Mac都中招。别不小心被执行恶意代码了!

Git被爆重大RCE漏洞,Windows和Mac都中招。别不小心被执行恶意代码了!

作者头像
程序员牛肉
发布2024-09-26 13:14:25
910
发布2024-09-26 13:14:25
举报
文章被收录于专栏:小牛肉带你学Java

大家好,我是程序员牛肉。

就在两个月前,git被爆严重漏洞,编号为CVE-2024-32002。这个漏洞使得恶意用户可以在目标用户使用git克隆项目的时候执行恶意代码,是一个较为严重的RCE漏洞。

[RCE漏洞通常指的是远程命令执行(Remote Command Execution)或远程代码执行(Remote Code Execution)漏洞的简称。这类漏洞允许攻击者在目标服务器上执行任意命令或代码,从而可能获取服务器的控制权,造成数据泄露、服务中断等安全问题。]

在Github上有人复现出了这个漏洞,项目地址为:

https://github.com/amalmurali47/git_rce?tab=readme-ov-file

在这个复现漏洞的项目中,如果我们以管理员身份尝试克隆这个项目,在复制项目的过程中,我们的计算器就会被自动打开。

git clone --recursive git@github.com:amalmurali47/git_rce.git

并且无论是Windows还是Mac都纷纷中招。

基于这个漏洞,它可以很轻易的打开你的计算器。那如果是一些恶意行为,比如启动一个流氓软件或者清空你的电脑文件呢?

光知道这个漏洞或许不够,让我们来深入了解一下造成这个漏洞的原因。

在git的内部有一个Hook机制,相当于是一些自动执行的脚本,这个机制的存在使得Git可以自动化的执行一些脚本,使得git更加的高效化。以我们常用的客户端Git举例,常用的Hook就有:

  • pre-commit:在提交之前运行,可以用来检查提交信息、运行代码检查等。
  • prepare-commit-msg:在提交信息编辑器打开之前运行,可以用来修改提交信息。
  • commit-msg:在提交信息编辑器关闭之后,提交事务完成之前运行,可以用来检查提交信息是否合规。
  • post-commit:在提交之后运行,可以用来通知团队成员、触发持续集成流程等。

我们可以在自己本地git管理的项目下.git/hooks 目录下找到这些脚本:

而在正常的情况下,这些Hook由于比较敏感,都是交由本地的git自己去维护的。如果我们有特殊的需求,也需要自己编写hook脚本之后手动放到这个目录下。

当我们尝试拉取一个远端项目的时候,我们并不会拉取这个远端项目中.git目录下的hook脚本,而是由我们本地的git自己生成hook脚本,以此防止恶意hook的执行。

可是本次的漏洞发现者却发现了一种方式将恶意hook脚本写到.git的hooks目录下,使得其被自动执行。我们继续往下看。

项目与项目之间可以嵌套,比如A项目下可以包含一个B项目。使用git尝试拉取这种嵌套项目的时候,主项目下会有一个叫做.gitmodules的文件去记录这个主项目包含的其他子项目的信息。

在这个父项目中,子项目会被存放到A/modules/x下。而子项目也是有自己的.git文件的,子项目的.git一般都会存放在主项目的.git/modules文件夹下面。

前置知识说完了,我们接下来可以正式的解析这个漏洞的成因了。先看看这两个仓库:

这是父项目:

这是子项目:

已经初见端倪了:这个子项目中有一个Hook脚本是打开计算器。

现在的重点就在于:作者是如何把这个hook写到主项目的.git目录下的,不是说.git文件是git客户端自己管理的吗?

在父项目中,有一个符号链接文件,文件名是 a ,指向的是 .git 。

还记得我们之前说的:子项目会被放到A/modules/x下吗?而Windows和Mac对大小写是不敏感的,这就导致在父项目拉取子项目的时候 a 被当作了 A 。而 a又是一个符号链接文件,指向了.git。

这就导致我们的子项目实际上是被存放到.git/modules/x下了。而不幸的是.git/modules恰恰是父项目存储子项目hook脚本的位置。通过这种方式,我们就把一个自定义脚本写入了.git文件中。

让我们回顾一下本次的模拟攻击是如何进行的:

  • 创建一个带有子项目的项目,并且在子项目中编写恶意Hook脚本。
  • 在主项目中创建一个符号链接文件a,将其指向.git。并且将子项目在父项目中的存放地址指向为A。
  • 由于Windows和Mac的文件目录对大小写不敏感,导致本来是要写入A位置的子文件,写入到了a中,而a指向.git。
  • 最终导致子项目被存放进.git文件中。相关的克隆动作,触发了post_checkout这个恶意hook,导致我们的计算器被自动打开。

总结下来,这次Git被爆出的REC漏洞主要有两个成因:

  • git自身对符号链接文件的监管不够
  • Windows和Mac文件目录对大小写不敏感

而受到本次REC漏洞波及的git版本还是比较多的,git官方在github上也宣布了受到相关影响的版本:

快看看你的git版本在本次受影响的版本当中吗?如果有的话就尽快升级吧!

如果因为一些原因暂时不可以升级自身的git版本的话,我们也可以尝试在git客户端中禁用符号链接。

除此之外,最近搜狗输入法也被爆出了一个漏洞:可以搞近源攻击,在window锁屏状态下调用cmd窗口修改密码强制进入系统。感兴趣的话可以评论区留言,我来介绍介绍这个漏洞。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-08-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员牛肉 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
持续集成
CODING 持续集成(CODING Continuous Integration,CODING-CI)全面兼容 Jenkins 的持续集成服务,支持 Java、Python、NodeJS 等所有主流语言,并且支持 Docker 镜像的构建。图形化编排,高配集群多 Job 并行构建全面提速您的构建任务。支持主流的 Git 代码仓库,包括 CODING 代码托管、GitHub、GitLab 等。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档