漏洞名称:

JWT key泄露漏洞

漏洞位置:

2022-04-19_105845.png

漏洞分析:

  1. 看下方代码

2022-04-19_105845.png

  1. 上面的JWT使用HS256对称加密,加密key来自配置文件,但是这个key会被记录到$token中,这个$token之后进行jwt加密得到jwt加密字符串,但是jwt加密字段的前两部分是可解密的(base64),第二部分解密出来的东西就是上面的$token,这样就导致漏洞的产生,比如拿到一个低权限的账号,再解密出key,之后利用这个key值加上构造的token内容,提升权限。复现过程如下:

微信图片_20220419111638.jpg
微信图片_20220419111628.jpg

  1. 之后修改uid,再用这个key进行加密则可以切换到其他权限调用接口。当然还有个前提是对应的uid账号登录成功且还未退出(因为这里是直接拿的redis缓存中数据进行比较,如存在redis缓存则登录成功,所以redis缓存中得有这个对应uid的jwt加密串)。

    漏洞修复:

  2. 这个key完全没必要放在$token的iss中,所以直接将iss置为空就可以了。