Harbor 暴露风险是什么
Harbor 是开源的企业级镜像仓库,提供角色权限、项目隔离、镜像扫描与复制能力。它安装后自带一个管理员账号,初始口令是文档中公开的固定值,若不修改即等同无认证;此外项目可见性默认可能为公开,导致仓库接口匿名可读。镜像仓库处在供应链的关键位置:被读取时泄露的是镜像内的源码、配置与内嵌凭据,被写入时则可能被投毒替换,影响所有下游部署。
基本信息
| 定位 | 企业级容器镜像仓库(含 RBAC 与扫描) |
|---|---|
| 默认端口 | HTTP 80 / HTTPS 443(部署时可自定义) |
| 关键接口 | /api/v2.0/projects、/v2/_catalog、/v2/<项目>/manifests |
| 初始账号 | admin,初始口令为文档给定的固定值,必须首次登录修改 |
| 常见误配 | 项目公开 + 匿名可拉取 + 弱口令管理员 |
典型使用场景
- 部署完成后立即登录修改管理员口令,并开启登录失败锁定
- 对公网可达的仓库做匿名视角自查,确认接口不返回项目与镜像清单
- 按项目划分子团队权限,开发者只拥有推送权限而非管理员
- 开启内置漏洞扫描与内容信任策略,阻止高危镜像进入生产
- 迁移或下线旧 registry 时同步回收其访问凭据与 DNS 解析
匿名可读性测试
匿名可读性测试
curl -s -o /dev/null -w '%{http_code}\n' https://harbor.example.com/v2/_catalog
curl -s -o /dev/null -w '%{http_code}\n' https://harbor.example.com/api/v2.0/projects
# 期望未认证返回 401;返回 200 说明匿名访问未关闭
curl -s https://harbor.example.com/api/v2.0/projects | head -c 300
# 已登录状态下枚举可拉取项目,核对与授权清单是否一致暴露项与处置
| 暴露项 | 表现 | 处置 |
|---|---|---|
| 管理员口令 | 使用文档默认口令即可登录 | 首次登录立即修改并启用锁定策略 |
| 项目可见性 | 匿名可枚举项目与镜像标签 | 项目设为私有,按角色授权 |
| 仓库接口 | /v2/_catalog 匿名返回仓库列表 | 关闭匿名拉取,接口经网关鉴权 |
| 网络暴露 | 仓库端口对公网直接开放 | 仅对构建网段开放,外网走网关 |
收敛检查清单
收敛检查清单
1. 修改 admin 初始口令,启用登录失败锁定与管理员操作审计
2. 项目可见性设为私有,按团队与角色授予拉取/推送权限
3. 开启镜像漏洞扫描(内置 Trivy)并设置阻断策略
4. 仓库仅对构建网段开放,公网入口统一走网关鉴权
5. 定期审计机器人账号与访问令牌,回收不再使用的凭据Harbor 的初始口令来自官方文档,属于公开信息,任何部署在公网的实例都应在被扫描之前完成口令修改与匿名访问关闭。
镜像仓库是供应链关键资产:读取泄露镜像内的凭据与源码,写入则能被投毒替换,影响所有基于该镜像的下游环境。