JSON Web Tokens攻击漏洞手法

2024-04-26 12:20

本文主要是介绍JSON Web Tokens攻击漏洞手法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        身份验证和授权是任何应用程序的关键组件。人们已经开发了各种标准和框架来促进此类组件的开发并使应用程序更加安全。其中,JSON Web Tokens (JWT) 多年来已成为流行的选择。

        JSON Web 令牌是一种开放的行业标准 RFC 7519 方法,用于在两方之间安全地发送数据。它们包含以 JSON 格式编码的信息(声明)。这些声明有助于相关各方之间交换具体细节。可以使用数字签名来验证和信任所包含的信息

JWT 身份验证示例

        当用户尝试登录 Web 应用程序时,Web 服务器会验证用户的凭据并返回包含所有相关数据的 JWT:用户的身份和授权详细信息。

        在后续请求中,客户端包含 JWT。服务器验证令牌的签名以确保其未被篡改。在实施此验证过程中,设计问题可能会使网站容易受到攻击。

JWT 101

        JWT 由三部分组成:标头、有效负载和签名(也称为 JSON Web 签名 (JWS))。

        JWT 的标头段包含有关签名算法和令牌类型的信息。alg参数指定用于创建签名的加密算法 JWT 最常使用以下算法之一进行签名:  HS256(使用 SHA256 的 HMAC)和 RS256(使用 SHA256 的 RSA)。

JWT 的有效负载段包含通常针对用户的注册声明或识别信息。

        签名段取决于标头段中定义的算法。它由 Base-64 URL 编码的标头和有效负载段组成,使用密钥进行签名并进行哈希处理。

        对于使用 HMAC 的对称签名算法(例如 HS265),私钥在所有参与服务器之间共享。使用相同的私钥生成签名并验证传入 JWT 的签名。

        对于使用 RSA 的非对称签名算法(例如 RS256),JWT 签名是使用私钥生成的,服务器可以使用公钥对其进行验证。

JWT 攻击

        JWT 攻击旨在通过伪造 JWT 来冒充其他用户,从而绕过身份验证和访问控制。为了实现这一点,他们通常利用签名验证机制中的实现缺陷。

未经验证的无效签名

        第一个陷阱是服务器根本不实现签名验证。所有任意签名都会被接受,并且服务器信任所有伪造的 JWT。

没有签名的 JWT

        在这种情况下,该 alg 参数设置为 none,表示所谓的“不安全的 JWT”。大多数服务器会拒绝没有签名的令牌,但如果过滤依赖于字符串比较,有时可以使用经典的混淆技术(例如混合大小写和意外编码)来绕过它。

空密码

        某些对称签名算法(例如 HS256)使用任意独立字符串作为密钥。大多数实现此功能的库将使用空字符串作为默认密码。当然,如果开发人员在实现 Web 应用程序时忘记更改此默认值,服务器也会接受使用空字符串签名的伪造 JWT。

CVE-2022-21449

        2022 年,人们发现 Java 版本 15、16、17 和 18 包含一个严重错误,也称为CVE-2022-21449。此漏洞允许攻击者伪造具有服务器可接受的特定值的 ECDSA 签名。

        这也可以通过 JWT 签名来利用。攻击者可以指定 ECDSA 算法:alg: "ES256"并将预定义签名附加到 JWT。Web 服务器将成功验证签名。

通过 JWK 注入自签名 JWT

        JSON Web 签名标准RFC 7515定义了一个可选标头参数,服务器可以使用该参数以 JWK ( RFC 7517 ) 格式jwk嵌入自己的 RSA 公钥。一些配置错误的服务器将使用嵌入在 JWT 中的公钥来验证签名,而不是使用自己的一组白名单公钥。这允许攻击者对伪造的 JWT 进行自签名,并在标头中包含用于对 JWT 进行签名的匹配公钥。

这篇关于JSON Web Tokens攻击漏洞手法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/937570

相关文章

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

JSON Web Token在登陆中的使用过程

《JSONWebToken在登陆中的使用过程》:本文主要介绍JSONWebToken在登陆中的使用过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录JWT 介绍微服务架构中的 JWT 使用结合微服务网关的 JWT 验证1. 用户登录,生成 JWT2. 自定义过滤

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

一文教你如何将maven项目转成web项目

《一文教你如何将maven项目转成web项目》在软件开发过程中,有时我们需要将一个普通的Maven项目转换为Web项目,以便能够部署到Web容器中运行,本文将详细介绍如何通过简单的步骤完成这一转换过程... 目录准备工作步骤一:修改​​pom.XML​​1.1 添加​​packaging​​标签1.2 添加

如何自定义Nginx JSON日志格式配置

《如何自定义NginxJSON日志格式配置》Nginx作为最流行的Web服务器之一,其灵活的日志配置能力允许我们根据需求定制日志格式,本文将详细介绍如何配置Nginx以JSON格式记录访问日志,这种... 目录前言为什么选择jsON格式日志?配置步骤详解1. 安装Nginx服务2. 自定义JSON日志格式各

python dict转换成json格式的实现

《pythondict转换成json格式的实现》本文主要介绍了pythondict转换成json格式的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下... 一开始你变成字典格式data = [ { 'a' : 1, 'b' : 2, 'c编程' : 3,

Java实现XML与JSON的互相转换详解

《Java实现XML与JSON的互相转换详解》这篇文章主要为大家详细介绍了如何使用Java实现XML与JSON的互相转换,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. XML转jsON1.1 代码目的1.2 代码实现2. JSON转XML3. JSON转XML并输出成指定的

Jackson库进行JSON 序列化时遇到了无限递归(Infinite Recursion)的问题及解决方案

《Jackson库进行JSON序列化时遇到了无限递归(InfiniteRecursion)的问题及解决方案》使用Jackson库进行JSON序列化时遇到了无限递归(InfiniteRecursi... 目录解决方案‌1. 使用 @jsonIgnore 忽略一个方向的引用2. 使用 @JsonManagedR

SpringBoot接收JSON类型的参数方式

《SpringBoot接收JSON类型的参数方式》:本文主要介绍SpringBoot接收JSON类型的参数方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、jsON二、代码准备三、Apifox操作总结一、JSON在学习前端技术时,我们有讲到过JSON,而在

基于.NET编写工具类解决JSON乱码问题

《基于.NET编写工具类解决JSON乱码问题》在开发过程中,我们经常会遇到JSON数据处理的问题,尤其是在数据传输和解析过程中,很容易出现编码错误导致的乱码问题,下面我们就来编写一个.NET工具类来解... 目录问题背景核心原理工具类实现使用示例总结在开发过程中,我们经常会遇到jsON数据处理的问题,尤其是