CVE-2026-107722 fast-jwt 认证绕过漏洞
影响攻击者可伪造 JWT 令牌绕过身份认证与授权
fast-jwt 是 Node.js 生态中高性能的 JSON Web Token 实现库。在 6.2.0 至 6.3.0 之前的版本中,当 RSA 公钥文本的 PEM 头之前存在非空白内容时,库会将该公钥误判为 HMAC 密钥。攻击者利用已知的公钥字节即可伪造 HS256 签名令牌,实现认证或授权绕过。
影响范围
受影响版本为 fast-jwt 6.2.0 至 6.3.0 之前(不含 6.3.0),6.3.0 已修复。
漏洞详情
漏洞类型为算法混淆导致的认证绕过。成因在于 src/crypto.js 中 performDetectPublicKeyAlgorithms 仅去除空白字符,而 publicKeyPemMatcher 仍以字符串起始位置锚定匹配,因此注释、控制字符、零宽字符或包裹文本会阻止 PEM 识别,使代码落入 HMAC 回退分支。当系统推断或允许 HS256 时,攻击者用公开的 RSA 公钥作为 HMAC 密钥即可签发任意 HS256 声明。
利用条件与风险
利用前提是攻击者掌握公钥字节且目标允许或推断出 HS256 算法;实战中可导致严重的认证与授权绕过,CVSS 9.8 属严重级别。若算法白名单仅允许非对称算法,则可阻断该攻击。
修复建议
官方已在 6.3.0 版本修复,建议升级至 6.3.0 或更高版本。临时缓解措施为将 JWT 校验算法白名单严格限制为仅非对称算法,避免使用或推断 HS256。
fast-jwt provides fast JSON Web Token (JWT) implementation. From 6.2.0 until 6.3.0, fast-jwt can misclassify RSA public-key text as an HMAC secret when the key has non-whitespace content before its PEM header. In src/crypto.js, performDetectPublicKeyAlgorithms trims whitespace but publicKeyPemMatcher remains start-anchored, so comments, control characters, zero-width characters, or wrapper text can prevent PEM detection and reach the HMAC fallback. An attacker who knows the public key bytes can sign arbitrary HS256 claims with that public material when HS256 is inferred or allowed, resulting in authentication or authorization bypass. An asymmetric-only algorithm allowlist prevents the attack. This issue is fixed in version 6.3.0.