{"schemaVersion":3,"id":"CVE-2026-111917","aliases":["GHSA-4hv6-xc92-j86g","GO-2026-6715"],"status":"published","duplicateOf":null,"title":null,"description":"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.","dates":{"published":"2026-10-17T18:46:32.545Z","modified":"2026-10-19T14:59:06.808Z","reserved":null,"kevAdded":[],"kevDue":[]},"cvss":{"headline":{"score":7.1,"severity":"high","version":"4.0","versionLabel":"v4.0","source":"CVE.org","vector":"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","computed":false,"selection":"backend-summary"},"metrics":[{"version":"4.0","versionLabel":"v4.0","source":"CVE.org","score":7.1,"severity":"high","vector":"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","exploitability":null,"impact":null,"computed":false},{"version":"3.1","versionLabel":"v3.1","source":"CVE.org","score":6.5,"severity":"medium","vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N","exploitability":null,"impact":null,"computed":false},{"version":"4.0","versionLabel":"v4.0","source":"NVD","score":7.1,"severity":"high","vector":"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/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","exploitability":null,"impact":null,"computed":false},{"version":"3.1","versionLabel":"v3.1","source":"NVD","score":6.5,"severity":"medium","vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N","exploitability":null,"impact":null,"computed":false},{"version":"3.1","versionLabel":"v3.1","source":"OSV · Go","score":6.5,"severity":"medium","vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N","exploitability":7.2,"impact":6,"computed":true}]},"epss":{"probability":0.00281,"percentile":0.19467,"severity":"low","asOf":"2026-10-21T00:00:00.000Z","change":{"pp":null,"baselineDate":null,"baselineScore":null},"history":[{"date":"2026-10-18T00:00:00.000Z","score":0.00281,"percentile":null},{"date":"2026-10-19T00:00:00.000Z","score":0.00281,"percentile":null},{"date":"2026-10-20T00:00:00.000Z","score":0.00281,"percentile":null},{"date":"2026-10-21T00:00:00.000Z","score":0.00281,"percentile":0.19467}],"last30":[{"date":"2026-10-18T00:00:00.000Z","score":0.00281,"percentile":null},{"date":"2026-10-19T00:00:00.000Z","score":0.00281,"percentile":null},{"date":"2026-10-20T00:00:00.000Z","score":0.00281,"percentile":null},{"date":"2026-10-21T00:00:00.000Z","score":0.00281,"percentile":0.19467}]},"kev":{"state":"not-listed","entries":[],"listedCount":0,"totalCatalogs":3,"catalogs":[{"source":"cisa","label":"CISA","listed":false,"entry":null},{"source":"enisa","label":"ENISA","listed":false,"entry":null},{"source":"circl","label":"CIRCL","listed":false,"entry":null}]},"ransomware":{"state":"none-recorded","sources":[]},"exploits":[],"exploitCount":0,"weaknesses":[{"id":"CWE-613","name":"Insufficient Session Expiration","description":"According to WASC, \"Insufficient Session Expiration is when a web site permits an attacker to reuse old session credentials or session IDs for authorization.\"","type":"weakness","status":"Incomplete","abstraction":"Base","likelihoodOfExploit":null,"url":"https://cwe.mitre.org/data/definitions/613.html"}],"affected":[{"vendor":"go-vikunja","product":"vikunja","name":"vikunja","label":"vikunja","ecosystem":null,"cpePart":"a","purl":null,"purlType":null,"versions":[{"text":"≥ 2.3.0, < 2.7.0","noFixRecorded":false,"fixedIn":null}],"versionsText":"≥ 2.3.0, < 2.7.0","eol":null,"hubHref":"/vendor/go-vikunja/vikunja"},{"vendor":"code.vikunja.io","product":"api","name":"code.vikunja.io/api","label":"api","ecosystem":"Go","cpePart":null,"purl":"pkg:golang/code.vikunja.io/api","purlType":"golang","versions":[{"text":"≥ 2.3.0, ≤ 2.6.0","noFixRecorded":false,"fixedIn":null},{"text":"All versions","noFixRecorded":true,"fixedIn":null}],"versionsText":"≥ 2.3.0, ≤ 2.6.0 | All versions (No fix recorded)","eol":null,"hubHref":null}],"affectedCount":2,"eol":{"hasEol":false,"count":0},"references":[{"url":"https://github.com/go-vikunja/vikunja/security/advisories/GHSA-4hv6-xc92-j86g","label":"github.com/go-vikunja/vikunja/security/advisories/GHSA-4hv6-xc92-j86g","hostname":"github.com","tags":["Vendor Advisory","WEB","Advisory"]},{"url":"https://www.vulncheck.com/advisories/vikunja-2.3.0-before-2.7.0-websocket-authentication-ignores-session-revocation","label":"www.vulncheck.com/advisories/…","hostname":"www.vulncheck.com","tags":["Third Party Advisory"]},{"url":"https://github.com/go-vikunja/vikunja","label":"github.com/go-vikunja/vikunja","hostname":"github.com","tags":["PACKAGE"]}],"lineage":{"upstream":[],"downstream":[],"duplicates":[],"related":[]},"timeline":[{"kind":"published","date":"2026-10-17T18:46:32.545Z","label":"Published","detail":"Vulnerability first disclosed.","source":null},{"kind":"modified","date":"2026-10-19T14:59:06.808Z","label":"Last modified","detail":"Vulnerability information updated.","source":null}],"risk":{"score":28,"level":"medium","profile":"Default","thresholds":{"critical":75,"high":50,"medium":25,"low":10}},"meta":{"dataAsOf":"2026-10-22T03:04:14.641Z","stale":false,"partial":false}}