Description
Vikunja is an open-source self-hosted task management platform. Prior to 2.3.0, the TOTP failed-attempt lockout mechanism is non-functional due to a database transaction handling bug. When a TOTP validation fails, the login handler in pkg/routes/api/v1/login.go calls HandleFailedTOTPAuth and then unconditionally rolls back. HandleFailedTOTPAuth in pkg/user/totp.go uses an in-memory counter (key-value store) to track failed attempts. When the counter reaches 10, it calls user.SetStatus(s, StatusAccountLocked) on the same database session s. Because the login handler always rolls back after a TOTP failure, the StatusAccountLocked write is undone. The in-memory counter correctly increments past 10, so the lockout code executes on every subsequent attempt, but the database write is rolled back every time. This allows unlimited brute-force attempts against TOTP codes. This vulnerability is fixed in 2.3.0.
Published: 2026-04-10
Score: 5.9 Medium
EPSS: < 1% Very Low
KEV: No
Impact: Brute‑force authentication bypass
Action: Immediate Patch
AI Analysis

Impact

An in‑memory counter records TOTP failures, but the lockout state is not persisted because a database rollback undoes the status change. When an attacker supplies an incorrect TOTP code, the account never locks, allowing unlimited attempts to guess a correct code. This flaw permits brute‑force authentication of two‑factor protected accounts. The weakness is captured by CWE‑307 and results in elevated access without valid second factor, leading to potential unauthorized data exposure and modification.

Affected Systems

The issue affects the Vikunja task‑management platform, provided by the go‑vikunja organization. Any deployment of Vikunja version 2.2.x or earlier is vulnerable. The problem is resolved in release 2.3.0 and later. Users running earlier versions on external servers or internal infrastructure are at risk.

Risk and Exploitability

The CVSS base score of 5.9 indicates moderate severity. No EPSS information is available, and the vulnerability is not listed in the CISA KEV catalog. Because the flaw operates during the login phase, it can be exploited over the network when an attacker can supply a username and repeated TOTP attempts, or locally if the attacker can guess a valid username. The attack vector is therefore likely remote network login or local compromise, and an attacker can gain access after sufficient failed TOTP attempts because the lockout never persists.

Generated by OpenCVE AI on April 10, 2026 at 17:22 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade Vikunja to version 2.3.0 or later to apply the patch that correctly persists account lockout status.
  • If an upgrade cannot be performed immediately, monitor authentication logs for excessive TOTP failures and temporarily block accounts that exceed a threshold.
  • Consider disabling two‑factor authentication for critical accounts until the update is applied, or enforce stricter rate‑limiting on login attempts.

Generated by OpenCVE AI on April 10, 2026 at 17:22 UTC.

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Github GHSA Github GHSA GHSA-fgfv-pv97-6cmj Vikunja Vulnerable to TOTP Brute-Force Due to Non-Functional Account Lockout
History

Fri, 17 Apr 2026 22:00:00 +0000

Type Values Removed Values Added
First Time appeared Vikunja
Vikunja vikunja
CPEs cpe:2.3:a:vikunja:vikunja:*:*:*:*:*:*:*:*
Vendors & Products Vikunja
Vikunja vikunja

Mon, 13 Apr 2026 17:15:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'no', 'Exploitation': 'poc', 'Technical Impact': 'partial'}, 'version': '2.0.3'}


Mon, 13 Apr 2026 13:00:00 +0000

Type Values Removed Values Added
First Time appeared Go-vikunja
Go-vikunja vikunja
Vendors & Products Go-vikunja
Go-vikunja vikunja

Fri, 10 Apr 2026 16:30:00 +0000

Type Values Removed Values Added
Description Vikunja is an open-source self-hosted task management platform. Prior to 2.3.0, the TOTP failed-attempt lockout mechanism is non-functional due to a database transaction handling bug. When a TOTP validation fails, the login handler in pkg/routes/api/v1/login.go calls HandleFailedTOTPAuth and then unconditionally rolls back. HandleFailedTOTPAuth in pkg/user/totp.go uses an in-memory counter (key-value store) to track failed attempts. When the counter reaches 10, it calls user.SetStatus(s, StatusAccountLocked) on the same database session s. Because the login handler always rolls back after a TOTP failure, the StatusAccountLocked write is undone. The in-memory counter correctly increments past 10, so the lockout code executes on every subsequent attempt, but the database write is rolled back every time. This allows unlimited brute-force attempts against TOTP codes. This vulnerability is fixed in 2.3.0.
Title Vikunja Affected by TOTP Brute-Force Due to Non-Functional Account Lockout
Weaknesses CWE-307
References
Metrics cvssV3_1

{'score': 5.9, 'vector': 'CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N'}


Subscriptions

Go-vikunja Vikunja
Vikunja Vikunja
cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2026-04-13T15:37:11.358Z

Reserved: 2026-04-03T21:25:12.162Z

Link: CVE-2026-35597

cve-icon Vulnrichment

Updated: 2026-04-13T15:26:23.250Z

cve-icon NVD

Status : Analyzed

Published: 2026-04-10T17:17:03.217

Modified: 2026-04-17T21:59:18.763

Link: CVE-2026-35597

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-04-13T13:00:46Z

Weaknesses