[开源工具] - Burp一款新扩展:JWT-scanner

【🔔】互联网工具,安全性未知,需要自行研判安全性。

认证授权是任何应用的关键组成部分。许多标准和框架已经被开发出来以促进这样的组件的开发,并使应用更加安全。其中,JSON Web Tokens(JWTs)已经成为近年来的热门选择。

JSON Web Tokens是一个开放的、工业标准的RFC 7519方法,用于在两个方之间安全地传送数据。它们包含用JSON格式编码的信息(声明)。这些声明有助于在参与方之间交换特定的细节。包含的信息可以使用数字签名进行验证和信任。

OpenID Connect和OAuth2是近年来受欢迎的两种认证框架。它们都使用JWT将用户数据传输到参与方之间。

在这篇文章中,我们讨论了基于JWT认证的普通缺陷,并介绍我们的扩展自动检查Burp中的这些问题:JWT-scanner。

info

当用户试图登录一个Web应用时,Web服务器验证用户的凭证,并返回包含所有相关数据的JWT:用户的身份和授权详情。

在后续的请求中,客户端包含JWT。服务器验证令牌的签名以确保其没有被篡改。在这种验证的实现中,设计问题可以使网站容易受到攻击。

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在这种情况下,alg参数被设置为none,指一个所谓的“非安全JWT”。大部分服务器会拒绝无签名的令牌,但如果过滤是依赖于字符串比较,有时候可能通过使用经典的混淆技术,比如混合大小写和意外的编码而绕过。

空密码有些对称签名算法,比如HS256使用一个任意的、独立的字符串作为秘密密钥。大部分实现这个的库将使用一个空字符串作为默认的秘密。当然,如果开发者忘记在实现web应用时修改这个默认值,服务器也会接受用一个空字符串签名的伪造JWT。

在2022年,人们发现Java版本15,16,17和18包含了一个严重的bug,也被称为CVE-2022-21449。这个漏洞允许攻击者伪造特定值的ECDSA签名,这将被服务器接受。

这也可以在JWT签名中被利用。攻击者可以指定ECDSA算法:alg: ‘ES256’,并在JWT后附加一个预定义的签名。Web服务器将成功地验证签名。如果你对这个漏洞的工作原理有更详细的兴趣,你可以阅读Neil Madden的以下博客文章。

对于JWK注入的自签JWT,JSON Web签名标准RFC 7515定义,服务器可以在JWK(RFC 7517)格式中嵌入自己的RSA公钥,有一个可选的jwk头部参数。

一些误配置的服务器将使用在JWT中嵌入的这个公钥验证签名而不是使用他们自己的白名单公钥集。这允许一个攻击者自签一个伪造的JWT,并在jwk头部中包含用于签名JWT的匹配公钥。

JWT扫描器,以上所有的攻击都需要对JWT的手动修改,在一些情况下需要加密密钥的生成。我们看到越来越多的Web应用使用JWT进行认证和授权。一些实现,尤其是与OpenID连接或者OAuth2一起使用的时候,可能包含几个不同的JWT,比如一个ID令牌,一个访问令牌和一个刷新令牌。这使得测试这些令牌的过程繁琐且容易出错。

这就是我们的Burp扩展登场的地方,用于自动检测JWT的攻击。这个想法是尽量使用Burp的功能。现有的代理、重复器、目标、记录器和入侵者的上下文菜单可以用来在一个选定的请求上启动测试:

有两种方式从一个请求中选定所需的JWT:

  1. 简单和标准的做法是只让扩展基于它的结构自动检测JWT。
  2. 然而,如果你有一个有点特别的案例并且你在一个请求中有不同的JWT,扩展允许你简单地选择你想要测试的JWT并在它上面运行扩展。

在扩展开始测试之前,它首先会检查选中的JWT是否仍然有效。这是因为扩展需要一个有效的请求来与测试请求比较。只需这一步操作。如果扩展从一种测试案例中检测到一个问题,它将在Burp所有问题选项卡中创建一个问题:

detail

下载和源码,最新版本和源代码可以在github找到。

  • 官方源码仓库

New Burp Extension: JWT-scanner

相关内容