Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain authenticated agent account
-
DeliveryUpload SVG with Content-Type 'image/svg+xml; x' via /api/v1/media
-
ExploitMalformed param bypasses exact-match SVG sandbox
-
ExecutionAdmin/agent opens /uploads/{uuid} inline
-
PersistScript executes in victim session
-
ImpactHijack administrator session/account
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 | Exploitation requires (1) an authenticated LibreDesk agent account able to upload media via /api/v1/media, and (2) a crafted SVG whose Content-Type carries a trailing parameter (e.g. 'image/svg+xml; x') so the vulnerable code's exact string comparison against 'image/svg+xml' fails and the file is served inline instead of sandboxed; and (3) a victim agent or administrator who subsequently opens GET /uploads/{uuid} in their browser. Limiting factors that reduce real-world risk: it cannot be triggered by an unauthenticated outsider (requires a valid agent session, PR:L), it depends on victim user interaction (viewing the file, UI:P), and it only affects versions before 2.9.0-rc.8 - patched instances normalize the content type and apply a sandbox CSP to attachments. |
| Impact | This is a medium-severity stored XSS (CVSS 4.0 base 5.1) that realistically ranks as a moderate, not top, priority. The CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:L/UI:P/VC:L/VI:L/VA:N with subsequent-system SC:L/SI:L) is internally consistent with the description: network-reachable upload endpoint, low complexity, but requiring an authenticated agent (PR:L) to plant the payload and a victim to view it (UI:P). Impact is capped at Low across confidentiality and integrity because execution is confined to the browser session context rather than the server. No EPSS score, KEV entry, or public PoC was provided in the input; per the available signals this is 'no public exploit identified at time of analysis.' There is no signal conflict here - all sources point to a privilege- and interaction-gated web vulnerability. The main residual risk is privilege escalation within the application: an attacker with a low-privilege agent account can execute script in an administrator's session, which is why this still merits timely patching despite the medium score. Note the PR:L requirement means an external unauthenticated attacker cannot exploit this directly; it presumes a malicious or compromised agent account. |
| Exploit ScenarioDerived | A malicious or compromised low-privilege LibreDesk agent uploads an SVG containing a <script> payload via /api/v1/media, deliberately setting the Content-Type to 'image/svg+xml; x' so it evades the exact-string SVG sandbox check. When another agent or an administrator later opens that media via GET /uploads/{uuid}, the server serves it inline without the sandbox CSP and the script runs in the victim's authenticated session. No public exploit code was provided in the input, but the technique is fully described in the VulnCheck advisory and the fix commit. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 15, 2026
Stored cross-site scripting in LibreDesk versions before 2.9.0-rc.8 allows an authenticated agent to upload a crafted SVG whose Content-Type is supplied with a trailing parameter (for example 'image/svg+xml; x'), causing the application's exact-match check against 'image/svg+xml' to fail so the file is served inline without a sandboxing Content-Security-Policy instead of as an attachment. When a victim agent or administrator subsequently requests GET /uploads/{uuid}, the embedded script executes in their browser session, giving the attacker the ability to act with the victim's privileges in the helpdesk UI. Exploitation requires a valid agent session (CVSS vector PR:L) and victim interaction (UI:P), and only pre-2.9.0-rc.8 instances are affected; no public exploit code has been identified at time of analysis and the issue is not listed as confirmed actively exploited (CISA KEV), so it ranks as a medium-priority, patched vulnerability.
RemediationAI
Upgrade LibreDesk to 2.9.0-rc.8 or later, which is the vendor-released patch for this issue; the fix (mime normalization via NormalizeContentType, disposition selection via ContentDisposition, and a sandboxing CSP on attachments) is available in pull request https://github.com/abhinavxd/libredesk/pull/641 and commit https://github.com/abhinavxd/libredesk/commit/ab3a5ca682fcc1caec0950fc607b66caea49bec3, with release notes at https://github.com/abhinavxd/libredesk/releases/tag/v2.9.0-rc.8 and a third-party write-up at https://www.vulncheck.com/advisories/libredesk-before-2.9.0-rc.8-stored-xss-via-svg-upload-content-type-parameter. Because the affected code only trusts the stored content type, patching also requires that pre-existing media rows with non-normalized values be re-evaluated, so operators should purge or re-import legacy SVG uploads after upgrading. Where an immediate upgrade is not possible, the most effective compensating control is to block or filter SVG uploads at the reverse proxy before they reach /api/v1/media (for example rejecting multipart parts whose Content-Type begins with image/svg+xml, including parameterized variants) and to strip any trailing parameters from Content-Type headers on upload; the trade-off is that legitimate non-SVG SVG usage and any clients that rely on unusual MIME parameters will be rejected. A second option is to terminate GET /uploads/* requests through a proxy that forces Content-Disposition: attachment and injects 'Content-Security-Policy: sandbox' on every response, which stops inline rendering at the cost of breaking inline preview of images, video and PDF. Restricting who can reach the uploads endpoint (for example to trusted networks) reduces exposure but does not eliminate the stored payload, since a single upload persists for all later viewers; note that patching to 2.9.0-rc.8 is a release candidate, so validate it in staging before production rollout.
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
The root cause is CWE-79 (Improper Neutralization of Input During Web Page Generation), specifically a MIME/content-type parsing and normalization failure in LibreDesk's media pipeline. Two code paths are involved: the upload/storage layer (internal/media/media.go) and the serving handler (cmd/media.go). On upload, the client-supplied Content-Type was stored essentially verbatim, and only a mime.ParseMediaType call performed late normalization. On retrieval, the vulnerable logic decided between Content-Disposition: inline and Content-Disposition: attachment by comparing media.ContentType to the literal string 'image/svg+xml'. Because the stored value was not normalized before comparison, a value such as 'image/svg+xml; x' (or 'text/plain,image/svg+xml') slipped past the equality test, was classified as a generic image/... prefix, and was therefore served with Content-Disposition: inline and no 'Content-Security-Policy: sandbox' header. SVG is an active, XML-based content type that can embed <script>, so rendering it inline from the application's own origin yields same-origin script execution (a stored XSS against every agent or administrator who opens the /uploads/{uuid} URL). The fix introduces mmodels.NormalizeContentType and mmodels.ContentDisposition helpers: content types are parsed and canonicalized before any decision, unrecognized or unparseable types fall back to application/octet-stream, only a safe allowlist (images other than SVG, video, application/pdf) is ever served inline, and any file served as an attachment receives 'Content-Security-Policy: sandbox'. The accompanying test file enumerates the intended behavior, including that 'image/svg+xml', 'image/svg+xml; x', 'image/x+xml', 'text/plain,image/svg+xml' and 'text/html' all resolve to attachment plus sandbox, while png, mp4 and pdf remain inline unless forced to download. The affected component is the FastGlue/fasthttp-based media service backed by a filesystem or object-store upload provider, and the CPE cpe:2.3:a:abhinavxd:libredesk:*:*:*:*:*:*:*:* covers all LibreDesk releases prior to the 2.9.0-rc.8 fix.
Know when Libredesk 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
Remote upload endpoint (AV:N/AC:L) but needs an agent account (PR:L) and a victim viewing the file (UI:R); stored XSS runs in another user's browser context, giving scope change (S:C) with limited C/I and no availability impact.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
DescriptionCVE.org
LibreDesk before 2.9.0-rc.8 contains a stored cross-site scripting vulnerability that allows authenticated agents to execute script by uploading SVGs with malformed Content-Type parameters. Attackers can upload an SVG typed 'image/svg+xml; x' via /api/v1/media so GET /uploads/{uuid} serves it inline without sandbox, running script in any viewing agent's or administrator's session.
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.
EUVD-2026-102295
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB