Nacos身份验证伪造漏洞

利用条件:

有可登录账户

默认jwt的key值未被修改

知晓服务端的jwt加密算法

漏洞版本

0.1.0 <= Nacos <= 2.2.0

漏洞讲解

java web token(jwt)是java web中一种用于验证用户唯一标识的技术,通常会在用户首次登录后自动生成并储存在服务器中用于日后的再登录验证。jwt采用了对称加密,如果可以拿到key和用户名即可直接生成对应token,并修改请求包or响应包进行身份验证绕过。

漏洞复现

访问首页

确保自己已有可登录用户。

返回登录框,抓包进行登录,选择拦截该请求的响应。

去伪造token,在线JWT Token生成此网站可在线生成jwt

基础参数算法这里一定要是HS256,其他默认。

标准载荷填空

数据这里填写payload:

{

"sub": "你已知的用户名",

"exp": 1678899909

}

exp是时间戳

密钥这里填写

SecretKey012345678901234567890123456789012345678901234567890123456789

这串密钥就是漏洞成因,他在这几个版本的nacos代码里是固定不变的。

点击下方的生成,即可获得伪造的其他用户的token

拿着token回到抓包这里,点下放行

将响应包的token换成刚才伪造的token,username换成目标用户名

取消拦截,返回网站查看状态

登录成功,可以发现,即使伪造过去了,却依旧没有nacos账户该有的管理员权限,没有权限控制功能就是证明。我们点击右上角的用户名,进行修改密码的操作。

填写完成后点击确定,出现正确图标表示修改成功。

登出此账户

用刚才修改的密码登录目标账号

登录成功,漏洞复现完毕。

漏洞成因

0.1.0 <= Nacos <= 2.2.0各版本jwt的key全为默认值

SecretKey012345678901234567890123456789012345678901234567890123456789

,经代码审计发现可以通过特定算法(代码内会有标明是什么算法),加上用户名时间戳payload进行token伪造,从而绕过身份验证。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