Springblade JWT身份伪造漏洞与SQL注入解析

Springblade JWT身份伪造漏洞与SQL注入解析

原创 chobits02 C4安全团队 2024-03-02 01:04

Springblade JWT身份伪造漏洞与SQL注入解析 -1

springblade框架(又称为BladeX)是基于spring微服务二次开发的框架,广泛应用于java后端的开发中,比如哈尔滨新中新公司的慧新e校系统就是基于springblade开发的。

Springblade JWT身份伪造漏洞与SQL注入解析 -2

1.JWT身份伪造解析

springblade有个jwt加密signkey默认值的漏洞,就是项目如果不指定signkey值,就会使用代码中默认值来加解密jwt。下面根据代码来分析下:

springblade的Gateway服务用于接受和分发请求

当请求到达gateway,会进入AuthFilter方法中

此处headerToken为读取请求头中的jwt值

跟踪进入AUTH_KEY

Springblade JWT身份伪造漏洞与SQL注入解析 -5

再跟踪进入HEADER

Springblade JWT身份伪造漏洞与SQL注入解析 -6

所以headerToken值为读取请求体中的Blade-Auth请求头

此处headerToken非空,paramToken为空,因此不满足“缺失令牌,鉴权失败”的条件

Springblade JWT身份伪造漏洞与SQL注入解析 -7

追踪到getToken方法

Springblade JWT身份伪造漏洞与SQL注入解析 -8

Springblade JWT身份伪造漏洞与SQL注入解析 -9

此处需要满足auth长度大于7,headstr为截取前6位字符串,即bearer,判断前6位满足bearer,则截取剩下的字符串作为token值

再追踪parseJWT方法

跟踪进入方法,此处parseJWT解析token值

Springblade JWT身份伪造漏洞与SQL注入解析 -12

设置signkey值为getBase64Security()方法返回值的base64解码

Springblade JWT身份伪造漏洞与SQL注入解析 -13

如下图追踪到getSignKey()方法,可以发现此处使用了默认的signkey值

bladexisapowerfulmicroservicearchitectureupgradedandoptimizedfromacommercialproject

所以此处是为了验证JWT的完整性和真实性,需要使用签名密钥对签名部分进行验证,如果签名密钥signKey不一致,则claims为空,返回请求未授权(
JWT身份伪造漏洞就出在这一步,JWT的密钥为默认的值,可以让攻击者伪造身份)

Springblade JWT身份伪造漏洞与SQL注入解析 -14

2.export-user接口SQL注入解析

这个SQL注入本质上是个后台注入漏洞

因为外部输入未经过滤直接拼接到SQL语句中,危险传参了如下SQL语句:

${ew.customSqlSegment}

允许用户自定义sql语句拼接到查询语句中

查看漏洞所在的blade-user模块,可以发现export-user接口中就带了这个危险语句

Springblade JWT身份伪造漏洞与SQL注入解析 -15

Springblade JWT身份伪造漏洞与SQL注入解析 -16

之后就造成任意登录用户使用该接口都能造成SQL注入

如下图所示

Springblade JWT身份伪造漏洞与SQL注入解析 -18

END

关注HackingWiki漏洞感知

了解更多安全相关内容