Jwt签名算法可改为none

Blade 未结 2 299
ruitaige
ruitaige 剑者 2024-06-21 10:54

一、该问题的重现步骤是什么?

JWT支持将算法设定为“None”。如果“alg”字段设为“ None”,那么签名会被置空,这样任何token都是有效的

原数据包:

图片1.png

将算法改为none 

图片2.png

图片3.png

二、你期待的结果是什么?实际看到的又是什么?

期望:如果解决规避这个问题?

三、你正在使用的是什么产品,什么版本?在什么操作系统上?

3.2.0 ;win11

四、请提供详细的错误堆栈信息,这很重要。


五、若有更多详细信息,请在下面提供。

2条回答
  • 2024-06-21 11:01

    bladex底层是没有设置为none的,如果你们自己把底层逻辑改成了none,相当于把钥匙放在了门口。

    这是我们线上的api地址,麻烦让渗透团队伪造token并且调用接口获取信息后把流程发我们验证(用账号密码申请的不算):https://api.bladex.cn/

    0 讨论(0)
  • 2024-06-21 11:19

    我们在做渗透测试,底层代码我们没有更改,但是渗透测试团队提出了以下问题。而且提出了解决方案。以下是渗透测试的所有内容。您看我们怎么满足他们的要求,如何改造


    详细内容如下:

    1.1. Jwt签名算法可改为none【中危】

    1.1.1. 漏洞详情

    漏洞描述:

    JWT支持将算法设定为“None”。如果“alg”字段设为“ None”,那么签名会被置空,这样任何token都是有效的

    模块说明:

    测试URL

    测试过程:

    原数据包:

    图片1.png

    将算法改为none

    图片2.png 

    图片3.png

    1.1.2. 修复建议

    1.   JWT可以设置过期时间,一旦过期就无法再被验证。在验证签名之前,请确保JWT没有过期。

    2. 如果签名算法不匹配,验证将失败。因此,请确保在验证JWT之前确认所使用的签名算法



    作者追问:2024-06-21 11:25

    jwt本身就是带过期时间的,并且设置了sign-key强制签名认证。本地改成了none伪造签名是无法通过服务器校验的。要改成none的前提是你把框架底层的认证逻辑改了。只要你配置了 blade.token.sign-key的值,对方就无法进行伪造。

    你和渗透团队沟通一下,让他们来攻击我们的线上接口看看,我们需要看到他们的完整重现流程,才能知道怎么修改。

    就来渗透这个地址,把伪造并且调用接口成功的流程发我们:https://api.bladex.cn/

    作者追问:2024-06-21 11:51

    补充一点,老版本系统务必看一下安全操作文档,里面有很多提升安全性的方案,具体看:https://center.javablade.com/blade/BladeX-Safety

    0 讨论(0)
提交回复