关键漏洞信息 CVE ID: CVE-2026-25537 严重性: 中等 漏洞概述 类型: 类型混淆漏洞 位置: jsonwebtoken 库的声明验证逻辑 受影响版本: < 10.3.0 修复版本: 10.3.0 漏洞描述 问题: 当标准声明(例如 nbf 或 exp)与错误的 JSON 类型(如字符串代替数字)一起提供时,库的内部解析机制将其标记为“FailedToParse”。验证逻辑对待“FailedToParse”状态等同于“NotPresent”。 后果: 即使启用了验证检查(如 validate_nbf = true),如果声明未明确标记为 required_spec_claims 中必需的,则库将完全跳过验证检查,将其视为不存在。这允许攻击者绕过基于时间的安全限制(如“Not Before”检查)和潜在的身份验证和授权绕过。 详细信息 TryParse 枚举: 库使用自定义 TryParse 枚举来处理声明反序列化。当用户发送字符串格式的 nbf 时,serde 无法将其解析为 u64,导致 TryParse::FailedToParse。 验证逻辑缺陷: 验证时,代码检查 exp 和 nbf,如果 nbf 是 FailedToParse,匹配失败,if 块被跳过,没有返回错误。 所需声明的差距: 唯一的回退机制是“所需声明”检查。然而,常用的用法模式通常启用验证标志(validate_nbf = true),而不将声明添加到所需列表中,假设如果声明出现在令牌中则隐式需要其有效性,овогоviol Createset这个假设。 环境 版本: jsonwebtoken 10.2.0 Rust 版本: rustc 1.90.0 Cargo 版本: cargo 1.90.0 操作系统: MacOS Tahoe 26.2 POC (概念验证) POC 展示了如何通过将 nbf 作为字符串发送来绕过验证,从而使远期的令牌被视为有效。 影响 如果应用程序使用 jsonwebtoken 的 nbf(尚未)来安排未来的访问权限(如“访问权明天开始授予”),通过将 nbf 作为字符串发送,攻击者可以绕过此限制并立即访问资源。