当前位置: 首页 > article >正文

Nacos未授权新建用户漏洞(/nacos/v1/auth/users)

目录

一、问题

二、分析漏洞成因及影响范围

三、漏洞修复方案

四、应用修复方案到实际环境中

五、总结


一、问题

1、/nacos/v1/auth/users 漏洞主要涉及未授权访问和权限绕过两个方面。未授权访问通常是由于配置不当或安全机制缺失导致的,而权限绕过则可能是利用了默认密钥、Header注入等手段。

2、存在漏洞的接口验证:通过漏洞未授权新建用户漏洞,该漏洞是代码缺陷,导致可以未授权添加任意用户登录到后台管理系统,导致服务器被控制,或服务器内部资料泄露等等,导致网站处于极度不安全状态。

二、分析漏洞成因及影响范围

1、成因 ‌

  • 默认JWT密钥‌:在Nacos <= 2.2.0版本中,JWT密钥默认且固定,攻击者可以通过伪造JWT来绕过身份验证。 ‌
  • User-Agent绕过‌:在Nacos的某些版本中,如果请求的User-Agent被设置为"Nacos-Server",则不进行身份验证,允许未授权访问。

2、影响范围

  • 影响版本:根据提供的信息,/nacos/v1/auth/users漏洞主要影响Nacos的多个版本,包括但不限于0.1.0到2.2.0。
  • 潜在影响:攻击者可以利用这些漏洞创建用户、获取用户列表、敏感配置信息等,进而对系统进行进一步攻击。

三、漏洞修复方案

1、官方修复方案

  1. 更新至最新版本‌:官方通常会在新版本中修复已知的安全漏洞。建议将Nacos升级到最新版本(如2.2.0.1或以上),这里我下载的目前最新的2.4.3版本。
  2. 首先第一步查询下项目之间的版本对照(nacos、Spring Boot 、Spring Cloud Alibaba),不然后期会出现各种无法预测的版本冲突问题,,可以参考链接:版本说明 · alibaba/spring-cloud-alibaba Wiki · GitHub
  3.  下载nacos,可以通过下方下载地址下载对应的版本:发布历史 | Nacos 官网

  4. 将下载之后的文件解压

  5. 修改配置文件

 (1)打开conf下的application.properties

  • 配置数据库
  • 配置nacos账号密码
  • 修改token的密钥
  • 关闭User-Agent绕过:如果可能,修改Nacos的认证逻辑,确保不再基于User-Agent进行身份验证。
##修改conf/application.properties文件

#使用cluster模式需要数据库配置
db.url=jdbc:mysql://192.168.1.128:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
 db.user=ggny
 db.password=Ggny


#新版本默认开启及鉴权验证
nacos.core.auth.enabled=true
# 必须设置
# 用于在请求、登录 nacos 时,可通过验证
nacos.core.auth.server.identity.key=nacos
nacos.core.auth.server.identity.value=nacos
# 设置用于生成token的密钥, 需要原文不低于32位的Base64加密的结果, 
nacos.core.auth.plugin.nacos.token.secret.key=asdhjhjhjhjhHKJHKkhjkHKJHKhkhkHKjkjKHKhHK=

#user-agent 新版本默认也是关闭的
nacos.core.auth.enable.userAgentAuthWhite=false

(2)打开conf下的cluster.conf 配置nacos服务器ip端口,如果是单机只配置一个ip

192.168.1.112:8848
192.168.1.189:8848

6.启动nacos服务

启动nacos有两种模式,我直接使用cluster模式,启动后访问链接:http://localhost:8848/nacos

(1)windows:bin目录下的startup.cmd文件,修改set MODE="cluster",直接双击启动

(2)linux:bin目录下的startup.sh文件,启动: sh bin/startup.sh -m cluster

7.构建springboot项目,使用的maven进行构建配置对应版本

这里可以根据前边写的nacos版本,找官方给出的对应nacos组件版本,这里我使用的nacos2.4.3版本,由于刚发布,还没有对应版本,但是不用担心,只要使用2.0以上的对应版本,一般都没问题,这里我选择了Spring Cloud Alibaba Version:2.2.9.RELEASE 版本,这是可以根据你目前的springboot版本来决定的,比如我的springboot版本是2.3.12.RELEASE,那样我用Spring Cloud Alibaba Version:2.2.9.RELEASE 版本就可以。这两个版本尽量使一定要对应的,但可以不跟nacos服务器版本对应。如果Spring Cloud Alibaba Version版本和springboot版本相差太多,系统启动会报403错误,系统可能无法启动。

        <!-- nacos服务注册/发现-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.2.9.RELEASE</version>
        </dependency>
        <!--// 配置中心-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>2.2.9.RELEASE</version>
        </dependency>

8.springboot配置文件配置

主要是在原有的nacos配置中加入了用户名密码配置,用于鉴权验证,这样每次访问naocs服务器都必须要进行用户名密码验证,这样就杜绝了未授权访问用户漏洞

spring.application.name=AutoControlServer
spring.profiles.active =dev
spring.cloud.nacos.discovery.server-addr= localhost:8848
spring.cloud.nacos.discovery.namespace=545feab4-3a6f-4b54-b371-df7ed4fede7f
#加入了用户名密码验证配置
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos
spring.cloud.nacos.config.prefix=AutoControlServer
spring.cloud.nacos.config.server-addr=localhost:8848
spring.cloud.nacos.config.file-extension =yml
spring.cloud.nacos.config.namespace=545feab4-3a6f-4b54-b371-df7ed4fede7f
#加入了用户名密码验证配置
spring.cloud.nacos.config.username=nacos
spring.cloud.nacos.config.password=nacos

2、在原版本上修改相关配置

