GitLab任意文件读取漏洞复现(CVE-2020-10977)

目录

GitLab

漏洞介绍

漏洞复现

修复建议

漏洞检测POC


GitLab

GitLab是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找。

简单来说,GitLab就是一个与github差不多的项目管理和代码托管平台

官网:https://docs.gitlab.com/

GitLab与github的区别

itHub 和  GitLab 都是基于 web 的 Git 仓库,使用起来二者差不多,它们都提供了分享开源项目的平台,为开发团队提供了存储、分享、发布和合作开发项目的中心化云存储的场所。GitHub 作为开源代码库,拥有超过 900 万的开发者用户,目前仍然是最火的开源项目托管平台,GitHub 同时提供公共仓库和私有仓库,但如果使用私有仓库,是需要付费的。

扫描二维码关注公众号,回复: 12678053 查看本文章

GitLab 特色

(1) 允许免费设置仓库权限;

(2) 允许用户选择分享一个 project 的部分代码;

(3) 允许用户设置 project 的获取权限,进一步提升安全性;

(4) 可以设置获取到团队整体的改进进度;

(5) 通过 innersourcing 让不在权限范围内的人访问不到该资源;

所以,从代码的私有性上来看,GitLab 是一个更好的选择。但是对于开源项目而言,GitHub 依然是代码托管的首选。

漏洞介绍

在Gitlab 8.5-12.9版本中,存在一处任意文件读取漏洞,攻击者可以利用该漏洞,在不需要特权的状态下,读取任意文件,造成严重信息泄露,从而导致进一步被攻击的风险。

影响版本

  • GitLab GitLab CE/EE >=8.5 and <=12.9  (CE社区版,EE企业版(收费))
  • GitLab GitLab CE >=8.5,<=12.9

漏洞复现

环境搭建

使用docker-compose.yml搭建漏洞环境,内容如下

环境:ubuntu(虚拟机的内存一定要大于1G,最好2G,不然环境起不来,起不来!!!这是我踩过的坑,一直以为是自己的compose文件有问题)

版本:Gitlab 社区版本11.1.4

version: '2'
services:
    gitlab:
      image: 'twang2218/gitlab-ce-zh:11.1.4'
      restart: unless-stopped
      hostname: 'gitlab.example.com'
      environment:
        TZ: 'Asia/Shanghai'
        GITLAB_OMNIBUS_CONFIG: |
          external_url 'http://gitlab.example.com'
          gitlab_rails['time_zone'] = 'Asia/Shanghai'
          # 需要配置到 gitlab.rb 中的配置可以在这里配置,每个配置一行,注意缩进。
          # 比如下面的电子邮件的配置:
          # gitlab_rails['smtp_enable'] = true
          # gitlab_rails['smtp_address'] = "smtp.exmail.qq.com"
          # gitlab_rails['smtp_port'] = 465
          # gitlab_rails['smtp_user_name'] = "[email protected]"
          # gitlab_rails['smtp_password'] = "password"
          # gitlab_rails['smtp_authentication'] = "login"
          # gitlab_rails['smtp_enable_starttls_auto'] = true
          # gitlab_rails['smtp_tls'] = true
          # gitlab_rails['gitlab_email_from'] = '[email protected]'
      ports:
        - '8090:80' //映射到真实机的8090
        - '443:443'
        - '2222:22'  //环境要用到22端口,所以映射到2222,如果不改就会和你本地的22端口产生冲突
      volumes:
        - config:/etc/gitlab
        - data:/var/opt/gitlab
        - logs:/var/log/gitlab
volumes:
    config:
    data:
    logs:

然后访问8090,先注册一个用户xcc:12345678,然后才可以查看版本信息,如再后面加上/help

注册完账户就进入了首页,如下,环境到这里准备成功了

漏洞复现

1. 在当前页面点击创建项目,先创建两个项目,test1和test2,创建完test1后再回到首页同样的方式创建test2

2. payload准备

点击test1——议题——列表——new issue——编写

插入如下payload

![a](/uploads/11111111111111111111111111111111/../../../../../../../../../../../../../../etc/passwd)

title为payload,点击提交

3. 点击提交后自动进行了一个跳转,接着在当前页面右下角点击——移动议题——选择test2——移动

3. 点击移动后页面进行了刷新,在当前页面有个passwd,点击,立刻进行了下载,然后我们可以打开进行查看

查看passwd文件

修复建议

升级至最新版本

漏洞检测POC

实验环境版本:Gitlab社区办11.1.4

因为具体版本不同所以一些细节也会不同,不同版本脚本可能利用不成功

参考的大佬的脚本:https://github.com/thewhiteh4t/cve-2020-10977 ,其实验环版本为12.8.1,在11.1.4的版本中执行不成功,所以我修改了一下脚本

poc.py

用法:python poc url  登录的用户名 登录的密码

—— 心,若没有栖息的地方,到哪里都是流浪

猜你喜欢

转载自blog.csdn.net/qq_44159028/article/details/112557234