go-vikunja/vikunja · Security
Vikunja Vulnerable to XSS Via Task Preview
- GHSA ID
- GHSA-m4g2-2q66-vc9v
- CVE ID
- CVE-2026-25935
- Severity
- high
- Published
- Updated
- CVSS v4
- 8.6 · CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N
Description
Summary
The task preview component creates a unparented div. The div's innerHtml is set to the unescaped description of the task
Details
In the TaskGlanceTooltip.vue it temporarily creates a div and sets the innerHtml to the description here. Since there is no escaping on either the server or client side, a malicious user can share a project, create a malicious task, and cause an XSS on hover.
PoC
- Create a project
- Create a task with any description
- Use the api to update the task with a description containing unescaped HTML (ex:
<img src=x onerror="alert(localStorage.getItem('token'))"> - Share the project with any permission level
- Send malicious project to user and ask them to view task
Impact
Any user on an instance can cause an XSS on another
CWEs
- CWE-79 · Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')
- CWE-80 · Improper Neutralization of Script-Related HTML Tags in a Web Page (Basic XSS)
References
- https://github.com/go-vikunja/vikunja/security/advisories/GHSA-m4g2-2q66-vc9v ↗
- https://github.com/go-vikunja/vikunja/commit/dd0b82f00a8c9ded1c19a1e643a197c514be6d37 ↗
- https://github.com/go-vikunja/vikunja/releases/tag/v1.1.0 ↗
- https://nvd.nist.gov/vuln/detail/CVE-2026-25935 ↗
- https://vikunja.io/changelog/vikunja-v1.1.0-was-released ↗
- https://github.com/advisories/GHSA-m4g2-2q66-vc9v ↗