第二种方案,是我用的方案,就是不升级nacos,但通过更改nacos配置文件,实现升级版本一样的漏洞修复方式。之所以这样主要是因为我比较懒,因为升级到很高版本的nacos,对应系统中的nacos版本也要升级,那对应的springboot版本也要升级才行。我目前springboot版本2.1.1.RELEASE,对应的Spring Cloud Alibaba Version:2.1.2.RELEASE版本,对应nacos1.1.4版本,完全达不到要求(至少要2.0以上才行)。而我并不想升级springboot版本,因为升级springboot版本意味着要升级很多依赖jar包,可能会产生各种版本兼容性问题。所以目前我并不想升级。

1、nacos版本,就算你不想升级,也必须保证最好是nacos2.0以上,因为版本太低了,可能账号密码验证的配置以及功能逻辑,低版本并没有实现。我这里用的就是NACOS2.0.0,他有我需要的配置,正常来说它的对应的springboot版本2.3.12.RELEASE,对应的Spring Cloud Alibaba Version:2.2.7.RELEASE版本,但是实际上使用springboot版本2.1.1.RELEASE,对应的Spring Cloud Alibaba Version:2.1.2.RELEASE版本,也是没有问题的,nacos跟这两个的版本是可以不用一致的,但是版本最好别相差太大。

5、修改配置文件

以为第一种方案已经把如何配置启动等方式写的非常详细,第二种方案中,我只写不一样的地方。

低版本的nacos中,鉴权验证默认是关闭,需要手动开启,nacos用户名密码默认也是空的,这些配置修改以后,就可以实现最新版本nacos一样的效果,修复用户鉴权漏洞。

  • 开启及鉴权验证
  • 设置nacos用户名密码
  • 设置生成新的token秘钥
  • 关闭user-agent
##修改conf/application.properties文件



#开启及鉴权验证
nacos.core.auth.enabled=true
# 必须设置
# 用于在请求、登录 nacos 时,可通过验证
nacos.core.auth.server.identity.key=nacos
nacos.core.auth.server.identity.value=nacos
# 设置用于生成token的密钥, 需要原文不低于32位的Base64加密的结果, 
nacos.core.auth.plugin.nacos.token.secret.key=asdhjhjhjhjhHKJHKkhjkHKJHKhkhkHKjkjKHKhHK=

#user-agent 关闭
nacos.core.auth.enable.userAgentAuthWhite=false

7.构建springboot项目,使用的maven进行构建配置对应版本

这里前前已经说明,根据我自己的springboot版本2.1.1.RELEASE,引入对应的Spring Cloud Alibaba Version:2.1.2.RELEASE版本。

<!--// 服务发现(注册中心)-->
    <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
      <version>2.1.2.RELEASE</version>
    </dependency>
    <!--// 配置中心-->
    <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
      <version>2.1.2.RELEASE</version>
    </dependency>

 8.springboot配置文件配置

跟第一种方案一样,在原有的nacos配置上加入了用户名密码验证配

spring.application.name=AutoControlServer
spring.profiles.active =dev
spring.cloud.nacos.discovery.server-addr= localhost:8848
spring.cloud.nacos.discovery.namespace=545feab4-3a6f-4b54-b371-df7ed4fede7f
#加入了用户名密码验证配置
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos
spring.cloud.nacos.config.prefix=AutoControlServer
spring.cloud.nacos.config.server-addr=localhost:8848
spring.cloud.nacos.config.file-extension =yml
spring.cloud.nacos.config.namespace=545feab4-3a6f-4b54-b371-df7ed4fede7f
#加入了用户名密码验证配置
spring.cloud.nacos.config.username=nacos
spring.cloud.nacos.config.password=nacos

四、安全漏洞验证

这样服务启动后就可以注册到nacos上了,并且解决了安全漏洞,再想不进行验证创建访问用户是不可能的了。

五、总结

针对这个漏洞的解决方案,主要nacos版本升级后,在配置文件中开启了鉴权验证,只要你的nacos开启了鉴权验证,并且对应的系统程序中,nacos客户端依赖版本可以跟服务端匹配,并且修改相应的配置文件,就可以解决这个问题。


http://www.kler.cn/a/522267.html

相关文章:

  • Windows11无法打开Windows安全中心主界面
  • 图漾相机——C++语言属性设置
  • 免杀国内主流杀软的恶意样本分析
  • STM32 LED呼吸灯
  • 团体程序设计天梯赛-练习集——L1-022 奇偶分家
  • Windows11 安装poetry
  • 深入理解JWT及其应用
  • 简易CPU设计入门:控制总线的剩余信号(一)
  • 粒子群算法 笔记 数学建模
  • 真正理解std::move
  • < OS 有关 > 阿里云 几个小时前 使用密钥替换 SSH 密码认证后, 发现主机正在被“攻击” 分析与应对
  • 关于Dubbo的面试题概念原理配置及代码
  • 【信息系统项目管理师-选择真题】2012上半年综合知识答案和详解
  • 十三先天记
  • 【面试】【前端】前端浏览器考题总结
  • 深度学习|表示学习|卷积神经网络|输出维度公式|15
  • HTML 符号详解
  • 安全策略初始实验
  • 30289_SC65XX功能机MMI开发笔记(ums9117)
  • 深入理解动态规划(dp)--(提前要对dfs有了解)
  • 【OMCI实践】ONT上线过程的omci消息(二)
  • leetcode 209. 长度最小的子数组
  • AI 模型评估与质量控制:生成内容的评估与问题防护
  • Web开发 -前端部分-CSS3新特性
  • unity学习20:time相关基础 Time.time 和 Time.deltaTime
  • 基于Django的微博舆情分析系统的设计与实现