gitlab漏洞系列-绕过CI/CD给定配额限制
声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任。
背景
白帽小哥marandil于2021年提交了这个漏洞:
托管在gitlab.com上的项目,无论是公共的还是私有的,都可以使用私有运行程序实例,或者使用公共的、共享的运行程序来运行CI作业。 私人项目在CI/CD上面的共享运行器的给定配额被限制, 用户业务群组的配额可读路径为Preferences/Usage Quotas
(https://gitlab.com/-/profile/usage_quotas
), 组可读路径为Group / Settings /Usage Quotas
(https://gitlab.com/groups/[Group -name]/-/usage_quota
)。
可以通过快速启用并随后禁用group/project
的共享运行器来绕过这个限制。看起来,只有当管道作业完成运行并且启用了共享运行程序时,才会计算使用配额。
这也可能会影响使用共享运行器的自托管GitLab实例,尽管其影响要比公共实例小得多。
复现步骤
1.以新用户登录GitLab(也适用于组和老用户)
2.创建一个空项目,点击设置CI/CD
,并输入CI/CD
作业,例如:
test:
image: ubuntu
script:
- sleep 5m
3.提交更改。该作业应该开始自动运行,几分钟后,在https://gitlab.com/-/profile/usage_quotas
下应该可以看到;
4.打开另一个选项卡,进入Project/Settings/ CI/CD
,展开运行器并关闭此项目的启用共享运行器。
5.回到第一个选项卡,重新启动作业,例如https://gitlab.com/[user or group]/[project]/-/jobs/[job id]
,该作业现在应该暂停并发出警告:
This job is stuck because you don't have any active runners that can run this job.
6.回到第二个选项卡,将这个项目的启用共享运行器切换为on,等待几秒钟(~10),然后切换回OFF。
7.回到第二个选项卡,作业应该再次运行。完成后,请访问https://gitlab.com/-/profile/usage_quotas
。
原文始发于微信公众号(迪哥讲事):gitlab漏洞系列-绕过CI/CD给定配额限制
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论