首页/安全/漏洞与攻击面速查/Docker Registry 未认证暴露
主机与服务风险面53 条

Docker Registry 未认证暴露

使用 registry:2 自建镜像仓库且未启用认证时,/v2/_catalog 会列出全部仓库名,镜像层可被匿名拉取;镜像中可能包含凭据、源码等供应链敏感内容。

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

Docker Registry 暴露风险是什么

用官方 registry:2 镜像自建仓库时,若没有配置认证,任何能访问服务的人都可以调用 Registry HTTP API v2:/v2/_catalog 会列出全部仓库名,标签与镜像层可被匿名拉取。镜像层里常常包含构建期的环境文件、内网地址、依赖清单乃至写死在镜像中的凭据。更麻烦的是删除接口默认可用,未认证暴露时镜像可能被直接删除,影响发布链路可用性。

基本信息

组件Docker Distribution(registry:2 官方镜像)
默认端口5000(通常经 Nginx 反代到 443)
关键接口/v2/、/v2/_catalog、/v2/<name>/tags/list
认证方式htpasswd 基础认证、令牌认证或改用 Harbor 等方案
常见误配未启用 auth、未挂载证书、删除 API 未关闭

典型使用场景

  • 新建自建仓库后先做匿名访问测试,确认 /v2/ 返回 401
  • 给仓库配置 TLS,避免凭据与镜像层在网络上明文传输
  • 为不同团队分配独立账号,避免全公司共用一个推送凭据
  • 评估从 registry:2 迁移到带 RBAC 与扫描能力的 Harbor
  • 下线旧仓库时清理 DNS 记录与反向代理配置,避免残留入口

匿名访问测试

匿名访问测试
curl -s -o /dev/null -w '%{http_code}\n' https://registry.example.com/v2/
curl -s -o /dev/null -w '%{http_code}\n' https://registry.example.com/v2/_catalog
# 期望未认证返回 401
curl -s https://registry.example.com/v2/_catalog | head -c 300
# 返回 200 且带仓库列表,说明认证未启用

配置要点(compose 片段)

配置要点(compose 片段)
registry:
  image: registry:2
  environment:
    REGISTRY_AUTH: htpasswd
    REGISTRY_AUTH_HTPASSWD_REALM: Registry
    REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
    REGISTRY_HTTP_TLS_CERTIFICATE: /certs/domain.crt
    REGISTRY_HTTP_TLS_KEY: /certs/domain.key
  volumes:
    - ./auth:/auth:ro      # htpasswd 凭据文件
    - ./certs:/certs:ro    # 证书,避免明文传输

加固项与效果

加固项效果注意
启用 htpasswd拦截未认证拉取与推送改配置后必须重启容器才生效
启用 TLS保护凭据与镜像层传输证书过期需纳入监控
来源限制只允许构建网段访问公网入口改走网关鉴权
关闭删除 API防止镜像被误删或恶意删除需按版本确认开关名称
registry:2 只提供仓库存储与基础认证:若需要漏洞扫描、项目隔离与审计日志,直接改用 Harbor 这类上层方案比在 registry 上叠加组件更省事。
镜像层一旦可被匿名拉取,等于把镜像构建时的全部上下文交出去:排查时应同时评估其中的凭据是否需要按泄露流程更换。

易错点

  • 启用了 htpasswd 但忘记重启容器,认证配置未生效却没有任何提示
  • 只在前端加了认证、未关闭 /v2/_catalog:匿名仍能枚举仓库名,据此拉取具体标签
  • 镜像中写死凭据且仓库匿名可读:一次拉取即完成凭据泄露
  • 未限制来源网段,把仓库直接暴露在公网:删除 API 可用时存在被清空镜像的风险

数据来源与参考

  • Docker Distribution 文档(认证与配置)
  • Docker Registry 官方镜像文档
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