nacos docker容器从2.0.3升级到2.2.3,解决控制台身份验证绕过漏洞
·
背景与漏洞分析
近期生产环境因Nacos控制台存在身份验证绕过漏洞(CVE-2023-6271)被扫描告警。该漏洞源于Nacos默认配置未修改secret.key,攻击者可通过默认密钥生成JWT Token绕过鉴权访问敏感接口。官方在2.2.3版本修复了此问题,但升级涉及权限体系重构和数据库表结构变更,需谨慎操作以避免服务中断。以下是完整升级流程与关键注意事项。
一、升级前准备
-
环境检查
-
确认当前Nacos版本:通过指令查看容器镜像标签(2.0.3)
docker ps -
备份数据:数据库和本地挂载的配置文件
# 数据库备份 mysqldump -uroot -p nacos_config > /var/lib/mysql/nacos_config20240407.sql -
停止旧容器:
docker stop nacos-server && docker rm nacos-server
-
-
版本兼容性说明
官方建议从2.0.3直接升级到2.2.3,但需手动执行数据库变更脚本(若跳过中间版本可能引发字段缺失问题)。
二、升级操作步骤
1. 拉取镜像与参数配置
由于Docker官方镜像拉取较慢,建议使用国内镜像源加速:
docker pull docker.1ms.run/nacos/nacos-server:v2.2.3
启动命令关键参数解析:
docker run -d --name nacos-server \
-p 8848:8848 \
-e MODE=standalone \
-e NACOS_AUTH_ENABLE=true \ # 强制开启鉴权
-e NACOS_AUTH_TOKEN=base64编码后的密钥 \ # 需≥32字符原始字符串经Base64处理
-e NACOS_AUTH_IDENTITY_KEY=XXX \ # 身份标识键(避免特殊字符!)
-e NACOS_AUTH_IDENTITY_VALUE=XXX \ # 身份标识值(避免特殊字符!)
-v /path/to/config:/home/nacos/conf \
nacos/nacos-server:v2.2.3
2. 数据库表结构变更
执行以下SQL(从2.0.3升级需全部执行):
-- 新增加密字段与扩展信息
ALTER TABLE config_info ADD COLUMN encrypted_data_key VARCHAR(1024) DEFAULT '';
ALTER TABLE config_info_beta ADD COLUMN encrypted_data_key VARCHAR(1024) DEFAULT '';
ALTER TABLE his_config_info ADD COLUMN encrypted_data_key VARCHAR(1024) DEFAULT '';
ALTER TABLE his_config_info ADD COLUMN publish_type VARCHAR(50) DEFAULT 'formal';
ALTER TABLE his_config_info ADD COLUMN gray_name VARCHAR(50) DEFAULT NULL;
ALTER TABLE his_config_info ADD COLUMN ext_info LONGTEXT;
3. 客户端配置调整
在微服务中(以Spring Cloud为例),需添加鉴权信息:
yaml
复制
spring:
cloud:
nacos:
discovery:
username: nacos_user # 自定义用户(非默认nacos!)
password: strong_password
config:
username: ${spring.cloud.nacos.discovery.username}
password: ${spring.cloud.nacos.discovery.password}
三、关键避坑指南
1. NACOS_AUTH_TOKEN配置
- 原始字符串要求:需至少32位随机字符串(如
openssl rand -hex 16生成),再经Base64编码。 - 编码验证:可通过
echo -n "原始密钥" | base64检查是否含换行符(需去除)。
2. 身份标识参数的特殊字符
- 问题现象:客户端注册失败(如Seata报403错误),日志提示权限校验失败
- 原因分析:
NACOS_AUTH_IDENTITY_KEY/VALUE含#、&等字符时,HTTP传输中会被转义,导致服务端解析不一致。这也是困扰题主很久的问题,排查了两天 - 解决方案:仅使用字母、数字、下划线组合(如
app_id和dev_env)。
3. 数据库字段缺失报错
若启动后出现Unknown column 'encrypted_data_key'错误,说明表结构未更新,需重新执行SQL并重启服务。
四、升级验证
- 控制台访问
访问http://localhost:8848/nacos,应强制跳转登录页,使用自定义账号登录(非默认nacos/nacos)。 - 客户端注册检查
在服务日志中搜索Registering service... success,确认微服务正常注册。 - 漏洞修复验证
尝试未授权访问/nacos/v1/auth/users?pageNo=1&pageSize=10,应返回403状态码
更多推荐
所有评论(0)