Skip to main content

Krayin CRM CVE-2026-97897

| EUVDEUVD-2026-87290 MEDIUM
Cross-site Scripting (XSS) (CWE-79)
2026-09-25 VulDB
5.1
CVSS 4.0 · Vendor: VulDB
View

Attack ChainAIDerived

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

  1. Access
    Authenticate as low-privileged CRM user
  2. Delivery
    Upload SVG payload with non-SVG filename
  3. Exploit
    Bypass filename-based SVG sanitizer
  4. Execution
    File stored and served as SVG
  5. Impact
    Victim 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.

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 – 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

laravel-crm 2.2.1
laravel-crm 2.2.4
laravel-crm 2.2.2
laravel-crm 2.2.3
laravel-crm 2.2.5
laravel-crm 2.2.0

Affected Packages

euvd laravel_crm no fix

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

Vendor (VulDB) 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 5.4 MEDIUM

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.

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

Primary rating from Vendor (VulDB).

CVSS VectorVendor: VulDB

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

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

EPSS Score
0.2%
Top 87% exploitable
Prevalence
Low
niche open-source Laravel-based CRM, limited enterprise deployment footprint
Data Quality
7 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment CIRCL GitHub VulDB

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
Poc
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

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.

More in Krayin

View all
CVE-2026-41452 CRITICAL POC
9.3 Aug 03

Administrative account takeover in Krayin CRM (Laravel CRM) 2.2.4 lets unauthenticated remote attackers overwrite the pr

CVE-2026-41453 HIGH POC
8.7 Aug 03

Blind SQL injection in Krayin CRM's leads DataGrid allows any authenticated user with leads access to exfiltrate the ent

CVE-2026-61460 HIGH POC
8.7 Jul 10

Broken object-level authorization in Krayin CRM (Laravel CRM) through version 2.2.3 lets any authenticated user tamper w

CVE-2026-100885 MEDIUM POC
5.5 Sep 27

Unauthenticated remote users can still reach the installer and admin-config-setup endpoints of Krayin CRM (laravel-crm)

CVE-2026-90944 HIGH
8.8 Sep 14

Missing authentication on Krayin CRM's admin mail ingest route lets any remote, unauthenticated attacker POST crafted RF

CVE-2026-97895 LOW POC
2.1 Sep 25

Improper privilege management in Krayin laravel-crm up to and including 2.2.5 lets an authenticated back-office user who

CVE-2026-100884 LOW POC
2.1 Sep 27

An insecure direct object reference (IDOR) in Krayin laravel-crm through version 2.2.5 allows any authenticated user to

CVE-2026-100883 LOW POC
2.1 Sep 27

Improper access control in Krayin Laravel CRM through 2.2.5 allows an authenticated low-privilege admin user to access a

CVE-2026-97896 LOW POC
2.0 Sep 25

Cross-site scripting in Krayin Laravel CRM through 2.2.5 lets an authenticated user with access to the admin configurati

CVE-2026-5370 LOW POC
2.0 Apr 02

Stored cross-site scripting (XSS) in Krayin Laravel-CRM up to version 2.2 allows authenticated users with low privileges

CVE-2026-100882 LOW POC
1.9 Sep 27

Stored cross-site scripting in Krayin CRM (laravel-crm) up to and including version 2.2.5 lets an authenticated administ

CVE-2026-48543 MEDIUM
5.1 Sep 24

Stored client-side template injection in Krayin CRM through 2.2.6 allows an authenticated user with rights to create or

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