Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate with low-privilege Vikunja account
-
DeliveryQuery user search API to obtain target's numeric ID
-
ExploitCreate link shares on attacker-owned project until link-share sequence reaches target ID
-
ExecutionExtract link-share JWT with matching numeric ID
-
PersistCall /api/v1/tokens endpoints using link-share JWT as victim
-
ImpactIssue new API token with attacker-chosen scopes under victim identity
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Authorization logic validation
MITRE ATT&CK
1 technique across 1 tactic: Privilege Escalation The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | The attacker must hold a valid, authenticated Vikunja user account with write access to at least one project (required to create link shares). The link-share feature must be enabled on the instance (it is enabled by default). The attacker must be able to discover the target user's numeric ID, which is possible via the authenticated user search endpoint - this limits attacks to users who are searchable within the instance. The core operational constraint is that the attacker must create link shares sequentially until the link-share ID counter matches the target user's numeric ID; this is practical for low-numbered user IDs (e.g., IDs 1-50 require at most a few dozen share creations) but becomes progressively expensive for high user IDs on active instances where the link-share counter may already exceed the target. No special server configuration, non-default settings, or elevated privilege beyond a standard authenticated account is required beyond the link-share write access described. |
| Impact | The CVSS 4.0 score of 8.6 with vector AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:N reflects the high-impact outcome once the ID collision is achieved, and the network-accessible attack surface. However, the attack carries a sequential prerequisite: the attacker must create link shares on a project they control until the link-share ID counter reaches the target user's numeric ID. This adds meaningful operational friction - targeting high-numbered user IDs could require hundreds or thousands of share creations - suggesting the effective attack complexity is higher than AC:L implies in practice, particularly for users registered later in a large instance. For small or lightly-used instances with low user IDs, exploitation is far more feasible. No EPSS score was provided; absent KEV listing and public POC, immediate mass-exploitation risk is low, but the impact ceiling (API-level account takeover with arbitrary token scopes) is severe for targeted attacks. The confidentiality and integrity impacts are both high - the attacker can exfiltrate existing token metadata and issue new tokens with full permission scopes under the victim's identity. No availability impact applies. |
| Exploit ScenarioDerived | An authenticated attacker with a low-privilege Vikunja account uses the authenticated user search API to identify a target user's numeric ID - for example, ID 7. The attacker then creates link shares on a project they own in a loop until the link-share auto-increment sequence assigns ID 7 to a new share, then extracts the resulting link-share JWT. Presenting this JWT to |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 02, 2026
Principal type confusion in Vikunja (versions 0.22.0-2.3.0) allows an authenticated low-privilege attacker to fully control any target user's API token management by exploiting a numeric ID collision between the independent link-share and user ID sequences. The /api/v1/tokens endpoints resolve the caller identity exclusively via the generic web.Auth.GetID() interface without validating whether the authenticated principal is a user or a link-share, meaning a link-share JWT whose integer ID equals a victim's user ID is accepted as that user's credential. No CISA KEV listing and no public exploit code have been identified at time of analysis, but successful exploitation yields the ability to mint new API tokens under a victim's identity with attacker-chosen permission scopes, constituting a functional account takeover at the API level.
RemediationAI
Upgrade to Vikunja 2.4.0 or later; this is the vendor-confirmed patched release documented in the security advisory at https://github.com/go-vikunja/vikunja/security/advisories/GHSA-vvcv-vpph-h844. The fixes are delivered via two commits: e6b25bd57b537ef9a72b5acdadf446ca5ef77bfa (introducing rights-check functions and owner-scoped queries) and 95b7e673fb5ee407498fa4b13e8b4c57847a4a0b (completing the principal-type validation). If immediate upgrade is not feasible, deploying a reverse proxy rule to block unauthenticated or link-share-authenticated requests to GET /api/v1/tokens, PUT /api/v1/tokens, and DELETE /api/v1/tokens/* will prevent exploitation via this path, but may break legitimate API token management for users authenticating via those endpoints. Alternatively, disabling link-share creation instance-wide removes the prerequisite for the ID collision attack entirely, though this eliminates the public sharing feature for all users. Both workarounds should be treated as temporary bridges to the 2.4.0 upgrade.
Affected VersionsENISA
Affected Packages
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 an open-source, self-hosted task management application written in Go (CPE: cpe:2.3:a:go-vikunja:vikunja:*:*:*:*:*:*:*:*). The root cause is CWE-863 (Incorrect Authorization) - specifically, a principal-type confusion arising from a polymorphic authentication abstraction. The Go web.Auth interface exposes a single GetID() method returning an integer. Both User and LinkShare model types implement this interface, but their IDs are drawn from separate, independent auto-increment database sequences. The /api/v1/tokens endpoints (GET, PUT, DELETE /tokens) call a.GetID() to scope API token operations without ever asserting that a is of concrete type User. The commit diff confirms that prior to 2.4.0, ReadAll, Create, and Delete functions on APIToken used a.GetID() for ownership scoping with no type guard. The fix introduces pkg/models/api_tokens_rights.go, adding CanDelete and CanCreate authorization checks that verify token.OwnerID against the principal's ID, and the second commit (95b7e673) presumably adds the type assertion that distinguishes link-share principals from user principals at the route level.
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
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N
Network-accessible endpoint requires authenticated low-privilege account and sequential link-share ID enumeration to achieve collision (AC:H); full confidentiality and integrity impact via API token takeover; no availability impact.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
DescriptionCVE.org
Vikunja versions 0.22.0 through 2.3.0 fail to validate the principal type in API token management. Because user IDs and link-share IDs are independent numeric sequences and both resolve through a generic web.Auth.GetID() interface, a link-share JWT whose numeric ID equals a target user's ID is treated as that user by the /api/v1/tokens endpoints. An authenticated attacker can obtain a target's numeric user ID via authenticated user search, then create link shares on an attacker-writable project until the link-share sequence reaches that value, and use the resulting link-share JWT to list, create, and delete the target user's API tokens (including issuing a new token with attacker-chosen scopes under the target's permissions). Fixed in version 2.4.0.
Executive ViewAI
Vikunja versions 0.22.0-2.3.0 contain a privilege escalation vulnerability (CVSS 8.6) enabling authenticated low-privilege users to assume control of any other user's API tokens through numeric ID collision, achieving functional account takeover at the API level. All organizations running these versions face immediate risk of unauthorized API access, token theft, and impersonation attacks; no public exploit code has been identified, but the vulnerability is trivial to exploit once an attacker gains any authenticated user access.
Apply vendor patch.
Threat Intelligence Overview
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
Weak password policy in Vikunja task management before 2.0.0 allows users to set trivially guessable passwords. PoC avai
Stored cross-site scripting (XSS) in Vikunja prior to version 2.0.0 allows authenticated attackers to steal authenticati
Vikunja before version 2.0.0 contains a path traversal vulnerability in its backup restoration function that fails to va
Vikunja is an open-source self-hosted task management platform. [CVSS 6.1 MEDIUM]
Business logic vulnerability in Vikunja task management platform before 2.1.0 allows incomplete resource cleanup, potent
Cross-tenant information disclosure in the self-hosted task manager Vikunja (0.24.0 through 2.3.0) lets a holder of any
Instance-wide data breach in Vikunja before 2.2.1 lets remote attackers exfiltrate and destroy every file attachment acr
Vikunja instances before 2.6.0 expose CalDAV BasicAuth endpoints (/dav, /.well-known, and /feeds) that are not covered b
Vikunja versions before 2.6.0 ship authentication endpoints under /api/v2 (login, register, password-reset, and OAuth to
Vikunja prior to 2.6.0 leaks the secret hash that backs a project's link shares through its single-share read endpoint,
Privilege escalation in Vikunja 2.3.0 allows a user who holds a narrowly scoped API token (permissions {"oauth":["author
Plaintext storage of password-reset, email-confirmation and account-deletion tokens in Vikunja prior to 2.4.0 allows any
EUVD-2026-51991
GHSA-9jrx-vmh8-c6xw
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB