Skip to main content

Shopper Admin Panel CVE-2026-62990

| EUVDEUVD-2026-114511 HIGH
Cross-site Scripting (XSS) (CWE-79)
2026-10-30 GitHub_M
8.7
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

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

  1. Access
    Authenticate as low-privileged content staff
  2. Delivery
    Upload HTML/SVG script payload to product files
  3. Exploit
    Administrator opens inline same-origin file
  4. Execution
    Stored script runs in admin session
  5. Impact
    Create 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.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.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 – 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

Shopper 3.0.0-beta.1, < 3.0.0-beta.3
Shopper 2.0.0, < 2.10.1

Affected Packages

euvd shopper fix: 2.10.1, 3.0.0-beta.3

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

Vendor (GitHub_M) PRIMARY 8.7 HIGH
AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:N
vuln.today AI 8.7 HIGH

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.

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

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
Required
Scope
Changed
Confidentiality
High
Integrity
High
Availability
None

Lifecycle Timeline

2
Patch available
Oct 30, 2026 - 23:03 EUVD
CVE Published
Oct 30, 2026 - 21:05 cve.org
HIGH 8.7

DescriptionCVE.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

Why It Matters

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.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.2%
Top 84% exploitable
Prevalence
Low
niche open-source Laravel headless e-commerce admin panel, limited production footprint
Social Media
2
Sightings
Data Quality
3 sources
Confidence: Low

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 HIGH
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.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· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact
High

Priority Score

44
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +44
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.

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