nacos 身份认证绕过漏洞(QVD-2023-6271)
nacos 身份认证绕过漏洞(QVD-2023-6271)
male1a 黑伞安全 2023-08-02 17:50
JWT(Json Web Token)
0x00 JWT构成
Json Web Token
简称
JWT
,用做用户身份验证。那么其结构长什么样呢,下面我会通过一个例子去分析。
上面是一串
JWT
格式的字符串,在线解密查看内容:
https://jwt.io/
从解密的结果可以看到其由三部分组成
(头部、载荷、签名)
为什么说它
(JWT)
的名字里面带有
Json
不难看出,因为其解密出来的内容是按照
Json
格式存储的,下面通过上述的一个
JWT
例子对其三部分简单介绍一下
Header
Header
通常由两部分组成:令牌的类型,即
JWT
和正在使用的散列算法,如
SHA256
或
RSA
。
– 明文
不难看出
typ
为类型的缩写,
alg
为算法的缩写。然后,这个
JSON
被
Base64
编码,形成
JSON Web Token
的第一部分。
– 密文
Payload
令牌的第二部分是包含声明的有效负载。声明是关于实体(通常是用户)和其他元数据的声明。
– 明文
同样对其base64编码得到第二部分
– 密文
Signature
这部分为创建签名部分,必须采用
header
,
payload
,密钥三部分处理,利用
header
中指定算法进行签名。
例如
HS256(HMAC SHA256)
,签名的构成为:
然后将这部分同样
base64
编码形成
JWT
第三部分。
一张图看懂加密后的
JWT
0x01 JWT适用场景
Authentication(鉴权):
这是使用
JWT
最常见的情况。一旦用户登录,每个后续请求都将包含
JWT
,允许用户访问该令牌允许的路由,服务和资源。单点登录是当今广泛使用
JWT
的一项功能,因为它的开销很小,并且能够轻松地跨不同域使用。
Information Exchange(信息交换)
JSON Web Tokens
是在各方之间安全传输信息的好方式。因为
JWT
可以签名:例如使用公钥/私钥对,所以可以确定发件人是他们自称的人。此外,由于使用标头和有效载荷计算签名,因此您还可以验证内容是否未被篡改。
现在了解了Json Web Token的组成,下面理解其攻击手法就比较容易了。接下来实战复现一下。
nacos token.secret.key身份认证绕过漏洞(QVD-2023-6271)复现
0x00 简介
Nacos
是一个易于使用的平台,专为动态服务发现和配置以及服务管理而设计。可以帮助您轻松构建云原生应用程序和微服务平台。
0x01 漏洞概述
目前
Nacos
身份认证绕过漏洞
(QVD-2023-6271)
,也叫做
NVDB-CNVDB-2023674205
,暂无
CVE
编号,开源服务管理平台
Nacos
在默认配置下未对
token.secret.key
进行修改,导致远程攻击者可以绕过密钥认证进入后台,造成系统受控等后果。
0x02 影响版本
0.1.0 <= Nacos <= 2.2.0
0x03 环境搭建
漏洞版本从
GitHub
上下载带有漏洞的源码
可以选择2.2.0以下版本,比如下面这个
解压之后,在bin目录下使用cmd使用命令
startup.cmd -m standalone
来启动(java8以上环境运行)
拼接路径
nacos
到路径
0x04 漏洞复现
在
nacos
中,
token.secret.key
值是固定死的,位置在
conf
下的
application.properties
中:
0x05 获取token
利用该默认
key
可进行
jwt
构造,直接进入后台,构造方法:
在
https://jwt.io/
中:输入默认
key
:
然后再
payload
里面输入:
在这里注意:
1690889280
这个值是
unix
时间戳,换算一下,要比你系统当前的时间更晚,比如当前的时间是
2023年08月01日19:28:00
,在这里面的时间戳时间是8月2号:
注意jwt.io中的
secret base64 encoded
,要勾选
复制加密的
jwt
复制上面得到的值,抓包修改包,添加
Authorization
值
请求包如下:
可以看到返回
200
,说明登录成功,利用这个可以绕过身份认证,进入后台
使用Burp拦截网站请求,并拦截返回包。
0x06 利用获取token登录后台
在这里使用任意账号登录之后,再修改返回包就行了,用
burp
拦截:
0x07 替换返回包
然后
Forward
,这边返回的信息肯定是无效的:
在这里使用刚刚
burp
里面生成的返回包进行替换,全部复制过去:
全部放包
0x08 登录成功
0x09 修复方式
1.自行修改key
2.更新到最新版本