Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate as low-privileged CRM user
-
DeliveryUpload SVG payload with non-SVG filename
-
ExploitBypass filename-based SVG sanitizer
-
ExecutionFile stored and served as SVG
-
ImpactVictim views content, script executes in browser
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 account with access to the TinyMCE media-upload feature of Krayin laravel-crm (versions up to and including 2.2.5), plus a second user who subsequently views the uploaded content for the stored payload to fire. The specific trigger is uploading an SVG file under a non-SVG filename (e.g., payload.png): the stored extension is derived from file content and served as SVG, while the name-based sanitizer check is skipped. A related nested-configuration-field upload path also stored files without SVG sanitization. Limiting factors: low-privilege authentication is needed (PR:L), passive victim interaction is required (UI:P), and impact is confined to script execution in the victim's browser context rather than server compromise. |
| Impact | This is a genuine but low-priority stored XSS. The CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:L/VA:N, score 5.1 Medium) tells a consistent, self-limiting story: network-reachable but requiring low-privilege authentication (PR:L) to upload content and passive victim interaction (UI:P) to trigger, with only limited integrity impact and no direct confidentiality or availability impact per the vendor scoring. The source-code evidence clarifies the real bug - the TinyMCE media-upload SVG sanitizer was bypassed when an SVG was uploaded under a non-SVG filename, so the stored payload is served as an executable SVG. No EPSS score, no CISA KEV listing, and no formal POC flag are present in the input, so there is no signal of active exploitation or automated weaponization. A third-party technical advisory (carlosalbertotuma/advisory-03) documents the technique, which raises the practical ease of reproduction, but this is a write-up rather than a confirmed exploit-code artifact. Note one discrepancy for defenders: the vendor sets VC:N (no confidentiality impact), yet stored XSS in an authenticated CRM can realistically read session/DOM data of a viewing user - I would rate confidentiality at low rather than none. Overall this is a real defect worth patching but not an emergency: authentication plus victim interaction gate it, and the affected product has a small footprint. |
| Exploit ScenarioDerived | A low-privileged authenticated CRM user uploads a malicious SVG through the TinyMCE media uploader, naming it with a benign extension like payload.png so the filename-based SVG check is skipped; the file is stored and later served as an SVG. When another user (e.g., an agent or administrator) views the content, the embedded script executes in their browser session. A public third-party advisory describes the SVG-filename bypass technique, though no formal exploit-code POC is flagged in the input. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 25, 2026
Stored cross-site scripting in Krayin laravel-crm (versions up to and including 2.2.5) lets an authenticated user with access to the TinyMCE media-upload feature bypass the SVG sanitizer by uploading an SVG file under a non-SVG filename such as payload.png; the stored extension is derived from the file's content, so the file is retained and served as SVG while the name-based sanitizer check is skipped. The injected script then executes in the browser of any user who later views the uploaded asset, within the application's origin. Authentication with low privileges (PR:L) and passive victim interaction (UI:P) are required, impact is confined to the victim's browser context rather than server compromise, and no public exploit code was identified at time of analysis. This is a genuine but low-priority stored XSS - a related nested-configuration-field upload path stores files without SVG sanitization as well.
RemediationAI
Upgrade to Krayin laravel-crm 2.2.6, the vendor-released fix, which contains commit 734aa10ae6c2ffa4c96c8869a89aa66940e4d345 and pull request 2639 and is published at https://github.com/krayin/laravel-crm/releases/tag/v2.2.6; consult the vendor repository at https://github.com/krayin/laravel-crm/ and the researcher advisory at https://github.com/carlosalbertotuma/advisory/blob/main/advisory-03-stored-xss-tinymce-media-upload.md for details. Where an immediate upgrade is not possible, the most direct compensating control is to disable SVG uploads entirely at the web-server or reverse-proxy layer by rejecting requests or responses carrying image/svg+xml (for example via nginx location rules or an upload validation hook), accepting the trade-off that legitimate SVG assets can no longer be used; additionally restrict the TinyMCE media-upload feature to trusted roles, since exploitation requires an authenticated account, and serve user-supplied uploads from a separate origin or with Content-Disposition: attachment plus a restrictive Content-Security-Policy to blunt script execution if a malicious SVG is already stored. Because the payload is persistent, mitigation must also include identifying and deleting previously uploaded SVG content masquerading under image extensions, which may require inspecting stored file types rather than filenames.
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 vulnerability is CWE-79 (Improper Neutralization of Input During Web Page Generation - cross-site scripting), specifically the persistent/stored variant. Krayin laravel-crm is a PHP/Laravel-based open-source CRM whose rich-text and media handling is built on TinyMCE; uploaded media passes through Sanitizer.php. The root cause is an inconsistency between two validation layers: the sanitizer decided whether an upload needed SVG treatment based on the client-supplied filename extension, while the storage layer independently derived the stored extension from sniffing the file's own content. An attacker therefore uploads an SVG document (which can carry <script> blocks, event handlers, or external references) named payload.png; the name-based check classifies it as an image and waves it through the sanitizer, yet it is written to disk and later served as image/svg+xml from the application origin. Because SVG is an active content type, the script executes in the victim's browser session context, giving scope change (S:C) with low confidentiality and integrity impact per the assessed vector CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N. The vendor's v2.2.6 changelog confirms the diagnosis, noting that sanitizer detection now also consults the stored path and the markup itself, and that nested configuration fields were likewise storing uploads without SVG sanitization.
Know when Krayin 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:N/VI:L/VA:N/SC:N/SI:N/SA:N
Authenticated upload (PR:L) with a viewing victim (UI:R); stored XSS crosses into the victim's browser context (S:C) causing limited confidentiality and integrity impact, no availability effect.
Primary rating from Vendor (VulDB).
CVSS VectorVendor: VulDB
DescriptionCVE.org
A security flaw has been discovered in Krayin laravel-crm up to 2.2.5. This issue affects some unknown processing of the file Sanitizer.php of the component TinyMCE Media Upload. The manipulation results in cross site scripting. The attack may be performed from remote. Upgrading to version 2.2.6 is capable of addressing this issue. The patch is identified as 734aa10ae6c2ffa4c96c8869a89aa66940e4d345. You should upgrade the affected component.
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.
Administrative account takeover in Krayin CRM (Laravel CRM) 2.2.4 lets unauthenticated remote attackers overwrite the pr
Blind SQL injection in Krayin CRM's leads DataGrid allows any authenticated user with leads access to exfiltrate the ent
Broken object-level authorization in Krayin CRM (Laravel CRM) through version 2.2.3 lets any authenticated user tamper w
Unauthenticated remote users can still reach the installer and admin-config-setup endpoints of Krayin CRM (laravel-crm)
Missing authentication on Krayin CRM's admin mail ingest route lets any remote, unauthenticated attacker POST crafted RF
Improper privilege management in Krayin laravel-crm up to and including 2.2.5 lets an authenticated back-office user who
An insecure direct object reference (IDOR) in Krayin laravel-crm through version 2.2.5 allows any authenticated user to
Improper access control in Krayin Laravel CRM through 2.2.5 allows an authenticated low-privilege admin user to access a
Cross-site scripting in Krayin Laravel CRM through 2.2.5 lets an authenticated user with access to the admin configurati
Stored cross-site scripting (XSS) in Krayin Laravel-CRM up to version 2.2 allows authenticated users with low privileges
Stored cross-site scripting in Krayin CRM (laravel-crm) up to and including version 2.2.5 lets an authenticated administ
Stored client-side template injection in Krayin CRM through 2.2.6 allows an authenticated user with rights to create or
EUVD-2026-87290
NVD
CVE.org
EPSS
Vulnrichment
GitHub
VulDB
Exploit-DB