从一次内部红队演练说起:我们是如何利用Nacos默认配置拿下集群权限的
从一次内部红队演练看Nacos安全攻防实战那是一个普通的周二下午我们红队接到任务对集团新上线的微服务架构进行渗透测试。作为攻击方我们没有任何内部权限只能从公开入口开始探测。谁也没想到这次看似平常的演练最终演变成了一场关于Nacos安全配置的深刻教训。1. 初始侦察发现暴露的Nacos控制台通过子域名扫描工具我们很快发现了一个有趣的地址nacos.internal.example.com。访问后跳转到一个登录页面经典的Nacos控制台界面。尝试用最常见的默认凭证用户名nacos 密码nacos令人惊讶的是系统竟然直接放行了——第一个安全防线就这样被突破。登录后可以看到完整的服务列表、配置中心和命名空间信息。这相当于拿到了整个微服务架构的地图。注意Nacos从2.2.0版本开始已强制要求修改默认密码但许多企业升级时并未严格执行此规定。2. 权限提升利用JWT密钥漏洞虽然进入了控制台但我们的目标是获取集群控制权。检查系统信息发现这是Nacos 1.4.0版本存在几个关键漏洞默认Token密钥nacos.core.auth.default.token.secret.key仍为初始值UA白名单nacos.core.auth.enable.userAgentAuthWhitetrue未启用服务身份验证缺少server.identity配置使用已知的默认密钥我们可以构造管理员Tokenimport jwt token jwt.encode( {sub: nacos, exp: 9999999999}, SecretKey012345678901234567890123456789012345678901234567890123456789, algorithmHS256 ) print(token)将这个Token添加到请求头后我们获得了完整的API访问权限。3. 集群接管绕过服务间鉴权真正的突破来自对集群通信的利用。在1.4.1之前的版本Nacos服务节点间通过User-Agent验证身份GET /nacos/v1/ns/service/list HTTP/1.1 Host: nacos-node1:8848 User-Agent: Nacos-Server我们简单修改请求头后集群节点就将我们的请求视为可信内部通信完全绕过了鉴权系统。通过这个漏洞可以修改服务路由规则注入恶意配置甚至直接关闭集群节点4. 防御加固企业级Nacos安全配置这次演练暴露出的安全问题可以通过以下措施有效防御4.1 基础安全配置配置项安全值说明nacos.core.auth.enabledtrue必须开启鉴权nacos.core.auth.server.identity.key自定义字符串集群身份标识Keynacos.core.auth.server.identity.value自定义字符串集群身份标识Valuenacos.core.auth.default.token.secret.key64位随机字符串JWT签名密钥4.2 网络层防护限制Nacos控制台的公网访问集群节点间通信使用专用网络对7848端口(JRaft通信)实施IP白名单4.3 运维最佳实践版本升级立即升级到2.2.3以上版本凭证管理禁用默认账号启用LDAP集成审计日志监控敏感操作如配置修改服务上下线用户权限变更5. 漏洞链的启示安全是一个体系这次渗透最值得反思的是看似独立的小漏洞如何形成致命攻击链默认凭证 → 控制台访问固定JWT密钥 → API权限提升UA验证缺陷 → 集群控制JRaft未隔离 → 主机沦陷每个环节单独看都不算高危但组合起来却足以摧毁整个微服务体系。这也印证了安全领域的一个基本原则防御强度取决于最薄弱的一环。