一、前言
nacos 2.2.0.1以下版本会有一个nacos默认secret.key配置不当权限绕过漏洞
,等级为高危。形成原因是nacos的配置文件中存在这么一个secret.key
默认配置:
nacos.core.auth.plugin.nacos.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789
会被他人利用进行提权从而达到系统受控的目的。
二、解决
解决这个问题需要对这个key的默认值进行修改,建议不要使用明文,可以用base64
,key的长度要32位以上,下面介绍一下在两种环境下的修改方法:
2.1 centos系统
找到nacos的安装目录,假设是在/usr/local/nacos
# 打开配置文件所在目录 cd /usr/local/nacos/conf # 对文件进行编辑 vim application.properties
定位到secret.key
所在行,输入斜杠/
,然后再输入secret.key
,最后回车
,如:
/secret.key
然后使用键盘的方向键定位到要修改的值,输入i
进入编辑模式,之后就可以进行修改了。
修改好之后保存,先按Esc
键退出编辑模式,最后输入以下命令进行保存:
:wq
保存完之后重启一下nacos即可。
首先打开bin
目录,bin
目录是conf
的同级目录
cd ../bin
先关闭
sh shutdown.sh
再启动,这里使用的是单机模式
sh startup.sh -m standalone
2.2 docker容器
1、在宿主机上修改
docker环境下如果映射了宿主机目录的话,直接在宿主机上修改配置文件重启容器即可。
2、在docker容器里面修改
如果没有映射宿主机的目录,则可以进入docker容器内进行修改。
docker exec -it nacos bash
默认目录是/home/nacos/conf
,然后安装centos系统的修改方法进行修改。
3、直接修改启动命令
如果使用默认配置呢,可以在启动命令中增加NACOS_AUTH_TOKEN
参数来达到修改目的,这种方式更为简单。
docker环境的nacos默认配置如下
nacos.core.auth.plugin.nacos.token.secret.key=${NACOS_AUTH_TOKEN:SecretKey012345678901234567890123456789012345678901234567890123456789}
先rm
旧的容器
# 强制停止并删除容器 docker rm -f containerId(容器id) # containerId(容器id) 可以使用下面的命令查看,第一列就是容器id docker ps # 或 docker rm -f nacos
或者使用下面的方式,先停止再移除
# 先停止nacos容器 docker stop nacos # 再删除nacos容器 docker remove nacos
然后执行下面命令启动docker,本例nacos的版本是v2.1.1
docker run --restart=always -d -p 8849:8848 -p 9848:9848 --name nacos --network bridge --env MODE=standalone --env SPRING_DATASOURCE_PLATFORM=mysql --env MYSQL_SERVICE_HOST=192.168.10.1 --env MYSQL_SERVICE_PORT=3306 --env MYSQL_SERVICE_DB_NAME=nacos --env MYSQL_SERVICE_USER=root --env MYSQL_SERVICE_PASSWORD=root --env NACOS_AUTH_TOKEN=xxx nacos/nacos-server:v2.1.1
这样就行了
三、总结
对于这个漏洞大家最好都去排查一下,在第一时间去解决。解决的途径有两种,一就是像上述方法一样修改默认值,二是升级nacos的版本,在新版本中上面的配置被弃用,取而代之的是nacos.core.auth.plugin.nacos.token.secret.key
,没有默认值,第一次启动之前需要配置否则会报异常,在一定程度上杜绝了旧版本的默认值问题。