私有Registry沦陷实录:27个未授权镜像推送事件复盘,附GCP/AWS/EKS三平台RBAC最小权限模板
第一章私有Registry沦陷事件全景图谱私有Docker Registry作为企业容器镜像分发的核心枢纽其安全性直接关系到整个CI/CD链路与生产环境的可信基线。近年来多起因配置疏漏、凭证泄露或未授权访问导致的Registry沦陷事件频发攻击者借此植入后门镜像、窃取敏感构建上下文甚至横向渗透至Kubernetes集群。 典型入侵路径包括弱密码或默认凭据暴露于公网、未启用TLS导致Basic Auth凭证明文传输、未配置HTTP Basic Auth或OAuth2鉴权中间件、以及Registry后端存储如S3、MinIO权限过度开放。一旦失守攻击者可执行任意镜像推送、覆盖基础镜像标签如alpine:latest、或通过恶意Dockerfile触发构建时代码执行。 以下为快速检测Registry暴露面的关键命令# 检查是否响应未认证请求返回200即存在风险 curl -I http://registry.example.com/v2/ # 验证匿名用户能否列出仓库正常应返回401 curl -X GET http://registry.example.com/v2/_catalog # 尝试获取镜像清单若无需Token即可返回manifest则严重告警 curl -H Accept: application/vnd.docker.distribution.manifest.v2json \ http://registry.example.com/v2/myapp/manifests/latest常见高危配置模式如下使用registry:2镜像但未挂载自定义config.yml在config.yml中遗漏auth配置段或错误设置token服务地址将http.addr绑定至0.0.0.0:5000且未前置反向代理做访问控制下表对比了安全基线配置与典型误配项配置项安全推荐值高危误配示例启用了TLStrue强制HTTPS仅启用HTTP且未设http.tls身份验证集成Keycloak/OIDC或Nginx JWT校验auth: {htpasswd: {realm: Registry, path: /auth/htpasswd}}且htpasswd文件硬编码于镜像中存储后端权限最小权限策略如AWS IAM Role限制仅s3:GetObject使用Root Access Key且Bucket Policy允许public-read-writegraph LR A[外部扫描器探测80/443/5000端口] -- B{Registry响应v2 API} B --|是| C[尝试匿名/catalog列表] B --|否| D[标记为低暴露面] C --|成功返回仓库名| E[判定为未鉴权或弱鉴权] C --|401/403| F[进一步测试Token服务连通性] E -- G[推送恶意busybox:backdoored镜像] F -- H[爆破htpasswd或窃取valid token]第二章未授权镜像推送的27类攻击路径深度解析2.1 基于Docker CLI配置泄露的凭证盗用与越权推送敏感配置文件暴露路径Docker CLI 默认读取~/.docker/config.json其中可能包含 base64 编码的 registry 凭据{ auths: { https://index.docker.io/v1/: { auth: dXNlcjpwYXNzd29yZA // base64(user:password) } } }该字段若被容器挂载或误提交至代码仓库攻击者可直接解码获取凭据。越权推送利用链窃取config.json后执行docker login自动复用认证信息通过docker push向目标镜像仓库如私有 Harbor推送恶意镜像权限影响范围对比凭证类型默认作用域越权风险CLI config auth所有已登录 registry高无命名空间隔离Registry token单次会话中需实时窃取2.2 Registry v2 API未鉴权端点滥用与匿名写入链利用关键未鉴权端点Docker Registry v2 默认暴露的/v2/健康检查与目录发现端点常被忽略鉴权配置GET /v2/ HTTP/1.1 Host: registry.example.com响应 200 OK 表明服务可达若GET /v2/_catalog未设访问控制攻击者可枚举全部仓库名。匿名写入链构成以下三步构成完整匿名写入链利用POST /v2/repo/blobs/uploads/初始化上传无需认证通过PUT /v2/repo/blobs/uploads/uuid?digestsha256:...提交恶意镜像层调用PUT /v2/repo/manifests/tag绑定恶意层至公开标签风险矩阵端点默认鉴权匿名可操作/v2/否探测、枚举/v2/repo/blobs/uploads/否若未配readonly上传任意 blob/v2/repo/manifests/tag否若 registry 未启用 authz 插件覆盖合法镜像2.3 TLS证书绕过与中间人劫持导致的镜像篡改注入常见证书绕过模式开发中常因调试便利性禁用TLS验证例如在Go客户端中http.DefaultTransport.(*http.Transport).TLSClientConfig tls.Config{InsecureSkipVerify: true}该配置使客户端忽略服务器证书链校验攻击者可在局域网内部署恶意代理伪造镜像仓库响应并注入恶意层。MITM注入路径对比场景影响范围检测难度HTTP重定向劫持全量拉取请求低明文可见TLS证书伪造HTTPS镜像源高需配合私钥或CA信任防御建议强制启用证书固定Certificate Pinning使用可信CA签发的域名证书禁用自签名通配符2.4 Harbor/Portainer等UI组件CSRFXSS组合漏洞触发的后台推送劫持攻击链路解析CSRF 诱使管理员提交恶意表单配合 XSS 注入
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2548285.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!