Skip to main content

Vikunja EUVDEUVD-2026-95994

| CVE-2026-62376 HIGH
Cleartext Storage of Sensitive Information (CWE-312)
2026-10-09 GitHub_M GHSA-r6w9-259g-gwrv
8.1
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Obtain database read access (backup/misconfig/SQLi)
  2. Exploit
    Dump plaintext tokens from user_tokens
  3. Execution
    Submit stolen reset token to API
  4. Impact
    Set new password, take over account

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V14 - Data Protection Encrypted storage of sensitive data
Exploitation Conditions

Exploitation requires two preconditions. First, the attacker must already have read access to the Vikunja backend database - via a leaked/unsecured backup, misconfigured or publicly exposed storage, or a secondary SQL-level exposure such as SQL injection - because the vulnerability is plaintext storage of tokens in the user_tokens table, not a directly reachable network flaw. Second, a target account must have a pending password-reset, email-confirmation, or account-deletion token (kind IN (1,2,3)) that is still within its 24-hour validity window; accounts with no outstanding token cannot be taken over this way. Limiting factors: the whole attack is gated on an out-of-band database compromise, the 24-hour token lifetime bounds the usable token set, and CalDAV tokens are unaffected because they are already bcrypt-hashed. No Vikunja application authentication or user interaction is needed for the token-redemption step itself.

Impact

This is a genuine high-impact flaw but a conditional one, and the signals should be read together rather than at face value. The CVSS base score of 8.1 is driven by full C:H/I:H/A:H account takeover (including admin accounts) over a network vector, but it correctly carries AC:H because exploitation is not self-contained: the attacker must FIRST obtain read access to the database out-of-band (leaked backup, misconfigured/exposed storage, or a secondary SQL injection). The AV:N/PR:N/UI:N metrics describe only the second stage - redeeming a stolen plaintext token against the public reset API with no Vikunja authentication or user interaction - so the network-unauthenticated framing is accurate for that stage but presupposes a prior database compromise. A PoC (SQL dump query plus a curl reset request) is published in the GHSA advisory, so working exploit steps are public. There is no CISA KEV listing and no EPSS score was supplied in the input; absent those, there is no evidence of active or widespread exploitation, and the dependency on an existing DB breach makes mass automated exploitation unlikely. Net: treat as a real but second-order priority - the severity materializes only for operators who have also suffered a database exposure, with a 24-hour token-lifetime window limiting the set of usable tokens.

Exploit ScenarioDerived

An attacker who obtains a leaked Vikunja database backup or exploits a separate SQL injection reads the user_tokens table, where password-reset tokens are stored in plaintext. Because the advisory publishes a working PoC (a SELECT to dump tokens followed by a curl POST to /api/v1/user/password/reset), the attacker can immediately submit any pending reset token to set a new password and seize the account - including admin accounts - without knowing the original password. The high attack complexity reflects the prerequisite database read access rather than any difficulty in the token redemption itself.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 09, 2026

Plaintext storage of password-reset, email-confirmation and account-deletion tokens in Vikunja prior to 2.4.0 allows anyone who already holds read access to the backend database to redeem a pending token and take over the associated account, including administrator accounts, without knowing any password. The vulnerability is a CWE-312 cleartext-storage flaw rated CVSS 8.1 (AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H), where the high attack complexity reflects two preconditions rather than any weakness in the exploit itself: the attacker must independently obtain database read access (leaked or misconfigured backups, exposed storage, or a secondary SQL-level exposure), and the victim account must have an unexpired token within its 24-hour lifetime. The vendor advisory publishes proof-of-concept code illustrating the attack (a SQL query harvesting tokens plus a password-reset redemption request); no KEV listing was provided in the available intelligence, so there is no confirmation of active exploitation, and the CVSS vector's PR:N confirms the token-redemption step itself requires no Vikunja application credentials or user interaction.

RemediationAI

