声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任。
背景
xanbanx于2019年提交了这个漏洞: 当在GitLab中导出Github连接库时,项目导出包含external_webhook_token。这个令牌允许任何拥有它的人伪造真实的请求来触发GitLab中的CI管道,尽管这个人可能已经不是项目成员了。
复现步骤
在此之前,创建一个Github帐户,再创建一个项目,并推送一个有效的.gitlab-ci.yml
文件。
1.创建一个新项目。为外部仓库选择CI/CD导入一个项目;
2.在Connect repositories from功能下选择github;
3.从你的GitHub账户输入你想导入项目个人访问令牌;
4.选择你之前在Github创建的项目进行同步
5.导入项目后,转到https://example.gitlab.com/
6.下载项目存档,解压,并检查包含的project.json
...
"jobs_cache_index": null,
"external_authorization_classification_label": "",
"external_webhook_token": "hcnPbsfximlueXxaaIkg",
"pages_https_only": true,
"merge_requests_author_approval": null,
...
注意,这是报告的一个假标记。当查看代码时,可以看到请求POST:id/mirror/pull
在https://gitlab.com/gitlab-org/gitlab/blob/master/ee/lib/api/project_mirror.rb#L59
中。这个请求用于为Github连接的存储库触发一个新的管道。该请求使用X-Hub-Signature
头对创建管道的请求进行身份验证。这个签名是通过使用external_webhook_token
作为密钥对请求数据计算HMAC来计算的。拥有external_webhook_token
意味着您可以制作一个请求并伪造一个有效的X-Hub-Signature来创建一个新的管道。因此,任何可以下载项目的人,例如当他不再是项目成员时,都可以编写这样的请求,从而触发管道。
原文始发于微信公众号(迪哥讲事):gitlab漏洞系列-Webhook领导泄露导致CI管道触发
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论