Vikunja Password Reset Mechanism Logic Errors Allowing Persistent Account Takeover
Vulnerability ID: CVE-2026-28268
CVSS Score: 9.8
Published: 2026-02-28
A critical authentication bypass vulnerability exists in Vikunja, an open-source task management platform, affecting versions prior to 2.1.0. The vulnerability stems from two concurrent logic errors in the password reset workflow: a failure to invalidate reset tokens upon successful use and a malformed background cleanup process that failed to purge expired tokens. These flaws allow an attacker who obtains a password reset token—via interception, logs, or history—to reuse it indefinitely to reset the target user's password, facilitating persistent account takeover. The issue is addressed in version 2.1.0 by correcting the token deletion logic and fixing the expiration query.
TL;DR
Vikunja versions < 2.1.0 fail to delete password reset tokens after use and fail to clean up expired tokens due to a logic bug in the cron job. This allows valid tokens to be reused indefinitely for account takeover. Fixed in v2.1.0.
⚠️ Exploit Status: POC
Technical Details
- CWE ID: CWE-459
- Attack Vector: Network
- CVSS Score: 9.8
- Remediation Level: Official Fix
- Exploit Status: Poc Available
- Report Confidence: Confirmed
Affected Systems
- Vikunja (Self-Hosted)
-
Vikunja: < 2.1.0 (Fixed in:
2.1.0)
Code Analysis
Commit: 5c2195f
Fix: correctly remove password reset tokens after use
- err = removeTokens(s, user, TokenEmailConfirm)
+ err = removeTokens(s, user, TokenPasswordReset)
Exploit Details
- GitHub Security Advisory: Advisory describing the token reuse mechanism.
Mitigation Strategies
- Upgrade to Vikunja v2.1.0 immediately.
- Manually purge the 'user_tokens' database table of all existing password reset tokens.
- Review application logs for repeated requests to the password reset endpoint from suspicious IP addresses.
Remediation Steps:
- Stop the Vikunja service.
- Pull the latest container image or download the v2.1.0 binary.
- Apply the update and restart the service.
- Connect to the database and execute a cleanup query to remove stale tokens.
- Verify the fix by performing a test password reset flow.
References
Read the full report for CVE-2026-28268 on our website for more details including interactive diagrams and full exploit analysis.
Top comments (0)