{"id":"CVE-2026-57458","kind":"vulnerability","aliases":["CVE-2026-57458","GHSA-v3p6-34mc-hj7v","GO-2026-6750"],"related":[],"title":"Vikunja: Scoped API token can mint unrestricted OAuth session credentials in code.vikunja.io/api","description":"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.","summary":"Vikunja, a self-hosted task manager, lets an API token scoped only to oauth.authorize exchange it for a full bearer JWT and refresh token. Those credentials are not limited by the token's scope, so an attacker with the scoped token can reach any route the same user can access.","severity":"high","cvss":8.1,"epss":0.00265,"exploited":false,"exploited_at":null,"products":[{"name":"code.vikunja.io/api","fixed":[],"affected":"all versions","ecosystem":"go"}],"ecosystems":["go"],"tags":["go","package","self-hosted","vikunja"],"not_affected_if":["managed-hosting","no-scoped-api-tokens","not-on-2.3.0"],"how_to_check":"Check the deployed Vikunja version (2.3.0 is affected; the fix ships in 2.4.0), and list API tokens for any scoped to oauth.authorize.","fix":"Upgrade the code.vikunja.io/api module and Vikunja server to 2.4.0 or later.\nRevoke API tokens that carry the oauth.authorize scope until upgraded.","status":"open","published_at":"2026-10-09T21:17:05+00:00","first_seen_at":"2026-10-23T19:13:08+00:00","triaged_at":"2026-10-23T19:52:48+00:00","updated_at":"2026-10-23T19:52:48+00:00","category":"package","confidence":0.8,"triage":{"at":"2026-10-23T19:52:48Z","model":"claude-haiku-5-5","output":{"fix":"Upgrade the code.vikunja.io/api module and Vikunja server to 2.4.0 or later.\nRevoke API tokens that carry the oauth.authorize scope until upgraded.","summary":"Vikunja, a self-hosted task manager, lets an API token scoped only to oauth.authorize exchange it for a full bearer JWT and refresh token. Those credentials are not limited by the token's scope, so an attacker with the scoped token can reach any route the same user can access.","category":"package","who_cares":["vikunja","go","self-hosted"],"confidence":0.8,"analyst_note":"","how_to_check":"Check the deployed Vikunja version (2.3.0 is affected; the fix ships in 2.4.0), and list API tokens for any scoped to oauth.authorize.\nunknown","needs_analyst":false,"not_affected_if":["managed-hosting","not-on-2.3.0","no-scoped-api-tokens"],"severity_if_unknown":"high"},"cost_usd":0.000393,"input_tokens":2226,"output_tokens":341,"severity_before":"high"},"analyst_status":null,"analyst_note":null,"search":"'-2026':16A,24A,27A '-57458':17A,28A '-6750':25A '/api':14A,31A '/api/v1/oauth/authorize':116C '/api/v1/oauth/token':128C '2.3.0':103C '2.4.0':166C '34mc':21A 'access':88B,154C 'allow':153C 'api':3A,47B,106C,149C 'attack':75B 'author':120C 'bearer':58B,132C 'call':114C 'code':121C,125C 'code.vikunja.io':13A,30A 'code.vikunja.io/api':12A,29A 'credenti':10A,64B,142C 'cve':15A,26A 'declar':159C 'exchang':53B,123C 'fix':167C 'full':57B 'ghsa':19A 'ghsa-v3p6-34mc-hj7v':18A 'go':23A,32B 'hj7v':22A 'host':36B,42B,97C 'json':133C 'jwt':59B,136C 'let':45B 'limit':67B,108C 'manag':44B,99C 'mint':6A 'normal':131C 'oauth':8A,119C 'oauth.authorize':52B,111C 'obtain':117C 'open':93C 'open-sourc':92C 'origin':148C 'outsid':157C 'packag':33B 'permiss':112C,152C 'platform':100C 'post':115C,127C 'reach':81B 'refresh':61B,138C 'restrict':145C 'result':141C 'rout':83B,156C 'scope':2A,49B,72B,78B,105C,160C 'self':35B,41B,96C 'self-host':34B,40B,95C 'session':9A 'sourc':94C 'task':43B,98C 'token':4A,48B,62B,70B,79B,107C,135C,139C,150C 'unrestrict':7A 'user':86B,164C 'v3p6':20A 'version':102C,165C 'vikunja':1A,37B,38B,89C 'vulner':169C 'web':134C","nicknames":[],"mitigations":[],"who_affected":null,"tier":null,"verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-09T21:17:05+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N","cvss_by":"security-advisories@github.com","poc_count":0,"sources":[{"source":"govuln","external_id":"GO-2026-6750","url":"https://pkg.go.dev/vuln/GO-2026-6750","severity":null,"published_at":"2026-10-19T21:08:26+00:00","modified_at":"2026-10-19T21:08:26+00:00","first_seen_at":"2026-10-23T19:13:08+00:00","fetched_at":"2026-10-23T19:13:08+00:00","note":null},{"source":"epss","external_id":"CVE-2026-57458","url":"https://api.first.org/data/v1/epss?cve=CVE-2026-57458","severity":null,"published_at":null,"modified_at":null,"first_seen_at":"2026-10-23T19:13:43+00:00","fetched_at":"2026-10-23T19:13:43+00:00","note":null},{"source":"nvd","external_id":"CVE-2026-57458","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-57458","severity":null,"published_at":"2026-10-09T21:17:05+00:00","modified_at":"2026-10-16T20:04:29+00:00","first_seen_at":"2026-10-23T19:35:23+00:00","fetched_at":"2026-10-23T19:35:23+00:00","note":null}],"documents":[],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}