首页/安全/漏洞与攻击面速查/GitLab 实例暴露项自查
主机与服务风险面53 条

GitLab 实例暴露项自查

自建 GitLab 的常见暴露项包括:开放公开注册、项目默认可见性为公开、指标与健康端点匿名可读、版本信息泄露;代码托管平台一旦被入侵,影响会沿 CI/CD 链路扩散。

漏洞与攻击面速查安全更新于 2026-10-13

GitLab 暴露项是什么

自建 GitLab 的风险往往不在漏洞,而在默认配置留下的口子:允许任何人自助注册、新建项目默认可见性为公开、指标与健康端点匿名可读、版本信息对外可见。代码托管平台的特殊性在于它是链条的起点:仓库里有源码、配置与凭据,而 CI/CD 运行器通常持有部署权限,因此这里的泄露会沿着流水线扩散到全部环境。

基本信息

部署形态自建 Omnibus 包或容器化部署
高风险配置开放公开注册、项目默认公开、端点匿名可读
敏感端点/-/metrics、/-/health、/explore 项目列表
升级节奏按月发布安全修复版本,需持续跟进

典型使用场景

  • 上线后立即关闭公开注册,改为管理员邀请或接入企业身份源
  • 把实例级默认项目可见性设为内部或私有,再逐个调整例外项目
  • 用未登录视角访问指标端点与项目探索页,确认不返回内部信息
  • 定期审计个人访问令牌与项目访问令牌,回收长期未使用的凭据
  • 检查运行器注册令牌与执行权限,避免任意仓库都能调用生产部署

匿名视角自查

匿名视角自查
# 未登录状态下应无法读取指标,也不应列出内部项目
curl -s -o /dev/null -w '%{http_code}\n' https://gitlab.example.com/-/metrics
curl -s -o /dev/null -w '%{http_code}\n' https://gitlab.example.com/explore
curl -s -o /dev/null -w '%{http_code}\n' https://gitlab.example.com/-/health

# 检查版本信息是否对外暴露(用于判断补丁窗口)
curl -s https://gitlab.example.com/help | grep -o 'GitLab [0-9.]*' | head -1

管理侧核查清单

项目检查内容预期
注册限制Sign-up restrictions 是否关闭公开注册仅管理员可创建账号
项目可见性实例默认可见性设置私有或内部
端点访问指标与健康端点匿名访问需认证或限制来源
令牌审计个人与项目访问令牌清单无长期未使用凭据
运行器权限注册令牌与执行权限范围按项目最小授权
GitLab 每月发布节奏稳定,安全修复通常包含在当月的补丁版本里:用实例版本号比对官方发布公告,即可确定自己是否落在受影响范围。
只关闭注册入口是不够的:历史遗留的公开项目、未过期的访问令牌与过宽运行器权限,仍然能让外部取得代码与部署能力。

易错点

  • 只关了注册入口,历史遗留的公开项目与未过期令牌仍在泄露代码与凭据
  • 运行器注册令牌范围过宽:任意项目都能提交流水线任务并在生产环境执行
  • 指标端点匿名可读:暴露用户数、任务积压与版本细节,辅助攻击者规划后续动作
  • 长期不升级:GitLab 的安全修复按月发布,落后多个版本意味着累积了多批已知问题

数据来源与参考

  • GitLab Docs(Sign-up restrictions 与安全配置)
  • GitLab 版本发布与安全公告
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