Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate as low-privileged content staff
-
DeliveryUpload HTML/SVG script payload to product files
-
ExploitAdministrator opens inline same-origin file
-
ExecutionStored script runs in admin session
-
ImpactCreate persistent attacker-controlled administrator 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 | Requires an authenticated back-office staff account with a content-upload permission - in 2.x specifically edit_products or add_brands - and, critically, an administrator must subsequently open the uploaded HTML or SVG file, since direct account creation by the low-privileged uploader is blocked by the access_setting check. The enabling conditions are specific: packages/admin/config/media.php allows image/svg+xml across every media collection (so Filament's image/* wildcard does not block SVG), the product files collection in Files.php has no MIME restriction and accepts text/html, and media is served inline from the public disk at /storage/ with the file's own Content-Type and no Content-Disposition:attachment and no Content-Security-Policy. Limiting factors that reduce realistic risk: two distinct actors are needed (a malicious/compromised content editor plus an admin who opens the file), the staff account must already be authenticated, and the escalation depends on CreateTeamMember::store() trusting a client-supplied role_id. 3.x prereleases already exclude SVG but still allow executable product files until 3.0.0-beta.3. |
| Impact | This is a cross-privilege stored XSS (CWE-79) chained to privilege escalation (CWE-269) in the Shopper admin panel. The CVSS 3.1 vector (AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:N, 8.7) correctly shows the main brakes on real-world risk: exploitation is NOT remote-unauthenticated - it requires an already-authenticated low-privileged staff account with a content-upload permission (PR:L), AND a separate administrator must subsequently open the malicious file (UI:R). The scope change (S:C) and C:H/I:H reflect the genuine payoff: the script runs in the admin's session and mints a standalone administrator account. No EPSS score is provided in the input, and the CVE is NOT listed in CISA KEV, so there is no signal of active or widespread exploitation; the vuln.today decision label is 'this_week' (not act_now/emergency), consistent with a serious but non-emergency insider/escalation issue. A detailed proof-of-concept is published in the vendor GHSA advisory and was verified end-to-end by the reporter (Testbench harness plus a headless Chromium browser), so working exploit logic is public even though active exploitation is not confirmed. Net: a real priority for any deployment that delegates content-editing to semi-trusted staff (it turns a content-editor into a persistent admin), but it is gated behind authentication and required admin interaction rather than a drive-by remote bug - treat as high-value insider/escalation risk, not an internet-facing worm. |
| Exploit ScenarioDerived | A low-privileged staff member holding edit_products (or add_brands) uploads a .html or .svg file containing <script> through the normal product Files form; because media is served inline from the same-origin public disk at /storage/ with its own Content-Type and no Content-Disposition:attachment or CSP, the payload executes when an administrator later opens the file, running in the admin's session to drive CreateTeamMember and create a new attacker-controlled administrator account. A detailed proof-of-concept, verified end-to-end by the reporter (project Testbench harness and a headless Chromium browser confirming same-origin script execution and CSRF-token read), is published in the vendor's GHSA advisory. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 30, 2026
Stored cross-site scripting in the Shopper headless e-commerce admin panel (2.0.0 up to but not including 2.10.1, plus 3.0.0-beta.1 and beta.2) lets authenticated back-office staff who hold only a content-upload permission such as edit_products or add_brands plant HTML or SVG media that executes in an administrator's session when that administrator opens the file. Because the media is served inline from the same origin at /storage/ with no Content-Disposition or Content-Security-Policy, and because the CreateTeamMember store() flow trusts a client-supplied role_id, the injected script can mint a persistent attacker-controlled administrator account with access to customer data, orders, settings and user/role management. Exploitation requires two parties (a content editor who can upload plus an administrator who opens the file), since direct account creation by the low-privileged uploader is blocked by the access_setting check; the flaw is fixed in 2.10.1 and 3.0.0-beta.3, and the upstream GHSA advisory documents a proof-of-concept chain, but no CISA KEV listing appears in the provided data.
RemediationAI
Vendor-released patch: upgrade to 2.10.1 on the 2.x line or 3.0.0-beta.3 on the prerelease line; the fixes remove image/svg+xml from accepts_mime_types, add an accepts_file_types allowlist (PDF, ZIP, RAR, 7z, Office documents, plain text, CSV) enforced through acceptedFileTypes() in Files.php and acceptsMimeTypes in the Product model, and cover the change with media-collection MIME tests. If upgrading is not possible this week, the vendor states any one of the following breaks the chain and all are recommended: restrict SVG and add an explicit allowlist to the product files upload via server-side configuration or a custom media path validation; serve the public/media disk from a separate cookieless origin and/or add Content-Disposition: attachment plus X-Content-Type-Options: nosniff to media responses, accepting that inline previews and thumbnails will no longer render in the browser; add a Content-Security-Policy such as default-src 'self' without unsafe-inline for scripts to the admin panel, accepting that inline panel assets may need adjustment; and harden CreateTeamMember::store() to validate role_id against an allowlist of assignable roles, ideally with step-up re-authentication before granting administrator. Additionally, review which staff accounts hold edit_products or add_brands, and audit existing administrators for unexpected accounts that would persist after a malicious upload is deleted.
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
Shopper is a Laravel/PHP headless commerce back office built on Filament and Spatie Media Library. Three composable weaknesses create the chain: packages/admin/config/media.php allowlists image/svg+xml for every media collection, so Filament's image/* wildcard validation on brand, product, category and collection thumbnails does not block SVG; the product files collection in packages/admin/src/Livewire/Components/Products/Form/Files.php declares neither ->image() nor ->acceptedFileTypes(), so no MIME rule is applied and text/html is accepted; and the media disk is the same-origin public disk served at /storage/ with the file's own Content-Type, no Content-Disposition: attachment and no Content-Security-Policy anywhere in the admin panel, so inline script executes. That is CWE-79 (stored XSS), which the advisory chains to CWE-269: packages/admin/src/Livewire/SlideOvers/CreateTeamMember.php authorizes only access_setting and then assigns Role::findById((int) $data['role_id']) without restricting role_id to non-privileged roles, so script running as an administrator can request the administrator role for a new account. The CVSS:3.1 vector AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:N reflects the low-privileged authenticated uploader, the required administrator interaction, and the scope change from the staff context into full administrative control; the script context itself is described in the advisory as readable CSRF token plus the page-supplied signed Livewire snapshot.
Know when Shopper 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
AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:N
Authenticated content-upload role (PR:L) plus an admin opening the file (UI:R); stored script crosses into the admin authority (S:C) giving C:H/I:H, with no availability impact.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
Shopper is a Headless e-commerce Admin Panel. In versions from 2.0.0 prior to 2.10.1 and in the 3.0.0 prereleases beta.1 and beta.2, authenticated back-office staff with a content-upload permission can store executable media on the administrator's own origin. In the 2.x implementation, relevant upload permissions include edit_products or add_brands, and packages/admin/config/media.php allows image/svg+xml in every media collection, including image fields whose image/* validation also accepts SVG. The product files collection in packages/admin/src/Livewire/Components/Products/Form/Files.php has no MIME restriction and accepts text/html as well. Media is served inline from the public disk under /storage/ with its own content type, without Content-Disposition: attachment or a Content-Security-Policy. When an administrator opens an uploaded HTML or SVG file, stored script executes in that administrator's session. In 2.x, the script can invoke packages/admin/src/Livewire/SlideOvers/CreateTeamMember.php, whose store() checks access_setting held by the viewing administrator but trusts client-supplied role_id, to create a new attacker-controlled administrator with a chosen password. This account persists after the uploaded file is deleted and gives access to customer data, orders, settings, and user/role management; the same script can exfiltrate data or grant permissions to the attacker's account. Direct account creation by the low-privileged uploader is blocked, so exploitation requires the administrator to open the file. The 3.x prerelease line already excludes SVG but still allows executable product files. This issue is fixed in versions 2.10.1 and 3.0.0-beta.3.
Technical POC Analysis
CWE-79 (stored cross-site scripting), with CWE-269 (improper privilege management) as the second, chained weakness.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
A stored cross-site scripting (XSS) vulnerability in Shopper's headless e-commerce admin panel (versions before 2.10.1 and 3.0.0-beta.3) enables low-privileged content editors to inject malicious code that, when opened by an administrator, can create persistent admin accounts. This puts customer data, orders, settings, and user management at risk of unauthorized access and control. Leadership should prioritize remediation because a compromised admin account could lead to data breaches, operational disruption, and reputational damage.
Apply vendor patch.
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.
Privilege escalation in Shopper headless e-commerce admin panel prior to version 2.8.0 allows any low-privilege authenti
Privilege escalation in Shopper 2.0.0 through 2.5.x allows an authenticated admin-panel user who holds only the access_d
Authorization bypass in Shopperlabs Shopper headless e-commerce admin panel prior to 2.8.0 allows authenticated low-priv
Permanent deletion of product variants in Shopper's admin panel is possible for any authenticated staff member who holds
Privilege escalation in shopperlabs/shopper prior to 2.8.0 allows any authenticated admin panel user - regardless of ass
Missing authorization enforcement in the Shopper headless e-commerce admin panel (all versions prior to 2.8.0) allows an
Shopper versions prior to 2.10.1 expose administrator and staff profile records to low-privileged admin-panel users thro
Discount over-redemption via race condition in Shopper (shopperlabs/shopper prior to v2.8.0) allows concurrent unauthent
EUVD-2026-114511
NVD
CVE.org
EPSS
GitHub
Exploit-DB