Skip to main content

Vikunja CVE-2026-115507

| EUVDEUVD-2026-108339 MEDIUM
Cross-site Scripting (XSS) (CWE-79)
2026-10-22 VulnCheck GHSA-j37p-9r5c-rjgj
5.1
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Authenticate and join a shared project
  2. Exploit
    Set malicious task title or display name closing the anchor
  3. Execution
    Mention or assign victim to trigger notification email
  4. Impact
    Victim opens email and clicks injected phishing link

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Output encoding, context-aware escaping
MITRE ATT&CK

2 techniques across 2 tactics: Initial Access, Execution

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Requires an authenticated Vikunja account (PR:L) that can set attacker-controlled text that reaches the conversational email header: a task title, project title, or the commenter's own display name. The attacker must also share a project with the victim and trigger a task-comment or task-mention notification (e.g. by commenting with an @mention or assigning the victim) so Vikunja emails other project members. The technical enabler is that the header passes these strings raw into an existing <a href> element and then sanitizes with bluemonday UGCPolicy, which deliberately preserves http/https anchors (only adding rel="nofollow"), allowing an anchor-breakout phishing link; an injected <img> is neutralized because RewriteSrc blanks non-data: sources, so no tracking pixel. LIMITING FACTORS: no script execution is possible (not a true XSS), impact is confined to a phishing link; the victim must click it (UI:P), must use an HTML-rendering email client, and the attacker must already have project membership. Affects versions 2.2.0 up to but not including 2.7.1.

Impact

This is a genuine but low-to-moderate priority issue, not an inflated high-severity bug. The CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:L/VA:N, 5.1 Medium) is internally consistent with the mechanism: a network-reachable but authenticated attacker (PR:L - must hold a Vikunja account and be a member of a shared project) injects an HTML anchor whose only impact is limited integrity (VI:L, a phishing link in a notification email), with no confidentiality or availability impact and no scope change to other systems. Exploitation is passive-user-interaction dependent (UI:P): a victim must actually click the injected phishing link for harm to occur. No CISA KEV listing is present and no EPSS score was supplied, so there is no signal of active or widespread exploitation; the vuln.today decision label is 'this_month', consistent with a patch-on-normal-cadence item rather than an emergency. A detailed, end-to-end working reproduction exists inside the vendor GHSA advisory (tested on v2.6.0), which raises practical exploitability above a purely theoretical finding. Notably this is an explicitly incomplete fix of the earlier GHSA-45q4-x4r9-8fqj / CVE-2026-35600, where the vendor wrongly assumed bluemonday's raw-HTML sanitization of the conversational header was sufficient. The signals align rather than conflict: moderate CVSS, no KEV, no EPSS, PoC present, routine patch cadence - treat as a standard scheduled remediation.

Exploit ScenarioDerived

An authenticated attacker who is a member of a shared Vikunja project creates a task whose title is '</a><a href="https://evil.example/phish">Verify your account</a>' (or sets a malicious display name), then comments to mention or assigns a victim project member. Vikunja emails that member a task-comment/task-mention notification whose conversational header interpolates the title raw inside an existing anchor, so the payload breaks out and renders a clickable attacker-controlled phishing link. A detailed working reproduction is published in the vendor GHSA advisory; harm requires the recipient to click the injected link (UI:P).

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 22, 2026

HTML injection in the conversational notification header of Vikunja 2.2.0 through 2.7.0 allows an authenticated project member to break out of the display anchor and plant a clickable phishing link in task-comment and task-mention emails that Vikunja sends to other project members. The attacker only needs control of text that reaches the header - a task title, a project title or their own display name - plus shared project membership and an action that triggers a notification (an @mention or an assignment). Impact is confined to link injection in the rendered email: no script execution is possible, remote images are neutralized by the sanitizer, and the recipient must click the injected link in an HTML-capable mail client, so the practical effect is credential-phishing redirection rather than code execution or data compromise. No CISA KEV entry, no confirmed public exploit code and no EPSS signal are present in the supplied data; the vendor advisory does include a detailed end-to-end lab reproduction using the REST API and a local SMTP sink.

RemediationAI

Upgrade Vikunja to 2.7.1, the fixed version listed in the advisory package metadata and in the referenced release tag https://github.com/go-vikunja/vikunja/releases/tag/v2.7.1. The escaping fix is commit 18ff05932632c65dbc90a88118597989c6af4bf9, which html.EscapeString() escapes the action, task URL, project title, task title and task identifier in CreateConversationalHeader and adds a regression test asserting that injected href attributes do not reach the HTML message. Note the GHSA narrative describes the fix as landed on main via that commit and states that no released version carried it at advisory drafting, so confirm the v2.7.1 tag actually contains commit 18ff059 before relying on the release alone. The advisory documents no official workaround; the only complete fix it describes is the escaping change. As an operational containment measure pending upgrade, turning off the mailer or conversational notification emails removes the vulnerable sink entirely, at the cost of losing all email notification delivery, and recipients who read notifications in a plain-text mail client are not exposed to the injected anchor.

Affected VersionsENISA

vikunja 2.2.0 <2.7.1

Affected Packages

euvd vikunja fix: 2.7.1

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

Vikunja is a Go task/project management application (Go module go/code.vikunja.io/api) whose notification subsystem renders HTML emails. In pkg/notifications/mail.go, CreateConversationalHeader builds the header with fmt.Sprintf, placing the doer's display name (via the i18n action string) and the raw project title and task title inside an existing <a href> element: the format string emits "(%s &gt; %s) %s</a>". The assembled header string is then sanitized in pkg/notifications/mail_render.go as raw HTML by a bluemonday UGCPolicy, which intentionally permits http/https anchors and merely appends rel="nofollow". Because the attacker-controlled titles are interpolated before sanitization and inside an anchor context, a title such as </a><a href="https://evil.example/phish">Verify your account</a> closes the legitimate anchor and passes a fully formed phishing link through the policy. The advisory notes that an injected <img> is not useful as a tracking pixel because RewriteSrc (mail_render.go) blanks every non-data: source. Root cause class is CWE-79 (improper neutralization of input before it is placed in an HTML document), realized here as an anchor-context breakout rather than classic script XSS. This is an incomplete fix of GHSA-45q4-x4r9-8fqj (CVE-2026-35600): commit 0f3730d escaped every Line(...) call in pkg/models/notifications.go but deliberately left the header call untouched, on the assumption that bluemonday sanitization of the finished string made escaping unnecessary. The supplied fix commit 18ff059 wraps action, taskURL, projectTitle, taskTitle and taskIdentifier in html.EscapeString and replaces the manual &gt;/&lt;/&amp; replacements in convertLinesToPlain with html.UnescapeString, with a regression test asserting that href="https://evil.example" does not appear in the HTML message while the escaped text survives in the plain-text part.

Know when Vikunja gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (VulnCheck) PRIMARY 5.1 MEDIUM
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N
vuln.today AI 3.5 LOW

Authenticated project member injects content (PR:L), delivered over the network via email; victim must click the link (UI:R); only limited integrity impact (phishing content), no confidentiality or availability, no scope change.

3.1 AV:N/AC:L/PR:L/UI:R/S:U/C:N/I:L/A:N
4.0 AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (VulnCheck).

CVSS VectorVendor: VulnCheck

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
Low
User Interaction
Passive
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
Low
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

DescriptionCVE.org

Vikunja 2.2.0 before 2.7.1 contains an HTML injection vulnerability in CreateConversationalHeader in pkg/notifications/mail.go that interpolates display names and task and project titles raw into email anchors. Authenticated users can craft titles or display names that close the anchor and inject phishing links into task-comment and task-mention notification emails sent to project members.

Threat Intelligence Overview

EPSS Score
0.2%
Top 91% exploitable
Prevalence
Low
niche self-hosted open-source task/project manager, limited enterprise footprint
Data Quality
4 sources
Confidence: Medium

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact· derived
Medium

Priority Score

26
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +26
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.

CVE-2026-68582 CRITICAL POC
9.3 Aug 02

Cross-tenant information disclosure in the self-hosted task manager Vikunja (0.24.0 through 2.3.0) lets a holder of any

CVE-2026-27575 CRITICAL POC
9.1 Feb 25

Weak password policy in Vikunja task management before 2.0.0 allows users to set trivially guessable passwords. PoC avai

CVE-2026-68581 HIGH POC
8.6 Aug 02

Principal type confusion in Vikunja (versions 0.22.0-2.3.0) allows an authenticated low-privilege attacker to fully cont

CVE-2026-27616 HIGH POC
7.3 Feb 25

Stored cross-site scripting (XSS) in Vikunja prior to version 2.0.0 allows authenticated attackers to steal authenticati

CVE-2026-27819 HIGH POC
7.2 Feb 25

Vikunja before version 2.0.0 contains a path traversal vulnerability in its backup restoration function that fails to va

CVE-2026-27116 MEDIUM POC
6.1 Feb 25

Vikunja is an open-source self-hosted task management platform. [CVSS 6.1 MEDIUM]

CVE-2026-28268 CRITICAL
9.8 Feb 27

Business logic vulnerability in Vikunja task management platform before 2.1.0 allows incomplete resource cleanup, potent

CVE-2026-56765 CRITICAL
9.3 Jul 10

Instance-wide data breach in Vikunja before 2.2.1 lets remote attackers exfiltrate and destroy every file attachment acr

CVE-2026-34727 CRITICAL
9.1 Apr 10

Vikunja's OIDC callback handler issues a full JWT to any successfully matched user without checking whether that account

CVE-2026-91973 HIGH POC
8.7 Sep 15

Vikunja instances before 2.6.0 expose CalDAV BasicAuth endpoints (/dav, /.well-known, and /feeds) that are not covered b

CVE-2026-91972 HIGH POC
8.7 Sep 15

Vikunja versions before 2.6.0 ship authentication endpoints under /api/v2 (login, register, password-reset, and OAuth to

CVE-2026-91985 HIGH POC
8.7 Sep 15

Vikunja prior to 2.6.0 leaks the secret hash that backs a project's link shares through its single-share read endpoint,

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy