Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
ReconAuthenticate with Seller-role credentials
-
DeliveryUpload JPEG-magic-prefixed file with .html client extension to product photo endpoint
-
ExploitValidation passes (magic bytes match image, client extension not blocklisted)
-
InstallFile stored as <uuid>.html in public/asset/upload/product/
-
C2Victim authenticated user loads product listing page
-
ExecuteBrowser fetches .html file served as text/html
-
ImpactAttacker JavaScript executes in application origin
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V5 - File Handling File type validation, storage isolation
MITRE ATT&CK
2 techniques across 2 tactics: Command and Control, Persistence The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires an active authenticated session with the 'create product' permission, which the description maps to the routine Seller role - this is not an administrative or elevated privilege, meaning any standard sales user qualifies. The attacker must be able to reach the product photo upload endpoint over the network. A second user (victim) with access to the product listing or detail view must load the page containing the maliciously named file; without victim interaction, no JavaScript executes. The attack is limited to the application's own origin (no cross-origin scope change on the server side). Exploitation is bounded to the Prospero Flow CRM web application context and does not affect the underlying server OS or other services. Non-default conditions are not required beyond holding a Seller account, which is a standard CRM user role. |
| Impact | The CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:L/UI:A) produces a score of 4.8, reflecting medium severity moderated by two significant prerequisites: the attacker must hold an authenticated Seller role (PR:L) and a victim user must actively view the product listing or detail page (UI:A). No EPSS score was provided in the source data and cannot be independently stated. The vulnerability is not listed in CISA KEV, and no public exploit code has been identified at time of analysis. The CVSS 4.0 downstream-system integrity impact (SI:L) appropriately captures that the JavaScript executes in the application origin, enabling session hijacking or data exfiltration from other authenticated users. The supplied CVSS 4.0 vector sets SC:N, which understates the cross-user impact; an argument exists for SC:L/SI:L given that the script executes in arbitrary victims' browser sessions. Overall real-world risk is moderate for multi-tenant CRM deployments where untrusted Seller accounts exist; the authentication barrier makes mass exploitation implausible and targeted insider misuse or compromised Seller credentials the realistic threat path. |
| Exploit ScenarioDerived | An attacker authenticates to the CRM with a legitimate Seller account (or a compromised one), crafts a file that begins with a valid JPEG magic-byte sequence (FF D8 FF) but is named payload.html and contains an HTML body with an embedded script tag. The file passes the server's image/mimes validation because the content check sees image bytes, but the stored filename becomes <uuid>.html and is accessible at a predictable URL under public/asset/upload/product/. When any other authenticated user browses the product listing or detail page that references this photo, the browser fetches the .html file, renders it as a document in the application origin, and executes the attacker's JavaScript - enabling session cookie theft, credential phishing overlays, or account takeover actions on behalf of the victim. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 27, 2026
Stored cross-site scripting in Roskus Prospero Flow CRM before 5.16.0 allows an authenticated Seller-role user to achieve first-party script execution in other users' browser sessions by exploiting an extension-confusion flaw in the product photo upload feature. The application validates file content via magic bytes and rejects known PHP extensions, but then names the stored file using the attacker-supplied client extension - allowing a file prefixed with an image header and carrying an .html extension to pass validation, land in the public web root, and be served as text/html. No public exploit code or CISA KEV listing has been identified; the CVSS 4.0 score of 4.8 reflects the authentication and victim-interaction prerequisites.
RemediationAI
Upgrade Roskus Prospero Flow CRM to version 5.16.0 or later, which incorporates the fix committed at https://github.com/Roskus/prospero-flow-crm/commit/71b20e1a37f4381d1b8b0a6933a942324e1cc19f. The patch makes two coordinated changes: ProductSaveController::save() now calls $photoFile->extension() (Laravel's content-derived value) instead of $photoFile->getClientOriginalExtension() when naming the stored file, and the new ExtensionMatchesContent validation rule is applied to both ProductRequest and ProfileSaveRequest, ensuring the client-supplied extension matches the server-detected extension before the file is accepted. If immediate upgrade is not possible, a compensating control is to restrict the 'create product' permission to fully trusted operator accounts only, reducing the pool of users who can trigger the upload path; note this limits legitimate Seller workflows. Alternatively, configure the web server to strip or override Content-Type for files served from public/asset/upload/product/ so that .html files are served as application/octet-stream or image/jpeg rather than text/html - this prevents browser rendering of the stored payload without requiring a code change, though it is a defense-in-depth measure rather than a root-cause fix.
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 affected codebase is a Laravel/PHP CRM (CPE cpe:2.3:a:roskus:prospero_flow_crm:*:*:*:*:*:*:*:*). The root cause is CWE-434 (Unrestricted Upload of File with Dangerous Type) manifesting as a split-brain validation model: ProductRequest validates the uploaded file by MIME/magic-byte content using Laravel's 'image' and 'mimes' rules, but ProductSaveController::save() names the persisted file with getClientOriginalExtension() - the attacker-controlled value from the multipart filename, not the server-detected extension. Because the web server serves files from public/asset/upload/product/ directly, a file named <uuid>.html is delivered with Content-Type: text/html, causing browsers to parse any embedded JavaScript as live DOM. The fix replaces getClientOriginalExtension() with Laravel's content-derived extension() method and introduces a new ExtensionMatchesContent validation rule that compares the normalized client-supplied extension against the server-guessed extension derived from file content, rejecting any mismatch and logging the anomaly via a new SecurityLogger service.
Know when Prospero Flow Crm 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:A/VC:N/VI:L/VA:N/SC:N/SI:L/SA:N
PR:L reflects required Seller-role authentication; UI:R and S:C capture stored XSS victim-interaction and cross-user session impact; no availability impact.
Primary rating from Vendor (Secur0).
CVSS VectorVendor: Secur0
DescriptionCVE.org
Unrestricted Upload of File with Dangerous Type in the product photo upload in Roskus Prospero Flow CRM before 5.16.0 allows an authenticated user holding the create product permission (routine Seller role) to execute arbitrary JavaScript in the application origin. The photo validation rule classifies the file only by its content (magic bytes) and rejects only a fixed list of PHP extensions, while ProductSaveController::save() names the stored file using the client-supplied extension and copies it into the public web root. A file that begins with an image header and carries an HTML extension passes validation, is stored under public/asset/upload/product/, and is served with a text/html content type, turning the upload into first-party stored script execution.
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
Malicious file upload attacks exploit insufficient validation when web applications accept user-provided files.
More in Prospero Flow Crm
View allCross-tenant authorization bypass (IDOR/BOLA) in Roskus Prospero Flow CRM 4.0.0 through 5.3.1 lets an authenticated user
Broken function-level authorization in Prospero Flow CRM before 5.5.3 lets any authenticated low-privileged user (e.g. t
Cross-tenant transaction data exposure in Roskus Prospero Flow CRM 5.0.0-5.3.5 allows any authenticated user on a shared
Privilege escalation in Roskus Prospero Flow CRM before version 5.2.1 permits any authenticated user - regardless of ass
Cross-tenant IDOR in Roskus Prospero Flow CRM before 5.4.7 allows any authenticated user to read sensitive product recor
Cross-tenant IDOR in Roskus Prospero Flow CRM's ticket management component allows any authenticated user - regardless o
Cross-tenant payroll data exposure in Roskus Prospero Flow CRM before 5.15.10 enables authenticated users holding standa
Cross-tenant IDOR in Prospero Flow CRM before 5.4.8 allows any authenticated user to blindly overwrite contact records b
Cross-tenant record injection in Roskus Prospero Flow CRM before 5.14.0 allows any authenticated user to silently insert
Cross-tenant IDOR in Roskus Prospero Flow CRM before 5.5.3 allows any authenticated user to read, modify, and delete ord
Unauthorized notification deletion in Prospero Flow CRM allows any authenticated user to delete other users' notificatio
Tenant data boundary failure in Roskus Prospero Flow CRM 4.9.1-5.14.0 allows authenticated users holding transaction and
EUVD-2026-67225
GHSA-2g3f-q348-c747
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB