Nacos身份绕过漏洞(QVD-2023-6271)
我正在参加「金石计划4.0」
1.nacos身份绕过漏洞
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硬编码漏洞,应该将密钥存储在安全的密钥存储库中,并且只有授权的应用程序可以访问它。
由上可见,修改该漏洞也是很快,只需要修改
token.secret.key
的值即可。官方建议,修复
3.漏洞修复
token.secret.key
修改application.properties
文件:
nacos.core.auth.default.token.secret.key=VGhpc0lzTXlTZWNyZXRLZXlMbHN5ZG4xMjMhQCMrLT0=
这里对应的key为这个:
原始的key长度,一定要大于32,否则会导致登录失败。
可以自行对应修改,或者直接使用该
key
也是可以的。
server.identity.key
和server.identity.value
### 配置自定义身份识别的key(不可为空)和value(不可为空)
nacos.core.auth.server.identity.key=llsydn
nacos.core.auth.server.identity.value=Llsydn123!@#
注意:
由于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:
- 默认得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访问的
accessToken
了。
这个信息,针对nacos的可视化客户端是存放在Local Storage
的
那我们直接用postman请求拿到的accessToken
,往浏览器的Local Storage
存放一个token
,试试看,能不能直接进入到nacos的可视化客户端界面?
没有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的访问权限了。
总结:
修改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出错。 这里,还是建议重启一下所有的微服务吧!!!
好了,以上就是我个人的实操了。可能有些不对,大家伙,轻点喷!!!
个人理解,可能也不够全面,班门弄斧了。
好了,今天就先到这里了!!!^_^
如果觉得有收获的,帮忙点赞、评论、收藏
一下,再走呗!!!
转载自:https://juejin.cn/post/7239148862086070328