Skip to main content

Shopper EUVDEUVD-2026-114512

| CVE-2026-62991 MEDIUM
Authorization Bypass Through User-Controlled Key (CWE-639)
2026-10-30 GitHub_M
6.5
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-privilege read_customers staff
  2. Exploit
    Request /cpanel/customers/{id}/show
  3. Execution
    Substitute admin/staff user ID bypassing customers scope
  4. Impact
    Disclose staff profile and enumerate accounts via 200/403/404

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Object-level authorization, IDOR prevention
Exploitation Conditions

Requires an authenticated admin-panel session holding both access_dashboard and read_customers; no view_users permission is needed, which is precisely the boundary being bypassed. No special product configuration is required - the flaw is present in Show.php's default code path because mount() calls findOrFail($user) without the customers() role scope that the listing page applies. Exploitation is limited by the need for valid low-privileged staff credentials (PR:L, so not remotely unauthenticated) and is confined to deployments of Shopper < 2.10.1 that have staff/customer accounts in the same user table. The destructive extension via anonymizeAction() is further gated: it additionally requires the attacker's role to hold delete_customers.

Impact

Signals point to a real but moderate, insider-driven risk rather than an internet-wide emergency. The CVSS 3.1 vector (AV:N/AC:L/PR:L/UI:N/C:H/I:N/A:N, 6.5) shows the flaw is network-reachable and trivial to trigger (just change a numeric ID in the URL) but requires an authenticated admin-panel session holding access_dashboard and read_customers - so the threat model is a low-privileged staff member or a compromised staff account, not an anonymous remote attacker. The vuln.today Decision label is this_month (not act_now/emergency), consistent with a privilege-requiring authorization bug. No EPSS score and no CISA KEV entry are present in the input, so there is no evidence of mass or active exploitation; the exploitation signal that does exist is a detailed step-by-step reproduction PoC embedded in the GHSA advisory (login, blocked /cpanel/setting/team, then successful /cpanel/customers/1/show against the admin). The one divergence worth verifying: NVD rates confidentiality C:H, but the exposed asset is per-record account profile data (name, email, addresses) retrievable one ID at a time with enumeration - closer to C:L in my independent read - so the 6.5 figure likely slightly overstates the single-request confidentiality loss while the enumeration and the conditional destructive anonymize path (needs delete_customers) justify treating it as a genuine authorization-boundary break. Net: prioritize for the next patch cycle, especially where multiple distinct staff roles exist, but it is not a drop-everything remote-unauth issue.

Exploit ScenarioDerived

A staff user provisioned with only access_dashboard and read_customers (and correctly denied the /cpanel/setting/team interface because they lack view_users) logs into the admin panel and simply changes the {user} ID in /cpanel/customers/{user}/show to 1, retrieving the administrator's profile (e.g. admin@admin.com) and then enumerating every account by observing differing 200/403/404 responses. A full reproduction PoC exists in the GHSA advisory, though it is a manual walkthrough rather than a packaged standalone exploit. If that same role also holds delete_customers, the attacker can invoke anonymizeAction() against the loaded non-customer account for destructive follow-up.

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 – Oct 30, 2026

Shopper versions prior to 2.10.1 expose administrator and staff profile records to low-privileged admin-panel users through an insecure direct object reference in the customer detail route /cpanel/customers/{user}/show. Any account holding access_dashboard and read_customers can substitute an arbitrary user ID and receive profile data for accounts that the separate team-management interface protects behind the stronger view_users permission; differing 200/403/404 responses also permit user-ID enumeration, and if the same role holds delete_customers the anonymizeAction() may operate on the unrestricted loaded user model. Exploitation requires a valid authenticated staff session (PR:L) and same-table staff/customer accounts, and the vendor advisory ships a step-by-step proof-of-concept reproduction; the trigger is an ordinary authenticated request with a modified URL path segment rather than any special product configuration.

RemediationAI

Upgrade to Shopper 2.10.1, which applies the missing customers() scope to the detail query and adds a regression test covering staff-account access (see the advisory at https://github.com/shopperlabs/shopper/security/advisories/GHSA-w7mm-g5pr-gpff and release https://github.com/shopperlabs/shopper/releases/tag/v2.10.1). If upgrading immediately is not possible, backport the one-line change from https://github.com/shopperlabs/shopper/pull/594 so that Show::mount() chains ->customers() before findOrFail($user); this is low-risk because it only narrows the query to the role the listing already enforces, though it will cause non-customer IDs to return not-found instead of data. As a compensating control, audit roles holding read_customers and remove the permission from staff who do not need the customer area - the trade-off is that those users lose all customer detail access, and this does not remediate the destructive anonymizeAction() path, which additionally requires delete_customers; removing that permission from non-administrative roles eliminates the destructive follow-up but also disables legitimate customer anonymization for those staff.

Affected VersionsENISA

Shopper < 2.10.1

Affected Packages

euvd shopper fix: 2.10.1

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-based headless e-commerce admin panel that uses Livewire components and the Spatie permission package for role-based access control. The affected code is packages/admin/src/Livewire/Pages/Customers/Show.php, whose mount(int $user) method calls $this->authorize('read_customers') and then performs $userModel::query()->with(['addresses','orders'])->findOrFail($user) - a lookup keyed entirely by the attacker-controllable {user} route segment. The customer listing in Customers/Index.php correctly constrains results with ->scopes('customers'), and the customers scope filters on the configured customer role via whereHas('roles', ...), but that scope was never applied on the detail page. The staff/team management page (Settings/Team/Index.php) enforces view_users, confirming the intended authorization boundary that the detail route silently bypasses. This is CWE-639 (authorization bypass through a user-controlled key): the missing role constraint, not a memory-safety or injection defect, is the root cause. The upstream fix in PR 594 adds ->customers() to the detail query and introduces a regression test asserting that a staff account accessed through the customer route throws ModelNotFoundException; anonymizeAction() inherits the same unrestricted model, which is why the advisory recommends explicit customer-role verification before destructive actions.

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 6.5 MEDIUM
AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
vuln.today AI 4.3 MEDIUM

Authenticated staff (PR:L) exploit over the network (AV:N) via a trivial ID change (AC:L, no UI); discloses partial per-record profile data so C:L, with no base-case integrity or availability impact.

3.1 AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:N/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
None
Scope
Unchanged
Confidentiality
High
Integrity
None
Availability
None

Lifecycle Timeline

1
Patch available
Oct 30, 2026 - 23:03 EUVD

DescriptionCVE.org

Shopper is a Headless e-commerce Admin Panel. Prior to 2.10.1, the customer detail route /cpanel/customers/{user}/show in packages/admin/src/Livewire/Pages/Customers/Show.php checks read_customers but looks up an arbitrary user ID without applying the customers role scope used by the listing. Authenticated staff holding access_dashboard and read_customers can change the user ID to retrieve administrator or staff profiles despite lacking view_users, which protects the separate team-management interface. The flaw exposes account profile data and permits user-ID enumeration through differing success, denial, and not-found responses. If the same role also holds delete_customers, anonymizeAction() operates on the unrestricted loaded user model and can enable destructive follow-up against non-customer accounts. This issue is fixed in version 2.10.1.

Threat Intelligence Overview

EPSS Score
0.2%
Top 85% exploitable
Prevalence
Low
niche open-source Laravel e-commerce admin package, limited enterprise footprint
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 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· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact· derived
Medium

Priority Score

32
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +32
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

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