{"id":"CVE-2026-123496","kind":"vulnerability","aliases":["CVE-2026-123496"],"related":[],"title":"Vikunja veans: symlink following lets init write files outside repository","description":"Vikunja veans before 2.7.1 contains a symlink following vulnerability that allows attackers to make veans init write files outside the repository via crafted repo symlinks. Attackers can ship symlinked .veans.yml, .claude, or .opencode entries to overwrite user files like ~/.bashrc or install veans hooks and plugins globally.","summary":"Before version 2.7.1, the veans CLI's init command follows symlinks in a crafted repository, so it writes files outside the project. An attacker can use this to overwrite user files such as ~/.bashrc or install veans hooks and plugins globally.","severity":"medium","cvss":4.8,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["ai-tooling","claude-code","opencode","veans","vikunja"],"not_affected_if":["trusted-repos-only","veans-2.7.1-or-later"],"how_to_check":"- Check the installed veans version with `veans --version` (exact flag unknown from sources).\n- Look for symlinked `.veans.yml`, `.claude` or `.opencode` entries in repositories you cloned and ran veans init in.","fix":"- veans: move to `2.7.1` or later","status":"open","published_at":"2026-11-08T02:16:36+00:00","first_seen_at":"2026-11-08T02:21:07+00:00","triaged_at":"2026-11-08T02:25:30+00:00","updated_at":"2026-11-08T02:25:30+00:00","category":"ai-tooling","confidence":0.6,"triage":{"at":"2026-11-08T02:25:30Z","model":"claude-haiku-5-5","output":{"fix":"- veans: move to `2.7.1` or later","reach":"local","title":"Vikunja veans: symlink following lets init write files outside repository","impact":"high","summary":"Before version 2.7.1, the veans CLI's init command follows symlinks in a crafted repository, so it writes files outside the project. An attacker can use this to overwrite user files such as ~/.bashrc or install veans hooks and plugins globally.","audience":"developers","category":"ai-tooling","nicknames":[],"who_cares":["veans","vikunja","claude-code","opencode"],"confidence":0.6,"fix_status":"available","needs_auth":"no","worst_case":"Attacker overwrites user dotfiles or installs global hooks and plugins","analyst_note":"","how_to_check":"- Check the installed veans version with `veans --version` (exact flag unknown from sources).\n- Look for symlinked `.veans.yml`, `.claude` or `.opencode` entries in repositories you cloned and ran veans init in.","plain_action":"","needs_analyst":false,"not_affected_if":["veans-2.7.1-or-later","trusted-repos-only"],"who_is_affected":"Teams that run veans init on repositories they did not write, such as cloned or third-party code, are exposed. Reading the sources, a repository is the attack vector, so teams that only use veans on their own trusted repositories have lower exposure. unknown for any other deployment detail.","user_interaction":"yes","needs_special_setup":"no","severity_if_unknown":"medium"},"cost_usd":0.000691,"input_tokens":4282,"output_tokens":526,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-123496':13A,16A '-2026':12A,15A '/.bashrc':59B,106C '2.7.1':28B,70C 'ai':18B 'ai-tool':17B 'allow':77C 'attack':49B,78C,92C 'claud':21B,97C 'claude-cod':20B 'cli':31B 'code':22B 'command':34B 'contain':71C 'craft':39B,89C 'cve':11A,14A 'entri':100C 'file':8A,44B,56B,84C,104C 'follow':4A,35B,74C 'global':66B,113C 'hook':63B,110C 'init':6A,33B,82C 'instal':61B,108C 'let':5A 'like':105C 'make':80C 'opencod':23B,99C 'outsid':9A,45B,85C 'overwrit':54B,102C 'plugin':65B,112C 'project':47B 'repo':90C 'repositori':10A,40B,87C 'ship':94C 'symlink':3A,36B,73C,91C,95C 'tool':19B 'use':51B 'user':55B,103C 'vean':2A,24B,30B,62B,68C,81C,109C 'veans.yml':96C 'version':27B 'via':88C 'vikunja':1A,25B,67C 'vulner':75C 'write':7A,43B,83C","nicknames":[],"mitigations":[],"who_affected":"Teams that run veans init on repositories they did not write, such as cloned or third-party code, are exposed. Reading the sources, a repository is the attack vector, so teams that only use veans on their own trusted repositories have lower exposure. unknown for any other deployment detail.","tier":"B","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"developers","plain_action":null,"pkeys":[],"ptokens":[],"labels":["aitooling","claudecode","medium","opencode","veans","vikunja"],"campaign_type":null,"search_a":"'-123496':13A,16A '-2026':12A,15A 'cve':11A,14A 'file':8A 'follow':4A 'init':6A 'let':5A 'outsid':9A 'repositori':10A 'symlink':3A 'vean':2A 'vikunja':1A 'write':7A","search_b":"'/.bashrc':59B '2.7.1':28B 'ai':18B 'ai-tool':17B 'attack':49B 'claud':21B 'claude-cod':20B 'cli':31B 'code':22B 'command':34B 'craft':39B 'file':44B,56B 'follow':35B 'global':66B 'hook':63B 'init':33B 'instal':61B 'opencod':23B 'outsid':45B 'overwrit':54B 'plugin':65B 'project':47B 'repositori':40B 'symlink':36B 'tool':19B 'use':51B 'user':55B 'vean':24B,30B,62B 'version':27B 'vikunja':25B 'write':43B","search_c":"'/.bashrc':106C '2.7.1':70C 'allow':77C 'attack':78C,92C 'claud':97C 'contain':71C 'craft':89C 'entri':100C 'file':84C,104C 'follow':74C 'global':113C 'hook':110C 'init':82C 'instal':108C 'like':105C 'make':80C 'opencod':99C 'outsid':85C 'overwrit':102C 'plugin':112C 'repo':90C 'repositori':87C 'ship':94C 'symlink':73C,91C,95C 'user':103C 'vean':68C,81C,109C 'veans.yml':96C 'via':88C 'vikunja':67C 'vulner':75C 'write':83C","first_public_at":"2026-10-22T10:00:25+00:00","kev":null,"cvss_vector":"CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:P/VC:N/VI:L/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","cvss_by":"disclosure@vulncheck.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-123496","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-123496","severity":null,"published_at":"2026-11-08T02:16:36+00:00","modified_at":"2026-11-08T02:16:37+00:00","first_seen_at":"2026-11-08T02:21:07+00:00","fetched_at":"2026-11-08T02:21:07+00:00","note":null}],"documents":[{"id":99141,"url":"https://github.com/go-vikunja/vikunja/security/advisories/GHSA-rxwp-q2qg-98vw","title":"Vendor advisory: github.com","kind":"vendor","source":"nvd","publisher":"vendor","text":null,"published_at":"2026-10-22T10:00:25+00:00","relation":"advisory","confidence":null,"note":"Vendor advisory: github.com"},{"id":99142,"url":"https://www.vulncheck.com/advisories/vikunja-veans-before-2.7.1-symlink-following-in-veans-init","title":"Third-party advisory: www.vulncheck.com","kind":"advisory","source":"nvd","publisher":"research","text":null,"published_at":null,"relation":"advisory","confidence":null,"note":"Third-party advisory: www.vulncheck.com"}],"exploit_sources":[],"notice":"Free to read, with fair use of about 60 pages a minute. For higher limits or API access: sales@infrastack.ai"}