我发现gitlab中最新的SCIM(跨域身份管理)功能可让gitlab中的任何组的所有者创建一个和已经经过验证的电子邮件相绑定的帐户。也就是说,我可以创建一个和电子邮件地址ngalog@gitlab.com相绑定的帐户,在gitlab.com看来,ngalog@gitlab.com是已经经过验证的内部帐户,可访问内部服务。
![0a9e12c24f41dab01e7719b0fad14e65.png](https://i-blog.csdnimg.cn/blog_migrate/dff695e40f191a087c37dad0c3c8edb8.jpeg)
这将给利用Gitlab作为身份验证的客户端带来问题,因为和ngalog@gitlab.com相绑定,当客户端检查用户的电子邮件域是否匹配@gitlab.com时,就能成功绕过,进而非法访问一些内部服务。
我曾经有一个gitlab相关的内部服务/站点列表,它们都需要使用和gitlab.com有关的邮箱登录,虽然目前我暂时找不到了,但我相信gitlab的安全团队一定知道都有哪些服务。任意未知第三方对这些服务的访问将给gitlab的基础网络设施带来巨大的安全威胁。
复现步骤
- 在gitlab.com中,将你的群组升级为黄金。
- 访问https://gitlab.com/groups/GROUP_PATH/-/saml,并按照文档设置SAML SSO(单点登录)。
- 同一页面,创建SCIM令牌。
- 使用创建的SCIM令牌发出如下请求。
最终请求如下:
POST /api/scim/v2/groups/YOUR_GROUP_NAM