![]()
这项功能原本旨在简化流程:开发者可以向一个秘密邮箱地址发送消息,从而在其GitLab项目中创建一个问题(issue)。但由于糟糕的安全默认设置,以及嵌入该地址中的长期有效令牌,任何知道该地址的人都有可能修改受保护的代码仓库。如果项目所有者公开或泄露了这些地址(部分人确实这样做了),那么他们就会面临风险。
GitLab提供的这种项目专属邮箱地址,以“将工作项通过邮件发送到此项目”按钮的形式呈现,Aikido Security发现,除了其预期功能外,它还能解锁对私有及公开项目的账户级访问权限。该功能在GitLab.com上对每个账户都默认开启,且无法关闭;在自托管的GitLab实例上,该功能也可能被启用。
“任何持有该地址的人都可以在你的账户能够访问的所有项目中推送代码并运行CI/CD任务,”这家应用安全公司在一篇描述其研究发现的博客文章中表示。
“现有设计面临的最大挑战是,任何拥有邮箱账户的人都可以向该地址发送邮件,并以该GitLab用户的身份进行操作,”Aikido安全研究员约瑟夫·莱昂(Joseph Leon)对CSO表示。“如果GitLab要求发送邮件的账户‘发件人’地址必须与GitLab用户的邮箱地址匹配,大部分风险就能得到缓解。”
GitLab确实允许用户设置限制,规定哪些IP地址可以访问其账户——但这些限制并不适用于邮件。“GitLab阻止了我们的浏览器访问,并拒绝了git clone操作。但它接受了邮件,提交内容最终落到了主分支上,”Aikido表示。
据GitLab方面回应,这种行为是设计意图使然,并非漏洞。Aikido对此评估提出质疑,认为“GitLab构建了一个能够触及账户内所有项目、并绕过IP限制的凭证,却将其包装成了一个邮箱地址。”
存在风险的地址格式为:incoming+project-id-glimt-XXXXXXXXXXXXXX-issue@incoming.gitlab.com
问题根源在于嵌入邮箱地址中、以“glimt-”为前缀的个人访问令牌(PAT),GitLab要求用户对其保密。GitLab在用户界面的令牌描述中警告:“请保管好此令牌。任何获得该令牌的人都能以你的身份创建问题。”
Aikido表示,该描述还补充称此令牌“不能用于访问任何其他数据”,但Aikido发现这一说法并不属实。同一账户下的五个不同项目提供了五个不同的私有邮箱地址,但“每个地址中嵌入的令牌都是相同的”。同一个令牌被用于整个账户,这意味着一旦令牌泄露,该账户下的所有公开或私有项目都会受到影响。
该令牌的用途不仅限于创建GitLab问题(例如报告漏洞或请求新功能)。只需简单更改令牌的后缀,就能诱使GitLab打开一个合并请求(merge request)。
这样做将使攻击者能够提交一个精心构造的补丁文件(包含一组代码更改),并让GitLab在该项目的CI/CD环境中执行攻击者控制的代码。
在Aikido向GitLab报告此问题后,该公司修改了用户界面中的描述,明确该令牌可用于创建问题“以及合并请求”。
该令牌并不会赋予攻击者对GitLab的无限访问权限:攻击者能做什么,仍取决于该秘密邮箱地址所关联账户的权限设置。
“组织层面受到的影响完全取决于用户现有的权限,”莱昂表示。“如果他们能够向主分支推送代码,或在某个特定项目上运行CI/CD流水线任务,那么该邮箱地址就会继承这些权限,其影响可能相当严重。”
针对账户内其他项目发起攻击也存在一定限制。攻击者需要提供目标项目的路径和ID。对于公开项目,这两项信息都是公开可见的;而针对私有项目发起攻击,则需要其路径被泄露,不过其ID是可以被猜测出来的。
莱昂补充说,这些邮箱地址被泄露的可能性很高。“我仅用了几个小时搜索,就发现了大约十几个已泄露的地址在网上流传。其中一些属于像wget2这样的知名开源项目,”他表示。
Aikido的建议是,应将这些邮箱地址视为凭证而非普通的邮件接收端点来对待。各组织应在公开代码仓库和文档中排查是否存在暴露的地址,若怀疑地址已泄露,应重置邮箱令牌,使现有地址失效。
Q&A
Q1:GitLab的问题邮件功能存在什么安全隐患?
A:该功能通过一个包含长期有效令牌的秘密邮箱地址创建问题,但由于安全默认设置不当,任何知道该地址的人都可能利用其修改受保护的代码仓库,甚至推送代码、运行CI/CD任务。
Q2:GitLab问题邮件功能能不能关闭?
A:不能。该功能在GitLab.com上对每个账户都默认开启且无法关闭,自托管的GitLab实例上也可能被启用,用户无法通过关闭功能来规避风险。
Q3:如果发现GitLab问题邮件地址被泄露该怎么办?
A:应将这类邮箱地址视为凭证对待,及时在公开代码仓库和文档中排查是否存在暴露的地址,一旦怀疑泄露,应立即重置邮箱令牌,使原有地址失效。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.