CVE-2026-35594: Vikunja: Link Share JWT tokens remain valid for 72 hours after share deletion or permission downgrade
Vikunja’s link share authentication constructs authorization objects entirely from JWT claims without any server-side database validation. When a project owner deletes a link share or downgrades its permissions, all previously issued JWTs continue to grant the original permission level for up to 72 hours (the default service.jwtttl).
GetLinkShareFromClaims at pkg/models/link_sharing.go lines 88-119 performs zero database queries — it builds the LinkSharing struct purely from JWT claim values (id, hash, project_id, permission, sharedByID). This struct is passed directly to permission checks:
| Function | File | Lines | DB queries |
|---|---|---|---|
GetLinkShareFromClaims | link_sharing.go | 88-119 | 0 |
Project.CanRead (link share) | project_permissions.go | 105-108 | 0 |
Project.CanWrite (link share) | project_permissions.go | 50-53 | 0 |
Project.IsAdmin (link share) | project_permissions.go | 192-194 | 0 |
Contrast with user tokens: User JWTs use a 10-minute TTL (ServiceJWTTTLShort) with sid claim and server-side sessions enabling revocation. Link share JWTs use a 72-hour TTL (ServiceJWTTTL) with no sid, no server-side session, and no refresh mechanism.
Permalink:
GetLinkShareFromClaims:pkg/models/link_sharing.go:88-119NewLinkShareJWTAuthtoken:pkg/modules/auth/auth.go:141-160- Permission checks:
pkg/models/project_permissions.go:50-53, 105-108, 192-194 - TTL defaults:
pkg/config/config.go:337-339
References
- github.com/advisories/GHSA-96q5-xm3p-7m84
- github.com/go-vikunja/vikunja
- github.com/go-vikunja/vikunja/commit/379d8a5c19334ffe4846003f590e202c31a75479
- github.com/go-vikunja/vikunja/pull/2581
- github.com/go-vikunja/vikunja/releases/tag/v2.3.0
- github.com/go-vikunja/vikunja/security/advisories/GHSA-96q5-xm3p-7m84
- nvd.nist.gov/vuln/detail/CVE-2026-35594
Code Behaviors & Features
Detect and mitigate CVE-2026-35594 with GitLab Dependency Scanning
Secure your software supply chain by verifying that all open source dependencies used in your projects contain no disclosed vulnerabilities. Learn more about Dependency Scanning →