Skip to main content

Vikunja CVE-2026-57458

| EUVDEUVD-2026-95991 HIGH
Improper Privilege Management (CWE-269)
2026-10-09 GitHub_M GHSA-v3p6-34mc-hj7v
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 scoped oauth.authorize API token
  2. Delivery
    POST /api/v1/oauth/authorize for auth code
  3. Exploit
    Exchange code at /api/v1/oauth/token
  4. Execution
    Mint unrestricted JWT + refresh token
  5. Impact
    Access user routes outside token scope

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V8 - Authorization Least privilege enforcement
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

Exploitation requires the attacker to already hold a valid Vikunja API token for a target user that includes the oauth.authorize permission (the legacy {"oauth":["authorize"]} scope), and the server must be running the OAuth authorization flow reachable at POST /api/v1/oauth/authorize and POST /api/v1/oauth/token on version 2.3.0. No user interaction, no admin rights, and no non-default configuration are needed beyond possessing such a scoped token. Limiting factors: the attacker must obtain or be delegated that token (PR:L), the privilege gain is confined to the SAME user (no cross-user or admin escalation was validated), and upgrading to 2.4.0 - which removes oauth from the grantable scope catalogue and rejects API-token principals at the authorize/token endpoints - fully closes it.

Impact

This is a genuine but moderate-priority issue rather than a drop-everything emergency. The CVSS 3.1 vector (AV:N/AC:L/PR:L/UI:N) correctly reflects a network-reachable, low-complexity flaw that nonetheless REQUIRES an attacker to already possess a valid scoped API token (PR:L) - so it is a privilege/scope-boundary bypass (CWE-269), not an unauthenticated RCE. No EPSS score was supplied, the CVE is NOT in CISA KEV, and no public exploit code is referenced; the only exploitation evidence is the vendor's own runtime validation in the GHSA advisory, which is a proof-of-concept description, not released weaponized code. The C:H/I:H/A:N impact is credible for the affected user's own data but is bounded: the advisory explicitly states no cross-user access, no admin privilege escalation, and no access to other accounts was observed, so 'High' confidentiality/integrity applies only within the single compromised user's scope. Net: real and worth patching (the fix is a small, clear commit), but absent KEV/EPSS/public-POC signals and given the token-possession precondition, this is a targeted-abuse / insider-or-leaked-token risk rather than a mass-exploitation threat.

Exploit ScenarioDerived

An attacker who is delegated or steals a deliberately narrow Vikunja API token scoped only to {"oauth":["authorize"]} calls POST /api/v1/oauth/authorize to obtain an authorization code, then exchanges it at POST /api/v1/oauth/token for a full bearer JWT and refresh token. Those minted credentials ignore the original token's permission boundary, letting the attacker reach routes the scoped token could not (e.g. GET /api/v1/user and GET /api/v1/projects) for that same user. The vendor advisory documents this as reproduced in runtime testing, but no public exploit tool is referenced.

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

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

Alert me

AnalysisAIv1 – Oct 09, 2026

Privilege escalation in Vikunja 2.3.0 allows a user who holds a narrowly scoped API token (permissions {"oauth":["authorize"]}) to exchange that token for unrestricted session credentials, defeating the API-token permission boundary. The token holder calls POST /api/v1/oauth/authorize to obtain an OAuth authorization code and then POST /api/v1/oauth/token to trade it for a normal bearer JWT and refresh token that are not bound to the original token's scope - runtime validation showed the scoped token could not read GET /api/v1/user, while the minted token could reach both /api/v1/user and /api/v1/projects. The vulnerability requires an already-issued scoped token from the same user (CVSS 3.1 base 8.1, AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N, CWE-269), no public exploit code has been identified at time of analysis, and there is no confirmed active exploitation (CISA KEV). Version 2.4.0 fixes the issue.

RemediationAI

