Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessSteal valid user access JWT
-
DeliveryConnect to /api/v2/ws with token
-
ExploithandleAuth validates signature/type but skips sid check
-
ExecutionMaintain connection past session revocation
-
ImpactExfiltrate victim notification/task/comment content
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A07:2025 - Authentication Failures
ASVS 5.0
V7 - Session Management Session expiration enforcement
|
| Exploitation Conditions | Exploitation requires the attacker to possess a valid, non-expired Vikunja user access JWT (a stolen token) for the target user - there is no initial-access path here. The specific defect: the /api/v2/ws WebSocket endpoint authenticates the first client message via GetUserIDFromToken, which checks only JWT signature and token type and never resolves the token's 'sid' session-id claim against the sessions table. The condition that makes it impactful is reliance on server-side session revocation (DELETE /api/v2/user/sessions/{id}, introduced with server-side sessions in 2.6.0) or TOTP enrollment (which triggers DeleteAllUserSessions) as a trust boundary - both silently fail over WebSocket, and even a new WebSocket connection opened with a pre-revocation token is accepted. Limiting factors: affects only versions 2.3.0 through 2.6.0; requires prior token theft; and impact is limited to reading pushed notification content for the compromised account, not account takeover or data modification. |
| Impact | This is a genuine but moderate-priority confidentiality issue, not a critical emergency. The CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:L/UI:N) and the 7.1 score reflect network-reachable, low-complexity exploitation, but PR:L is the key limiter: the attacker must already possess a cryptographically valid user access JWT (i.e. a stolen token), so this is a post-compromise session-persistence weakness (CWE-613), not an initial-access vector. Impact is confidentiality-only (VC:H, VI:N, VA:N) - the attacker reads the victim's notification.created pushes (comment, task and project content) but cannot modify data or deny service. No EPSS score, no CISA KEV listing, and no public POC were provided; per precision rules this is 'no public exploit identified at time of analysis.' The advisory originates from VulnCheck as coordinated research rather than observed in-the-wild activity, consistent with the absence of KEV/EPSS signals. The practical risk is real for environments relying on Vikunja's session-revocation or TOTP-enrollment features as a security boundary, because those actions silently fail to cut off live WebSocket access - but it depends entirely on an attacker first stealing a token, which bounds real-world urgency to medium. |
| Exploit ScenarioDerived | An attacker who has stolen a victim's Vikunja user access token (e.g. via XSS, a leaked token, or a shared/compromised device) opens or keeps open a connection to /api/v2/ws. Even after the victim revokes the session via DELETE /api/v2/user/sessions/{id} or enables TOTP (which calls DeleteAllUserSessions), the WebSocket connection stays authenticated and keeps streaming the victim's notification.created events with full comment, task and project content. No public exploit code is identified, but the GHSA advisory documents the exact vulnerable code path. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 17, 2026
Revoked Vikunja sessions retain live WebSocket access: in versions 2.3.0 through 2.6.0 the /api/v2/ws endpoint authenticates the first client message by verifying only the JWT signature and token type, never resolving the token's 'sid' claim against the sessions table, so a stolen access token can still open a new connection or keep an existing one alive after DELETE /api/v2/user/sessions/{id} or after TOTP enrollment wipes all sessions. The impact is confidentiality-only: the attacker continues to receive notification.created pushes carrying comment, task and project content belonging to the victim's account, which the vendor scores 7.1 under CVSS 4.0 (PR:L, VC:H) and our assessment scores 6.5 under CVSS 3.1 (AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N). Exploitation requires an authenticated attacker who already holds a valid, unexpired user access token - there is no initial-access path in this defect - and no public exploit code or CISA KEV entry was identified at time of analysis.
RemediationAI
Upgrade to Vikunja 2.7.0 or later, the first release outside the affected 2.3.0-2.6.0 range per the advisory, and verify the fixed version against GHSA-4hv6-xc92-j86g (https://github.com/go-vikunja/vikunja/security/advisories/GHSA-4hv6-xc92-j86g) and the VulnCheck advisory before closing the finding, since the Go module metadata listed no fixed version at publication. No configuration toggle makes the /api/v2/ws path honor the 'sid' claim without the code fix, so until patching is possible use compensating controls with explicit trade-offs: rotate the instance's ServiceSecret, which invalidates every outstanding JWT at once and forcibly logs out all users and integrations; shorten the access-token TTL and require clients to reconnect and re-authenticate frequently, accepting more churn on the WebSocket path; block or restrict /api/v2/ws at the reverse proxy to trusted networks or authenticated tiers, which breaks legitimate browser clients relying on live notifications; and treat any suspected token theft as requiring secret rotation or a password change plus full re-issuance rather than session deletion or TOTP enrollment alone, because neither of those actions terminates an existing WebSocket registration. Log and monitor WebSocket connection lifetimes relative to session-revocation events so that connections surviving a revocation are detected while the fix is pending.
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 a Go task/project management application whose API module (go/code.vikunja.io/api) issues user JWTs signed with the shared config.ServiceSecret, with NewUserJWTAuthtoken (pkg/modules/auth/auth.go:188) embedding a 'sid' claim that ties the token to a server-side session row. Server-side sessions with revocation semantics arrived in 2.6.0: DELETE /api/v2/user/sessions/{id} revokes a session by UUID and TOTP enrollment calls models.DeleteAllUserSessions (pkg/routes/api/v2/user_totp.go:208). The WebSocket endpoint GET /api/v2/ws authenticates out-of-band via Connection.handleAuth (pkg/websocket/connection.go:168), which delegates to auth.GetUserIDFromToken (pkg/modules/auth/auth.go:292); that function parses the token with jwt.Parse, checks only the 'type' claim equals AuthTypeUser, and returns a user ID - it performs no sessions-table lookup and no re-validation occurs after the initial handshake, so the connection stays registered in the hub and keeps receiving subscribed events indefinitely. The REST surface is knowingly different: access tokens simply age out after a short TTL (the documented design choice from the GHSA-96q5 fix) while refresh tokens are correctly invalidated on session deletion, which means the short-TTL compensating assumption is defeated by long-lived WebSocket connections. This is CWE-613 (Insufficient Session Expiration) manifesting as an authentication/authorization state mismatch between the HTTP session store and the WebSocket trust boundary.
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:N/VA:N/SC:N/SI:N/SA:N
Network-reachable with low complexity, but requires a valid stolen user token (PR:L); confidentiality-only impact (C:H) exposing notification/task content, with no integrity or availability effect.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
Lifecycle Timeline
2DescriptionCVE.org
Vikunja 2.3.0 before 2.7.0 contains an improper session validation vulnerability that allows attackers to keep WebSocket access after revocation because handleAuth never checks the JWT sid claim against the sessions table. Attackers holding a stolen access token can open or maintain connections to /api/v2/ws after session deletion or TOTP enrollment, continuing to receive the victim's notification.created pushes, including comment, task and project content.
Technical POC Analysis
CWE-613 (Insufficient Session Expiration), specifically improper server-side session validation on the WebSocket authentication path.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
Vikunja versions 2.3.0 through 2.6.0 fail to invalidate WebSocket access when a user session is revoked, so anyone holding a stolen-but-still-valid access token keeps receiving live task, project, and comment notifications even after the victim logs out, deletes the session, or resets sessions via TOTP enrollment. This directly undermines the containment steps security teams rely on after credential theft or during employee offboarding, meaning incident responders cannot currently assume that a terminated session has actually stopped data flow. Leadership should care because the exposure is silent and ongoing - no new compromise is needed once a token has leaked - and it affects confidentiality of business content for every self-hosted Vikunja deployment in the stated version range.
No vendor-released patch identified at time of analysis. Interim mitigations: block or restrict the /api/v2/ws endpoint at the reverse proxy/WAF; rotate the JWT signing secret to invalidate all outstanding access tokens; reduce access-token lifetime to the minimum viable value; monitor WebSocket connections for anomalous source IPs or user agents; and treat session revocation and TOTP-driven session wipes as unreliable for containment until a fixed Vikunja release is deployed.
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
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
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,
Principal type confusion in Vikunja (versions 0.22.0-2.3.0) allows an authenticated low-privilege attacker to fully cont
Privilege escalation in Vikunja 2.3.0 allows a user who holds a narrowly scoped API token (permissions {"oauth":["author
EUVD-2026-103304
GHSA-355w-rx9g-pww7
NVD
CVE.org
VulDB
Exploit-DB