IPBUF安全漏洞报告
English
CVE-2026-35040 CVSS 5.3 中危

CVE-2026-35040 fast-jwt正则表达式验证交替失败漏洞

披露日期: 2026-04-09

漏洞信息

漏洞编号
CVE-2026-35040
漏洞类型
拒绝服务
CVSS评分
5.3 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
fast-jwt

相关标签

fast-jwtCVE-2026-35040拒绝服务JWT正则表达式逻辑漏洞

漏洞概述

fast-jwt是一个快速的JWT实现库。在6.2.1之前的版本中,当在verify函数的allowedAud、allowedIss等选项中使用带有/g(全局匹配)或/y(sticky匹配)修饰符的RegExp对象时,由于正则表达式的状态性特性,会导致验证逻辑出现交替失败的现象。这意味着无论提供的Token是否有效,每第二次验证尝试都会失败。该漏洞不会导致非法Token通过验证,但会导致50%的有效认证请求失败,从而影响系统的可用性。

技术细节

该漏洞的核心在于JavaScript中RegExp对象的状态性。当使用带有/g(全局匹配)或/y(粘性匹配)修饰符的正则表达式时,RegExp对象内部会维护一个`lastIndex`属性来记录下一次匹配的起始位置。在fast-jwt的verify函数中,如果开发者配置了`allowedAud`、`allowedIss`等参数为带有上述修饰符的RegExp对象,fast-jwt在底层进行验证时会复用该对象。第一次验证时,若匹配成功,`lastIndex`会被更新为匹配结束后的位置;第二次验证时,正则引擎会从`lastIndex`处开始匹配,导致匹配失败。这种状态残留导致验证结果在成功与失败之间交替(即第一次成功,第二次失败,第三次成功...)。尽管这不会导致非法Token被接受(安全绕过),但它会导致合法认证请求被拒绝,从而引发间歇性的拒绝服务(DoS),严重影响业务可用性。

攻击链分析

STEP 1
步骤1:侦察
攻击者识别出目标应用程序使用了受影响版本的fast-jwt库,并且在verify配置中使用了带有/g或/y修饰符的正则表达式来校验JWT声明(如issuer)。
STEP 2
步骤2:利用
攻击者向认证接口连续发送有效的JWT Token。由于正则对象的状态未重置,服务器端在处理请求时,验证逻辑会因lastIndex位置错误而间歇性失败。
STEP 3
步骤3:影响
导致合法用户无法通过认证(50%的失败率),造成认证服务不可用,形成拒绝服务攻击。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
const fastJwt = require('fast-jwt'); // Create a verifier with a global regex (stateful modifier) const verify = fastJwt.createVerifier({ key: 'secret', allowedIss: /some-issuer/g // Vulnerable: using /g modifier }); const token = 'valid.token.payload'; // Assume a valid token for some-issuer // First verification attempt try { const payload1 = verify(token); console.log('Attempt 1: Success'); } catch (e) { console.log('Attempt 1: Failed'); } // Second verification attempt (same token) try { const payload2 = verify(token); console.log('Attempt 2: Success'); } catch (e) { console.log('Attempt 2: Failed - Stateful regex caused this'); }

影响范围

fast-jwt < 6.2.1

防御指南

临时缓解措施
如果无法立即升级,请检查并修改verify配置中的正则表达式,确保不使用/g或/y修饰符。开发者应使用无状态的正则匹配逻辑,或者在每次验证前手动重置正则对象的lastIndex属性(尽管升级库是更彻底的解决方案)。

参考链接

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