Upgrade to Vikunja 2.4.0, which is the vendor-released fix (https://github.com/go-vikunja/vikunja/releases/tag/v2.4.0, commit 4ae2e093014881052ed8f8ecd8bcb9adf83dd276); this release rejects API-token principals at both the authorize and token endpoints with HTTP 403 and removes oauth from the grantable API-token scope catalogue so the scope can no longer be issued. Notes and advisory: https://github.com/go-vikunja/vikunja/security/advisories/GHSA-v3p6-34mc-hj7v. If immediate upgrading is not possible, the highest-value compensating control is to enumerate and revoke every existing API token whose permissions include the oauth scope (especially pre-2.4.0 tokens, which the fix's own tests model by inserting a legacy {"oauth":["authorize"]} token directly into the database), and rotate any tokens that cannot be confidently verified - the trade-off is that revoking a token breaks whatever integration was using it, so inventory consumers first. As a stop-gap you can block or strip API-token authentication on the OAuth endpoints at a reverse proxy by rejecting requests to POST /api/v1/oauth/authorize and POST /api/v1/oauth/token that carry an Authorization header with a Vikunja API token (tk_ prefix); the side effect is that any legitimate automation relying on token-based OAuth initiation will stop working, while browser-session OAuth logins remain unaffected. After applying either mitigation, hunt for evidence of abuse by reviewing issued JWTs and refresh tokens for the affected user and auditing access to GET /api/v1/user and GET /api/v1/projects from sessions that originate from token-based authorization; note that the privilege gain is confined to the same user account, with no cross-user or administrative escalation validated, so this is a genuine but moderate-priority issue rather than a drop-everything emergency. No public exploit code has been identified and there is no confirmed active exploitation (CISA KEV), so remediation can proceed on a normal patch cadence.

Affected VersionsENISA

vikunja = 2.3.0

Affected Packages

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

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

The root cause is an authentication-context mismatch in Vikunja's permission model (CWE-269, Improper Privilege Management) rather than a memory-safety or injection flaw. Vikunja issues scoped API tokens whose allowed routes are derived from a route catalogue in pkg/models/api_routes.go, populated by CollectRoutesForAPITokenUsage; during API-token authentication, pkg/routes/api_tokens.go stores both api_token and api_user in the Echo request context, and pkg/user/user.go treats api_user as a fully authenticated current user. Because /api/v1/oauth/authorize was registered in the same authenticated route group that accepts scoped API tokens, the OAuth 2.0 authorization-code endpoint accepted an API-token principal as a legitimate resource owner and issued an authorization code via pkg/modules/auth/oauth2server/authorize.go. The code could then be redeemed at the token endpoint for a standard bearer JWT plus refresh token, and those credentials carry the user's full session rights instead of the narrow {"oauth":["authorize"]} scope - so the scoped-token boundary is silently escalated to a full session. The 2.4.0 fix (commit 4ae2e093014881052ed8f8ecd8bcb9adf83dd276) addresses this in three places: it adds an explicit rejection of API-token principals in HandleAuthorize (HTTP 403 "API tokens cannot be used to authorize OAuth clients"), applies the same check in the OAuth token handler, and excludes the oauth_authorize route group from the API-token route catalogue so the scope is no longer grantable. Regression tests confirm a legacy oauth-scoped token receives HTTP 401 at the authorize endpoint and that {"oauth":["authorize"]} fails PermissionsAreValid and no longer appears in GetAPITokenRoutes().

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:L/PR:L/UI:N/S:U/C:H/I:H/A:N
vuln.today AI 8.1 HIGH

Network endpoint, low complexity, but requires an existing scoped API token so PR:L; scope unchanged as access stays within the same user; high C/I over that user's data, no availability impact.

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

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

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

DescriptionCVE.org

Vikunja is an open-source self-hosted task management platform. In version 2.3.0, a scoped API token limited to the oauth.authorize permission can call POST /api/v1/oauth/authorize, obtain an OAuth authorization code, and exchange the code at POST /api/v1/oauth/token for a normal bearer JSON Web Token (JWT) and refresh token. The resulting credentials are not restricted by the original API token's permissions, allowing access to routes outside its declared scope for the same user. Version 2.4.0 fixes the vulnerability.

Technical POC Analysis

CWE-269 (Improper Privilege Management), specifically an authentication-context mismatch: the OAuth authorization-code issuance path treats an API-token-authenticated request as a full resource-owner…

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 2.3.0, the open-source project and task management platform, contains a privilege-escalation flaw that lets any authenticated holder of a narrowly scoped API token convert that limited credential into an unrestricted session for the same user account. Because the resulting token is not bound to the original scope, integrations, automation scripts, and third-party apps that were deliberately granted minimal permissions become a pathway to full account access, exposing every project, task, and user record the account can reach. Leadership should care because the control organizations rely on to limit third-party and machine-account access - API token scoping - is defeated, and remediation requires an upgrade to Vikunja 2.4.0 across all deployments.

Business Impact: High
Compensating Controls

Apply vendor patch (Vikunja 2.4.0); if immediate upgrade is not feasible, revoke or rotate all narrowly scoped API tokens, block external access to the /api/v1/oauth/authorize and /api/v1/oauth/token endpoints, and monitor logs for scoped tokens being exchanged for broader bearer JWTs or refresh tokens.

Threat Intelligence Overview

EPSS Score
0.3%
Top 83% exploitable
Prevalence
Low
niche self-hosted open-source task manager, limited enterprise footprint
Threat Intel
1
1 source
Social Media
2
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.3%
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

Privilege escalation occurs when an attacker leverages flaws in access control mechanisms to gain permissions beyond what they were originally granted.

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-62376 HIGH
8.1 Oct 09

Plaintext storage of password-reset, email-confirmation and account-deletion tokens in Vikunja prior to 2.4.0 allows any

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