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 每月发布节奏稳定,安全修复通常包含在当月的补丁版本里:用实例版本号比对官方发布公告,即可确定自己是否落在受影响范围。
只关闭注册入口是不够的:历史遗留的公开项目、未过期的访问令牌与过宽运行器权限,仍然能让外部取得代码与部署能力。