Vendor-released patch: upgrade to Vikunja 2.4.0 (release tag v2.4.0), which switches token creation to bcrypt hashing via generateHashedToken, replaces the plaintext SQL lookup with bcrypt.CompareHashAndPassword, and ships migration 20260719145922 that deletes all existing rows in user_tokens where kind IN (1, 2, 3) - so upgrade both fixes the code path and purges the stale plaintext secrets; expect the side effect that any in-flight password-reset, email-confirmation or account-deletion links stop working and users must request new ones. Until the upgrade can be staged, the effective compensating controls all target the precondition of database read access rather than the token storage itself: move backups off any publicly reachable or weakly permissioned storage (S3 buckets, unauthenticated snapshot shares) and encrypt them at rest, since a leaked backup is the most direct path to exploitation and the trade-off is purely operational cost; restrict database network exposure to the application host and rotate database credentials and any storage access keys that may have been broadly distributed, accepting the brief service interruption; and, if you suspect exposure, manually issue the equivalent of the migration (DELETE FROM user_tokens WHERE kind IN (1, 2, 3)) to invalidate any tokens an intruder may already hold, with the same user-visible consequence that pending reset and confirmation links must be re-issued. Enable and retain database audit/query logging so that bulk SELECTs against user_tokens joined to users can be detected, and treat the appearance of such a query as an account-takeover indicator requiring forced credential resets. Note that the three upstream fix commits are referenced at https://github.com/go-vikunja/vikunja/commit/00fd2c6155c01faae99be4226b931d8091fd6323, https://github.com/go-vikunja/vikunja/commit/3a0ea15d8c18ff960bc98ae39950fa7a14b0af7d and https://github.com/go-vikunja/vikunja/commit/e31ea2de5040fa63bc97cf4df63bafed3bd9ad85, with the advisory at https://github.com/go-vikunja/vikunja/security/advisories/GHSA-r6w9-259g-gwrv.

Affected VersionsENISA

vikunja < 2.4.0

Affected Packages

go code.vikunja.io/api fix: 2.4.0
euvd vikunja fix: 2.4.0

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 2 packages in go, euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

Vikunja is a Go-based, self-hosted task management platform that persists users, tasks and auxiliary state through the xorm ORM. Authentication-adjacent secrets are held in a user_tokens table keyed by a kind discriminator, where kind values 1, 2 and 3 correspond to password-reset, email-confirmation and account-deletion tokens respectively. In affected versions, the token generator in pkg/user/token.go produced a random string via utils.CryptoRandomString and then wrote that raw string directly into the table with no transformation, and the corresponding lookup in getToken performed a direct SQL equality match (kind = ? AND token = ?). This is the classic CWE-312 cleartext-storage pattern: a bearer credential that functions exactly like a password is stored in a recoverable form, so the database itself becomes a credential store for any reader. Notably, the same source file already implemented correct handling for CalDAV tokens via generateHashedToken using bcrypt, meaning the project had the right primitive available and simply failed to apply it to the three vulnerable token kinds - a consistency gap rather than a missing capability. The fix replaces genToken with the hashed generator for all three kinds, changes lookup to bcrypt.CompareHashAndPassword, and adds migration 20260719145922 which issues DELETE FROM user_tokens WHERE kind IN (1, 2, 3), deliberately invalidating every outstanding plaintext token because those rows must be assumed exposed. CPE data identifies the affected product line as cpe:2.3:a:go-vikunja:vikunja:*:*:*:*:*:*:*:* and the Go module as go/code.vikunja.io/api, vulnerable through 2.3.0.

Know when Vikunja gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (GitHub_M) PRIMARY 8.1 HIGH
AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H
vuln.today AI 8.1 HIGH

AC:H because exploitation depends on prior out-of-band database read access and a pending token; PR:N/UI:N since token redemption needs no Vikunja auth; C/I/A:H from full account (incl. admin) takeover and account-deletion capability.

3.1 AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H
4.0 AV:N/AC:H/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
High
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
High

Lifecycle Timeline

