© 哨兵
    GITLAB
    • I. GITLAB CVE-2020-10977 任意文件读取漏洞
    • II. GITLAB CVE-2020-10977 任意文件读取漏洞导致的RCE
    COBALT STIKE
    • I. COBALT STIKE服务器搭建历程
    • II. COBALT STIKE服务器隐藏真实IP
    • III. 域名前置隐藏C2服务器
    • IV. CS上线木马免杀入门
    APACHE LOG4J2
    • I. APACHE LOG4J2 RCE复现历程
    OCR IN BP
    • I. BURPSUITE验证码插件实验
    CTF
    • I. CTF - 代码审计向
    • II. CTF - 密码学与杂项
    二进制研究/BIN
    • I. HIKVISION-CONFIGURATIONFILES-DECRYPTER
    • II. ROUTER-BINFILE-ANALYSIS
    POLKIT
    • I. POLKIT-CVE-2021-3560
    • II. POLKIT-CVE-2021-4034复现
    代理池:BASED ON SCYLLA
    • I. SCYLLA 搭建步骤
    WAF
    • I. MOD-WAF-BYPASS-WALKTHROUGH
    • II. MODSEC & CLOUDFLARE WAF INITIAL RESEARCH
    代码审计
    • I. DYNAMIC-ANALYSIS-OF-JAVA-FRAMEWORK-CODE
    • II. 安全与开发之:MAVEN构建排错
    • III. 浪潮CLUSTERENGINEV4.0代码审计历程
    SPRING
    • I. SPRINGBOOT-MEMORY-FILES-HEAPDUMP-ANALYSIS
    • II. CVE-2022-22947 SPRING-CLOUD-GATEWAY-RCE
    其他研究
    • I. SQL注入原理分析
    • II. STRUTS2DESER
    • III. 基于内存的SHIRO框架WEBSHELL攻击研究
    • IV. 通达OA利用代码分析
    • V. JRMP-GADGET
    反序列化
    • I. SHIRODESER
    • II. JAVADESER

本文发布于:2022-04-29并最后修改于:2022-05-05 | 哨兵安全实验室

Print document Edit on github

概述

GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。

GitLab是由GitLabInc.开发

使用MIT许可证的基于网络的Git仓库管理工具,且具有wiki和issue跟踪功能。使用Git作为代码管理工具,并在此基础上搭建起来的web服务。

如何查看Gitlab Web版本

https://git-lab-domain.com/help

如果没有相关版本,那么需要先登录

2022-04-29-11.40.26.png

如果您是运维人员,可以输入以下命令查看:

$ cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
12.8.1-ee

零、CVE-2020-10977

0x01、CVE-2020-10977 漏洞概述

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

0x02、影响版本

GitLab GitLab CE/EE >=8.5 and <=12.9

GitLab GitLab CE >=8.5,<=12.9

0x03、环境搭建

  • 点击以查看本地搭建漏洞版本
  • 此处不多赘述

或者Docker:Replicating the GitLab CE 12.8.1 Environment

$ sudo apt install docker.io
$ docker pull gitlab/gitlab-ce:12.8.1-ce.0
$ docker run gitlab/gitlab-ce:12.8.1-ce.0

It will take few mins to run the container to start, in a new terminal we can check the docker process and

simultaneously get a shell on it.

0x04、漏洞复现

  • 1.在首页随便创建一个账号,然后登陆;
  • 2.登录后创建两个project/仓库,名字随意;
  • 3.两个project创建完成后,在test1中创建一个issues。填入payload;
![a](/uploads/11111111111111111111111111111111/../../../../../../../../../../../../../../etc/passwd)
  • 4.提交后,将这个创建好的issues move到前面创建好的另外一个project/仓库中;
    • 4.1 进入issues -> 编辑 -> 移动
  • 5.点击passwd附件
  • 6.enjoy

2022-04-29-11.49.15.png

一、CVE-2020-10977 思考

  • 为什么移动issues的时候,可以读取到文件呢?

1x01、猜测

显而易见,当创建issues的时候,我们提交上去的markdown代码被解析成了html代码,即:

<img src="https://git-lab-domain.com/ysoserial/ysoserial/uploads/11111111111111111111111111111111/../../../../../../../../../../../../../../etc/passwd" alt="a">

那么问题肯定出现在代码移动时,错误解析到了本地文件上,那么是哪里呢?

带着这样的疑问,去查看了相关的文章和代码;

  • Hacker one- Arbitrary file read via the UploadsRewriter when moving and issue

1x02、代码分析

作者提出:

  • The UploadsRewriter does not validate the file name, allowing arbitrary files to be copied via directory traversal when moving an issue to a new project. The pattern used to look for references is :
  • UploadsRewriter不验证文件名,允许在将问题移动到新项目时通过目录遍历复制任意文件,寻找引用的模式如下:
  MARKDOWN_PATTERN = %r{\!?\[.*?\]\(/uploads/(?<secret>[0-9a-f]{32})/(?<file>.*?)\)}.freeze

%r 为正则表达,用法可以参考:

  • 相关用法

并且:

  • This is used by the UploadsRewriter when copying an issue to also copy across the files:
  • 在当拷贝issue时同时也能够实现能够跨文件复制,就是因为UploadsRewriter的使用:
#/opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/gfm/uploads_rewriter.rb:

   @text.gsub(@pattern) do |markdown|
          file = find_file(@source_project, $~[:secret], $~[:file])
          break markdown unless file.try(:exists?)

          klass = target_parent.is_a?(Namespace) ? NamespaceFileUploader : FileUploader
          moved = klass.copy_to(file, target_parent)
   ...
   def find_file(project, secret, file)
        uploader = FileUploader.new(project, secret: secret)
        uploader.retrieve_from_store!(file)
        uploader
      end

参考

  • Hacker one- Arbitrary file read via the UploadsRewriter when moving and issue
  • GitLab任意文件读取漏洞复现(CVE-2020-10977)
  • GitLab任意文件读取漏洞CVE-2020-10977
  • HackTheBox — Laboratory Writeup

申明

转载请申明本文档链接
Post by: Bin4xin.

其他

HOME · 镜像 · 博客 · WIKI

此文档对您有帮助吗

文章目录
    • 如何查看Gitlab Web版本
    • 零、CVE-2020-10977
    • 0x01、CVE-2020-10977 漏洞概述
    • 0x02、影响版本
    • 0x03、环境搭建
    • 0x04、漏洞复现
    • 一、CVE-2020-10977 思考
    • 1x01、猜测
    • 1x02、代码分析
    • 参考
  • .. / 研究 / Gitlab /

    Author: Bin4xin.
    Build Ver: 2.1.5.1db1b0f release By Action.
    Time Build in: Sat, 07 May 2022 08:56:41 +0800
    Last modified Modified: 2022-05-05