Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate as low-privileged staff user
-
DeliveryStore script payload in task title
-
ExploitAdministrator opens task changelist/change form
-
ExecutionPayload executes in admin session
-
ImpactCreate superuser / hijack admin actions
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 staff-level account in Koalix CRM (through 1.14.0) with permission to create or edit tasks, so the attacker must already be an insider or have compromised staff credentials. The injected payload is inert until an administrator opens the task changelist or task change form in the Django admin - this required admin interaction (UI:P) is the primary limiting factor. Exploitation is confined to deployments exposing the Django admin task views and does not affect anonymous or read-only users; there is no path for unauthenticated remote triggering. |
| Impact | This is a medium-severity stored XSS (CVSS 4.0 base 5.1) that should be treated as a low-to-moderate real-world priority rather than an emergency. The CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:L/UI:P/VC:L/VI:L/VA:N/SC:L/SI:L/SA:N) shows that while the attack is network-deliverable with low complexity, it explicitly requires existing privileges (PR:L - a staff-level account) and passive victim interaction (UI:P - an administrator must open the affected task view). This is therefore a privilege-escalation path for an already-trusted insider, not a path for anonymous internet attackers. No EPSS score, CISA KEV listing, or public POC is present in the provided data, so there is no public exploit identified at time of analysis and no evidence of active exploitation; the finding originates from a VulnCheck advisory and a GitHub issue rather than incident reporting. The limited-but-non-zero integrity/confidentiality impact plus the plausible superuser-creation escalation keeps it worth patching, but the authentication precondition and reliance on admin interaction substantially constrain practical risk. No signals conflict; the main gap is the absence of exploitation-probability data (EPSS) and any POC confirmation. |
| Exploit ScenarioDerived | A low-privileged staff user with access to the Koalix CRM task module creates or edits a task whose title contains a malicious script payload. Because Task.link_to_task() renders the title unescaped, the script executes in the browser of any administrator who later opens the task changelist or change form in the Django admin, running in that admin's authenticated session. No public POC is referenced, but the attacker could use the executed script to perform admin-level actions such as creating a new superuser account. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 19, 2026
Stored cross-site scripting in Koalix CRM through 1.14.0 allows authenticated staff users who can create or edit tasks to persist HTML or JavaScript in a task title, which the Task.link_to_task() helper renders unescaped inside the Django admin task changelist and change form. The payload stays inert until an administrator views the affected list or record, so successful abuse requires admin interaction and, at minimum, a valid staff-level account - meaning the realistic threat is a malicious or compromised insider rather than an anonymous remote attacker. Impact is rated medium (CVSS 4.0 base 5.1; assessed CVSS 3.1 AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N) and no public exploit code or confirmed active exploitation was identified at time of analysis; an attacker who does land the payload could perform admin-context actions such as creating a superuser account.
RemediationAI
No vendor-released patch version is identified at time of analysis - the 1.14.0 tag still contains the vulnerable helper, so remediation depends on tracking https://github.com/KoalixSwitzerland/koalixcrm/issues/444 for a fixed release and upgrading as soon as one is published. In the interim, the most direct control is a code-level fix in your own deployment: change Task.link_to_task() to build the anchor with django.utils.html.format_html() or escape the title with django.utils.html.escape() and drop any mark_safe() on the interpolated title; the trade-off is that this is a locally maintained fork that must be rebased on each upstream update. Operationally, restrict the Django admin task changelist and change form to a small trusted administrator group, and review which staff roles retain task create/edit permission, since any such account is a valid injection source - the trade-off is reduced workflow flexibility for non-admin staff. Network-restricting the admin interface to a VPN or management IP range reduces exposure to any authenticated-but-remote attacker at the cost of convenience for distributed admins. Deploying a Content-Security-Policy without 'unsafe-inline' on the admin origin can neutralize the payload, but may break existing inline admin widgets and requires testing. Finally, audit and sanitize existing task titles containing HTML tags or script fragments before enabling stricter escaping, to clear any already-stored payloads. Refer to https://www.vulncheck.com/advisories/koalixcrm-through-1.14.0-stored-xss-via-task-title-in-django-admin and the vendor issue for further guidance.
Affected VersionsENISA
Affected Packages
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
Koalix CRM is a Django-based business application whose admin interface is served by the standard Django admin site. Task.link_to_task() is a model helper that builds an HTML anchor for a task record and returns it as a marked-safe string; because the task title is interpolated directly into that markup instead of being passed through django.utils.html.format_html() or escape(), Django's automatic template escaping is bypassed and the title is emitted as raw HTML. This is the classic CWE-79 stored/persistent variant: the tainted value is committed to the database through ordinary staff edit workflows and is only detonated when a higher-privileged user loads the task changelist or change form, giving the script the administrator's session context. A secondary weakness, implied by the described ability to create a superuser, is the absence of adequate CSRF/privilege-separation defenses around admin write actions once same-origin script execution is achieved. The vulnerability affects the source tree at tag 1.14.0 (koalixcrm/crm/reporting/task.py) and is tracked upstream as GitHub issue #444; deployments that do not expose the Django admin task views are not reachable through this path.
Know when Django 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
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:L/VI:L/VA:N/SC:L/SI:L/SA:N
Staff account needed so PR:L; admin must view the task so UI:R; script runs in the admin's browser context crossing a trust boundary so S:C; limited confidentiality/integrity impact and no availability loss.
Primary rating from Vendor (vulncheck).
CVSS VectorVendor: vulncheck
DescriptionCVE.org
Koalixcrm through 1.14.0 contains a stored cross-site scripting vulnerability that allows staff users to inject script by storing malicious task titles rendered unescaped by Task.link_to_task(). Attackers can embed HTML or script that executes when administrators open the task changelist or change form, enabling actions like creating a superuser.
Threat Intelligence Overview
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.
The package python/cpython from 0 and before 3.6.13, from 3.7.0 and before 3.7.10, from 3.8.0 and before 3.8.8, from 3.9
In Django 1.10.x before 1.10.8 and 1.11.x before 1.11.5, HTML autoescaping was disabled in a portion of the template for
An issue was discovered in Django 3.2 before 3.2.14 and 4.0 before 4.0.6. Rated critical severity (CVSS 9.8), this vulne
Django 3.1.x before 3.1.13 and 3.2.x before 3.2.5 allows QuerySet.order_by SQL injection if order_by is untrusted input
Django before 1.11.27, 2.x before 2.2.9, and 3.x before 3.0.1 allows account takeover. Rated critical severity (CVSS 9.8
An authentication/authorization bypass in the djust Python live-view framework (versions prior to 1.0.7) lets unauthenti
Unauthenticated arbitrary Python module import in djust before 1.0.7 lets any client that can reach the WebSocket or SSE
Django 1.11 before 1.11.29, 2.2 before 2.2.11, and 3.0 before 3.0.4 allows SQL Injection if untrusted data is used as a
Cross-site scripting (XSS) vulnerability in the dismissChangeRelatedObjectPopup function in contrib/admin/static/admin/j
Forged content modification in django-page-cms through 2.0.13 lets unauthenticated remote attackers exploit five CSRF-ex
Cross-site request forgery in djust's Server-Sent-Events transport affects all versions prior to 1.0.7 and allows a cros
Unauthenticated remote attackers can read live Django view and session state and invoke server-side handlers through dju
EUVD-2026-104284
GHSA-3rx2-qcp6-mwjp
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB