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

CVE-2026-35039 fast-jwt缓存碰撞导致认证绕过漏洞

披露日期: 2026-04-06

漏洞信息

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

相关标签

认证绕过缓存碰撞fast-jwtJWT逻辑漏洞

漏洞概述

fast-jwt是一个快速的JSON Web Token (JWT)实现库。在0.0.1至6.2.0之前的版本中存在严重漏洞,当配置的`cacheKeyBuilder`方法无法为不同令牌生成唯一键值时,会导致缓存碰撞。在验证过程中,这使得有效令牌可能返回其他有效令牌的声明,从而导致用户身份被错误识别,攻击者可利用此漏洞冒充其他用户。

技术细节

该漏洞源于fast-jwt库的令牌验证缓存机制。为了提升性能,库会对已验证的令牌进行缓存。默认情况下,缓存键基于令牌内容生成,但允许开发者通过`cacheKeyBuilder`自定义逻辑。如果开发者错误实现该方法(例如仅使用令牌头部而非完整签名作为键),两个结构不同但头部相似的令牌将生成相同的键。利用时,攻击者需先诱导系统验证一个高权限令牌(如管理员Token),该令牌被缓存。随后攻击者发送一个精心构造的普通用户Token,其头部与高权限Token一致。由于缓存键碰撞,系统直接返回缓存的高权限数据,导致攻击者在未掌握私钥的情况下获得管理员权限。

攻击链分析

STEP 1
侦察
识别目标系统使用了fast-jwt库,并判断其版本在0.0.1至6.2.0之间,且启用了缓存功能。
STEP 2
漏洞分析
分析或猜测目标系统自定义的`cacheKeyBuilder`逻辑,确认其生成的键不具备唯一性(如仅依赖头部)。
STEP 3
漏洞利用
攻击者发送一个合法的高权限令牌(或等待管理员操作),使该令牌的声明被服务器缓存。随后,攻击者构造一个具有相同缓存键的低权限令牌发送给服务器。
STEP 4
权限提升
服务器检测到缓存命中,直接返回之前缓存的高权限用户数据,攻击者成功绕过身份验证,获得高权限会话。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
const { createVerifier } = require('fast-jwt'); // Simulating the vulnerable configuration // The cacheKeyBuilder is implemented poorly, returning a static key const verify = createVerifier({ key: 'super-secret-key', cache: true, // Vulnerability: Builder ignores token content, causing collision cacheKeyBuilder: (token) => 'hardcoded-static-key' }); // Generate two tokens with different roles (assuming signed by the same key) // Token 1: Admin (Payload: { role: 'admin' }) const adminToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYWRtaW4ifQ.fake-signature-admin'; // Token 2: Guest (Payload: { role: 'guest' }) const guestToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiZ3Vlc3QifQ.fake-signature-guest'; // Note: In a real scenario, these would be valid signed tokens. // For demonstration, we mock the verification result caching behavior. console.log('--- Step 1: Verify Admin Token ---'); // The system verifies the admin token and caches the result with key 'hardcoded-static-key' try { // Mocking successful verification of admin token const adminPayload = { role: 'admin', id: 1 }; console.log('Verified Payload:', adminPayload); } catch (e) { console.log(e); } console.log('\n--- Step 2: Verify Guest Token (Exploit) ---'); // The system receives the guest token. It calls cacheKeyBuilder. // It returns 'hardcoded-static-key'. The cache finds a hit. // It returns the Admin payload instead of verifying the Guest token. try { // Mocking cache hit returning previous payload const leakedPayload = { role: 'admin', id: 1 }; console.log('Verified Payload:', leakedPayload); console.log('Vulnerability Confirmed: Guest token received Admin privileges!'); } catch (e) { console.log(e); }

影响范围

fast-jwt >= 0.0.1, < 6.2.0

防御指南

临时缓解措施
建议立即检查代码中关于fast-jwt的配置,特别是`cacheKeyBuilder`的实现。如果无法立即升级,请暂时关闭缓存功能(设置`cache: false`)以防止缓存碰撞攻击,直到应用补丁为止。

参考链接

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