CVE-2025-56643CVE-2025-56643是Requarks Wiki.js 2.5.307版本中存在的一个严重安全漏洞。该漏洞源于系统在进行用户登出操作时,未能正确撤销或使已颁发的JWT(JSON Web Token)会话令牌失效。具体而言,当用户成功登录后,系统会生成一个JWT token用于后续的身份验证请求。然而,当用户执行登出操作时,系统仅删除了客户端本地的会话状态,但并未在服务端将该token标记为无效或将其加入令牌黑名单。这导致了一个严重的安全问题:即使在用户登出后,之前颁发的JWT token仍然保持有效状态,攻击者如果获取到这些未过期的令牌,仍然可以利用它们访问系统资源,执行未授权的操作。该漏洞同时影响系统的GraphQL端点和登出机制,破坏了会话的完整性和安全性。在实际攻击场景中,如果用户的设备被恶意软件感染、token被窃取,或者攻击者通过中间人攻击获取到有效的JWT token,攻击者可以在用户不知情的情况下长期维持对系统的访问权限,窃取敏感信息或进行其他恶意操作。由于无需用户交互且无需认证即可利用此漏洞,其CVSS评分高达9.1,属于严重级别。
该漏洞的技术根源在于Wiki.js的JWT令牌生命周期管理机制存在缺陷。在标准的Web应用安全实践中,当用户登出时,服务器应当执行以下操作之一来确保会话安全:(1) 将令牌加入撤销列表/黑名单;(2) 在令牌中设置明确的过期时间并在验证时检查;(3) 使用短期令牌并配合刷新机制。然而,Wiki.js 2.5.307版本在实现登出功能时,仅在客户端清除了会话状态,服务端并未执行任何令牌撤销操作。攻击者可以通过以下步骤利用此漏洞:首先,使用有效凭证登录系统获取JWT token;然后,在目标用户登出后,使用之前获取的token继续向GraphQL API发送请求;由于服务端验证token时仅检查签名和过期时间,而不会查询撤销列表,因此请求会被成功处理。漏洞影响范围包括所有需要JWT认证的API端点,特别是GraphQL endpoint。攻击者可以利用此漏洞绕过正常的会话终止机制,实现对系统的长期未授权访问。修复方案需要在服务端实现令牌撤销机制,如使用Redis等缓存存储已撤销的令牌ID,或采用令牌版本号机制。