{"id":"CVE-2026-68581","sourceIdentifier":"disclosure@vulncheck.com","published":"2026-08-02T13:16:54.087","lastModified":"2026-10-23T22:10:00.160","vulnStatus":"Deferred","cveTags":[],"descriptions":[{"lang":"en","value":"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."},{"lang":"es","value":"Las versiones de Vikunja 0.22.0 a 2.3.0 no validan el tipo de principal en la gestión de tokens de API. Debido a que los ID de usuario y los ID de enlace compartido son secuencias numéricas independientes y ambos se resuelven a través de una interfaz genérica web.Auth.GetID(), un JWT de enlace compartido cuyo ID numérico es igual al ID de un usuario objetivo es tratado como ese usuario por los endpoints /api/v1/tokens. Un atacante autenticado puede obtener el ID de usuario numérico de un objetivo a través de una búsqueda de usuario autenticada, luego crear enlaces compartidos en un proyecto escribible por el atacante hasta que la secuencia de enlaces compartidos alcance ese valor, y usar el JWT de enlace compartido resultante para listar, crear y eliminar los tokens de API del usuario objetivo (incluyendo la emisión de un nuevo token con alcances elegidos por el atacante bajo los permisos del objetivo). Corregido en la versión 2.4.0."}],"affected":[{"source":"disclosure@vulncheck.com","affectedData":[{"vendor":"go-vikunja","product":"vikunja","defaultStatus":"unaffected","packageURL":"pkg:golang/code.vikunja.io/api","versions":[{"version":"0.22.0","lessThan":"2.4.0","versionType":"semver","status":"affected"}]}]}],"metrics":{"cvssMetricV40":[{"source":"disclosure@vulncheck.com","type":"Secondary","cvssData":{"version":"4.0","vectorString":"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/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","baseScore":8.6,"baseSeverity":"HIGH","attackVector":"NETWORK","attackComplexity":"LOW","attackRequirements":"NONE","privilegesRequired":"LOW","userInteraction":"NONE","vulnConfidentialityImpact":"HIGH","vulnIntegrityImpact":"HIGH","vulnAvailabilityImpact":"NONE","subConfidentialityImpact":"NONE","subIntegrityImpact":"NONE","subAvailabilityImpact":"NONE","exploitMaturity":"NOT_DEFINED","confidentialityRequirement":"NOT_DEFINED","integrityRequirement":"NOT_DEFINED","availabilityRequirement":"NOT_DEFINED","modifiedAttackVector":"NOT_DEFINED","modifiedAttackComplexity":"NOT_DEFINED","modifiedAttackRequirements":"NOT_DEFINED","modifiedPrivilegesRequired":"NOT_DEFINED","modifiedUserInteraction":"NOT_DEFINED","modifiedVulnConfidentialityImpact":"NOT_DEFINED","modifiedVulnIntegrityImpact":"NOT_DEFINED","modifiedVulnAvailabilityImpact":"NOT_DEFINED","modifiedSubConfidentialityImpact":"NOT_DEFINED","modifiedSubIntegrityImpact":"NOT_DEFINED","modifiedSubAvailabilityImpact":"NOT_DEFINED","Safety":"NOT_DEFINED","Automatable":"NOT_DEFINED","Recovery":"NOT_DEFINED","valueDensity":"NOT_DEFINED","vulnerabilityResponseEffort":"NOT_DEFINED","providerUrgency":"NOT_DEFINED"}}],"cvssMetricV31":[{"source":"disclosure@vulncheck.com","type":"Secondary","cvssData":{"version":"3.1","vectorString":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N","baseScore":8.1,"baseSeverity":"HIGH","attackVector":"NETWORK","attackComplexity":"LOW","privilegesRequired":"LOW","userInteraction":"NONE","scope":"UNCHANGED","confidentialityImpact":"HIGH","integrityImpact":"HIGH","availabilityImpact":"NONE"},"exploitabilityScore":2.8,"impactScore":5.2}],"ssvcV203":[{"source":"134c704f-9b21-4f2e-91b3-4a467353bcc0","ssvcData":{"timestamp":"2026-08-03T15:00:37.506412Z","id":"CVE-2026-68581","options":[{"exploitation":"poc"},{"automatable":"no"},{"technicalImpact":"total"}],"role":"CISA Coordinator","version":"2.0.3"}}]},"weaknesses":[{"source":"disclosure@vulncheck.com","type":"Secondary","description":[{"lang":"en","value":"CWE-863"}]}],"references":[{"url":"https://github.com/go-vikunja/vikunja/commit/95b7e673fb5ee407498fa4b13e8b4c57847a4a0b","source":"disclosure@vulncheck.com"},{"url":"https://github.com/go-vikunja/vikunja/commit/e6b25bd57b537ef9a72b5acdadf446ca5ef77bfa","source":"disclosure@vulncheck.com"},{"url":"https://github.com/go-vikunja/vikunja/security/advisories/GHSA-vvcv-vpph-h844","source":"disclosure@vulncheck.com"},{"url":"https://www.vulncheck.com/advisories/vikunja-through-authentication-bypass-via-principal-id-collision","source":"disclosure@vulncheck.com"},{"url":"https://github.com/go-vikunja/vikunja/security/advisories/GHSA-vvcv-vpph-h844","source":"134c704f-9b21-4f2e-91b3-4a467353bcc0"}]}