CVE-2026-35040fast-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),严重影响业务可用性。