gitlab漏洞系列

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gitlab漏洞系列相关的知识,希望对你有一定的参考价值。

参考技术A gitlab漏洞系列-“外部状态检查”API泄漏关于实例的状态检查的数据

这个漏洞是joaxcar小哥在2021年10月份提交的:

用于从外部状态检查返回批准的API接口包含一个IDOR,该IDOR允许用户列出关于GitLab实例上所有外部状态检查的信息。该功能是一个终极版功能(注:终极版一般都是付费的),但可以在GitLab.com上试用。所以攻击的是可能是一个常规帐户。

当配置了外部状态检查时,项目将向指定的端点发送关于MRs的信息。然后可以配置这个端点来响应“通过”状态检查的请求。文档详见: https://docs.gitlab.com/ee/user/project/merge_requests/status_checks.html;这个API的接口是:

关键参数为 sha 和 external_status_check_id 。这个参数告诉GitLab请求的目标是哪个外部状态检查。从GitLab返回的是JSON,包含关于MR的信息,但也包含关于状态检查配置的信息。通过修改发送的ID,用户可以获得实例上任何状态检查的信息(甚至来自Private的项目)。

关于状态检查的泄露信息可能包含:

1.创建两个用户:受害用户victim01和攻击用户attacker01

2.以victim01的身份登录,并在 https://gitlab.domain.com/projects/new#blank_project 上创建一个名为victim_project的新私有项目

3.转到项目设置 https://gitlab.domain.com/victim01/victim_project/edit ,在“General”下展开“Merge request”。向下滚动到“状态检查”,然后单击“新建”

4.将状态检查命名为“受害者状态检查”,并输入API端点 https://victim.hidden.com 。

5.点击保存

6.登出并以attacker01登陆

7.再次执行步骤2到5,但将项目命名为attacker_project并进行状态检查。记下项目的ID。我们称之为attackid

8.在 https://gitlab.domain.com/attacker01/attacker_project/-/branches/new 创建分支attacker_project

9.当分支被创建时,点击 Create new merge request 。将MR随意命名并单击创建。

10.访问 https://gitlab.domain.com/-/profile/personal_access_tokens 并为attacker01创建一个访问令牌,我们将其称为TOKEN

11.打开终端并发出此请求(这里的SHA只是“a”,我们将得到正确的响应)

12.这个初始请求将返回一个错误,主要是返回正确的 sha 是 sha > 这样的信息

13.现在发送正确的SHA:

14.我们将得到一个响应,其中包含关于MR的信息,最后是关于状态检查的信息

15.现在再次发送相同的请求,但将状态检查id更改为1

16.同样的MR信息会被返回,但是最后会有来自victim_project的关于私有状态检查的信息

以上是关于gitlab漏洞系列的主要内容,如果未能解决你的问题,请参考以下文章

Gitlab无需认证RCE漏洞复现(CVE-2021-22205)

Gitlab无需认证RCE漏洞复现(CVE-2021-22205)

CVE-2021-22205——Gitlab 远程命令执行漏洞复现

安全-GitLab任意文件读取漏洞复现(CVE-2016-9086)

Gitlab 远程命令执行漏洞(CVE-2021-22205)分析

微软谷歌和Atlassian全都调高了漏洞报告奖励