2
Patch available
Oct 09, 2026 - 22:17 EUVD
CVE Published
Oct 09, 2026 - 20:50 cve.org
HIGH 8.1

DescriptionCVE.org

Vikunja is an open-source self-hosted task management platform. Versions prior to 2.4.0 store password-reset, email-confirmation, and account-deletion tokens in the user_tokens table in plaintext. If an attacker gains read access to the database through a backup leak, misconfigured storage, or SQL-level exposure, they can immediately use pending tokens to take over user accounts without knowing passwords. Version 2.4.0 fixes the issue.

Technical POC Analysis

CWE-312 (Cleartext Storage of Sensitive Information), with a secondary CWE-916 tag on the advisory.

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Executive ViewAI

Why It Matters

Vikunja versions before 2.4.0 expose a high-severity account-takeover path in which a database read-only exposure can be converted into control of user and administrator accounts without any password. The business risk is the confidentiality and integrity of project, task, and administrative data, plus the operational disruption that follows an administrator compromise. Publicly available exploit code exists, but there is no CISA KEV listing confirming active exploitation, so priority should be driven by the presence of Vikunja and the security of its database and backups.

Business Impact: High
Compensating Controls

No vendor-released patch identified at time of analysis; restrict database read access to least privilege, encrypt database and backups at rest, secure exposed backups/storage, invalidate outstanding tokens, monitor for anomalous token redemption and password-reset activity, and enforce MFA and least privilege for Vikunja administrators.

Threat Intelligence Overview

EPSS Score
0.2%
Top 89% exploitable
Prevalence
Low
niche self-hosted open-source task manager, limited enterprise footprint
Threat Intel
1
1 source
Social Media
3
Sightings
Data Quality
5 sources
Confidence: Medium

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact
High

Priority Score

40
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +40
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

CVE-2026-27575 CRITICAL POC
9.1 Feb 25

Weak password policy in Vikunja task management before 2.0.0 allows users to set trivially guessable passwords. PoC avai

CVE-2026-27616 HIGH POC
7.3 Feb 25

Stored cross-site scripting (XSS) in Vikunja prior to version 2.0.0 allows authenticated attackers to steal authenticati

CVE-2026-27819 HIGH POC
7.2 Feb 25

Vikunja before version 2.0.0 contains a path traversal vulnerability in its backup restoration function that fails to va

CVE-2026-27116 MEDIUM POC
6.1 Feb 25

Vikunja is an open-source self-hosted task management platform. [CVSS 6.1 MEDIUM]

CVE-2026-28268 CRITICAL
9.8 Feb 27

Business logic vulnerability in Vikunja task management platform before 2.1.0 allows incomplete resource cleanup, potent

CVE-2026-68582 CRITICAL POC
9.3 Aug 02

Cross-tenant information disclosure in the self-hosted task manager Vikunja (0.24.0 through 2.3.0) lets a holder of any

CVE-2026-56765 CRITICAL
9.3 Jul 10

Instance-wide data breach in Vikunja before 2.2.1 lets remote attackers exfiltrate and destroy every file attachment acr

CVE-2026-91973 HIGH POC
8.7 Sep 15

Vikunja instances before 2.6.0 expose CalDAV BasicAuth endpoints (/dav, /.well-known, and /feeds) that are not covered b

CVE-2026-91972 HIGH POC
8.7 Sep 15

Vikunja versions before 2.6.0 ship authentication endpoints under /api/v2 (login, register, password-reset, and OAuth to

CVE-2026-91985 HIGH POC
8.7 Sep 15

Vikunja prior to 2.6.0 leaks the secret hash that backs a project's link shares through its single-share read endpoint,

CVE-2026-68581 HIGH POC
8.6 Aug 02

Principal type confusion in Vikunja (versions 0.22.0-2.3.0) allows an authenticated low-privilege attacker to fully cont

CVE-2026-57458 HIGH
8.1 Oct 09

Privilege escalation in Vikunja 2.3.0 allows a user who holds a narrowly scoped API token (permissions {"oauth":["author

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy