Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessSubmit crafted HTML ticket via public form
-
DeliveryMalicious payload stored in helpdesk database
-
ExploitStaff member opens attachment during triage
-
ExecutionBrowser renders HTML inline without Content-Disposition header
-
PersistInjected JavaScript executes in authenticated staff session
-
ImpactSession token or sensitive data exfiltrated to attacker
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 | Injection of the malicious payload requires no authentication - the public ticket submission endpoint is open to any internet user by default and accepts both HTML-formatted email bodies and .html/.htm file attachments. Triggering the stored XSS payload requires an authenticated staff member to open the malicious attachment in their browser while logged into the helpdesk application; this user interaction (UI:P) is a normal part of the ticket triage workflow and should not be considered a strong defensive barrier. Specific enabling conditions are: (1) the public-facing ticket submission channel must be reachable, which is the default deployment posture; (2) the attachment-serving endpoint must deliver .html/.htm files without a Content-Disposition: attachment header, which is the unpatched default behavior; and (3) an authenticated staff user must open the attachment in a browser session. Exploitation is constrained by the requirement for staff interaction and does not affect systems where .html/.htm attachments are blocked at the email gateway or reverse proxy level before reaching the helpdesk application. |
| Impact | The CVSS 4.0 vector AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N scoring 5.3 accurately captures the attack topology: the initial payload injection requires no authentication (PR:N) and no special conditions (AT:N), while downstream harm manifests in the subsequent system - the staff member's browser session - reflected in SC:L/SI:L rather than VC/VI. The UI:P requirement (staff must open the attachment) is a formally limiting factor but is operationally weak, since triaging attachments is routine helpdesk work. No EPSS data was supplied, no KEV listing is present, and no POC is publicly known, indicating this is a newly disclosed issue without confirmed active exploitation. Real-world priority is moderate: the attack surface is wide (any internet user can submit a ticket), the payload is persistent (stored), and the target population is privileged (staff with access to sensitive ticket data). The relatively low CVSS score reflects limited impact scope rather than low exploitability - defenders should not treat the 5.3 score as a deferral justification given the unauthenticated injection path and high-value target sessions. |
| Exploit ScenarioDerived | An unauthenticated attacker submits a helpdesk ticket via the public web form, attaching a crafted .html file containing JavaScript that beacons the staff member's session cookie to an attacker-controlled server. When a helpdesk staff member opens the ticket to triage it and clicks the attachment link, the absence of a Content-Disposition: attachment header causes the browser to render the file inline in the authenticated session context, executing the script and silently exfiltrating the session token. No public exploit code has been identified at time of analysis, but the attack is mechanically straightforward given the documented injection surface. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 13, 2026
Stored XSS in django-helpdesk before 2.3.3 enables unauthenticated external attackers to inject arbitrary JavaScript into the authenticated staff interface by submitting HTML-formatted ticket email bodies or uploading .html/.htm file attachments through the public-facing ticket submission channel. The payload persists in the helpdesk database and executes in the browser session of any staff member who opens the attachment during routine triage, enabling session hijacking, credential exfiltration, or unauthorized actions performed under the staff member's identity. No public exploit has been identified at time of analysis and the vulnerability is not listed in the CISA KEV catalog.
RemediationAI
Upgrade django-helpdesk to version 2.3.3 or later; this release addresses both the HTML input sanitization gap and the missing Content-Disposition headers on the attachment-serving layer. Full patch details are documented in the GitHub security advisory GHSA-q46c-8w98-fq2g at https://github.com/django-helpdesk/django-helpdesk/security/advisories/GHSA-q46c-8w98-fq2g. If immediate upgrade is not possible, a compensating control for the attachment-serving vector is to configure a reverse proxy (e.g., nginx) to force a Content-Disposition: attachment response header for all .html and .htm files served from the helpdesk attachment directory - this prevents inline browser rendering but does not address HTML-formatted email body injection and should be treated as a partial mitigation only. Additionally, restricting staff access to the helpdesk interface via network-level controls (VPN or IP allowlisting) reduces the window of exposure for stored payloads until patching is complete, at the cost of limiting remote staff access.
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
django-helpdesk is an open-source Django (Python) ticketing application that accepts ticket submissions from unauthenticated users via web forms and email ingestion. The vulnerability maps to CWE-79 (Improper Neutralization of Input During Web Page Generation - Stored XSS) and manifests at two distinct layers: the application fails to sanitize HTML content present in incoming email-formatted ticket bodies, and the attachment-serving layer omits Content-Disposition: attachment headers for .html/.htm files, causing browsers to render them inline rather than prompt a download. The stored nature of this XSS means the payload is persisted in the database on submission and re-executes each time any authenticated staff member views the ticket attachment. CPE cpe:2.3:a:django-helpdesk:django-helpdesk:*:*:*:*:*:*:*:* confirms all versions prior to 2.3.3 are within scope.
Know when Django Helpdesk 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:N/UI:P/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N
Unauthenticated network injection (AV:N, PR:N, AC:L), staff interaction required to trigger (UI:R), scope changes to victim session (S:C), limited confidentiality and integrity impact only.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
Lifecycle Timeline
1DescriptionCVE.org
django-helpdesk before 2.3.3 contains a stored cross-site scripting vulnerability that allows unauthenticated attackers to inject arbitrary JavaScript by submitting HTML-formatted email messages or uploading .html/.htm file attachments through public ticket submission channels. Attackers can exploit the lack of sanitization and Content-Disposition headers at the attachment-serving layer to execute malicious scripts in the browser session of authenticated staff members who open the attachment while triaging tickets.
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.
More in Django Helpdesk
View alldjango-helpdesk is vulnerable to Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting'). R
django-helpdesk is vulnerable to Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting'). R
django-helpdesk is vulnerable to Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting'). R
django-helpdesk before 1.0.0 allows Sensitive Data Exposure because of os.umask(0) in models.py. Rated medium severity (
EUVD-2026-58243
GHSA-67qv-r9gc-cpwj
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB