OAuth采用RS256签名JWT时Header为空仍可访问API是否为安全漏洞?
安全问题定性
你发现的场景属于高危身份认证安全漏洞,对应通用漏洞枚举CWE-347(密码签名未正确校验)。
按照JWT规范和OAuth安全最佳实践,采用RS256签名的JWT校验逻辑必须满足三个强制要求:
- 拒绝所有结构不完整的JWT
- 强制校验JWT头部声明的签名算法必须等于服务端预先配置的RS256,不允许动态适配算法
- 必须校验签名段的合法性,和服务端存储的公钥比对一致才可通过校验
你遇到的空头部、无签名段可通过校验,以及指定none算法可通过校验的情况,说明服务端JWT校验逻辑完全违反了上述所有要求,存在极其严重的身份校验缺陷。
攻击者可利用的攻击方式
- 未授权访问所有受保护接口:攻击者无需窃取用户合法JWT、也无需获取RS256签名私钥,只需要自行构造符合业务payload格式要求的未签名JWT,即可直接通过身份校验,访问所有本该授权后才可访问的API,包括用户敏感信息查询、业务数据修改、管理端操作接口等。
示例攻击用JWT构造方式:- 头部指定
none算法:{"alg":"none"},Base64URL编码后为eyJhbGciOiJub25lIn0 - 自定义payload内容,比如伪装管理员:
{"user_id":1,"role":"admin","exp":4796620800},Base64URL编码后为eyJ1c2VyX2lkIjoxLCJyb2xlIjoiYWRtaW4iLCJleHAiOjQ3OTY2MjA4MDB9 - 拼接后留空最后签名段,最终可用的攻击令牌为:
eyJhbGciOiJub25lIn0.eyJ1c2VyX2lkIjoxLCJyb2xlIjoiYWRtaW4iLCJleHAiOjQ3OTY2MjA4MDB9.
- 头部指定
- 垂直/水平权限绕过:攻击者可以任意修改payload中的用户ID、角色、权限范围等字段,无需调整签名即可伪装成任意用户、将普通用户权限提升为管理员权限,执行越权操作。
- 构造永久有效访问凭证:攻击者可以自行修改payload中的
exp(过期时间)字段为极远的未来时间,得到永不过期的访问凭证,长期对业务进行恶意操作、窃取数据。
内容的提问来源于stack exchange,提问作者Testers Logic
相关产品推荐
相关产品推荐

