身份认证绕过漏洞 (QVD-2023-6271)
漏洞描述
漏洞原理为开源服务管理平台 Naos在默认配置下未对 token.secret.key 进行修改,导致远程攻击者可以绕过密钥认证进入后台造成系统受控等后果。
漏洞信息
漏洞类型:身份认证绕过
漏洞等级:高危
漏洞编号:NVDB-CNVDB-2023674205
漏洞影响范围:
0.1.0<= Nacos<= 2.2.0基本上都受到了影响,最新的版本已修复漏洞。
漏洞的本质是因为使用了默认的key。
JWT(JSON Web Token)是一种用于在网络应用之间安全传递信息的开放标准。在使用JWT时,通常需要使用密钥对token进行签名,以确保token在传输过程中不被篡改。如果在代码中将密钥硬编码到应用程序中,将会存在JWT硬编码漏洞。WT硬编码漏洞是指将密钥硬编码到应用程序代码中,而不是存储在安全的密钥存储库中,攻击者可以轻松地获取该密钥并使用其签署和验证JWT。这使攻击者可以创建或修改JWT,或者验证伪造的JWT,从而导致安全漏洞。例如,应用程序使用硬编码密钥对JWT进行签名,攻击者可以轻松获取该密钥并创建有效的JWT,该JWT会被误认为是经过身份验证的用户,从而获得未经授权的访问权限。因此,为了避免JWT硬编码漏洞,应该将密银存储在安全的密钥存储库中,并且只有授权的应用程序以访问它。
环境搭建:
github 下载2.2.0以下的版本环境 url如下:https://github.com/alibaba/nacos/releases/download/2.1.2/nacos-server-2.1.2.zip
环境解压后在主目录中的bin目录敲 "startup.cmd -m standalone" 命令启动
访问登录url:http://yourIP:8848/nacos/#/login
复现过程:
在nacos中,token.secret.key值是固定死的,位置在conf下的 application.properties 中。
nacos.core.auth.plugin.nacos.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789
在https://jwt.io/ 中输入默认key ,给exp值写好时间戳,写当前Unix时间往后的时间戳,在线时间戳URL如下: 在线时间戳转换工具,key下面的 secret base64 encoded 要勾选一下
复制加密的jwt:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxNjkxODM1MDAxIiwiZXhwIjoiMTY5MTgzNTAwMSJ9.1PIaexADxbmsBJs0paaSskmqctxqT1pzkDPzT5b7wXk
添加Authorization值,请求包如下
可以看到返回200,利用默认key可以绕过身份认证,进入后台使用Burp拦截网站请求,并拦截返回包。
漏洞修复:
1.2.0版本及以上的nacos,修改配置文件中的nacos.core.auth.plugin.nacos.token.secret.key即可。
1.1.4版本及以下的nacos,由于私钥写死到了代码里,用户无法自行配置,只能升级nacos到最新版。