CVE-2026-56828: 
PHP vulnerability analysis and mitigation

Overview

CVE-2026-56828 is a privilege escalation vulnerability in the shopper/framework Laravel e-commerce package caused by improper authorization checks in three Livewire admin components. State-mutating actions in these components are incorrectly gated on the read-only view_users permission instead of the write-level access_setting permission, allowing low-privilege staff to escalate their own privileges, create rogue admin accounts, or destroy RBAC controls. The vulnerability affects shopper/framework versions >= 2.8.0 and < 2.9.2, with version 2.9.2 being the patched release. It was first published on June 22, 2026, and added to the GitHub Advisory Database on September 11, 2026. The CVSS v3.1 base score is 8.8 (High) (GitHub Advisory, Shopper Advisory).

Technical details

The root cause is classified as CWE-285 (Improper Authorization) and CWE-862 (Missing Authorization). Three specific Livewire components incorrectly call $this->authorize('view_users') — a read-only permission — on state-mutating actions that should require access_setting: (1) Permissions::togglePermission and Permissions::removePermission in packages/admin/src/Livewire/Components/Settings/Team/Permissions.php; (2) CreateTeamMember::mount and CreateTeamMember::store in packages/admin/src/Livewire/SlideOvers/CreateTeamMember.php (notably, this file was itself introduced by the prior security fix commit fcd0c59); and (3) RolePermission::deleteAction in packages/admin/src/Livewire/Pages/Settings/Team/RolePermission.php, which has no authorize() call at all on the delete action. The Permissions blade template also enumerates all permission IDs directly in wire:click handlers, eliminating any need for ID guessing. Exploitation requires only a valid staff session with view_users + access_dashboard permissions — a configuration explicitly seeded by Shopper's own PermissionsTableSeeder for "support" or "viewer" roles (GitHub Advisory, Shopper Advisory).

Impact

A successful exploit grants an attacker full control over the Shopper admin panel. Specifically, a low-privilege staff user can self-escalate by granting any permission (including access_setting, delete_customers, edit_orders, edit_products) to their own role, create a new admin-role user with a chosen password and immediately log in as that user, or delete arbitrary permission rows and entire roles (when can_be_removed=true), causing an RBAC denial-of-service that strips permissions from all affected users. The combined confidentiality, integrity, and availability impact is rated High across all three dimensions, as attackers can access sensitive store data, modify orders and products, and disable access controls for legitimate administrators (GitHub Advisory).

Exploitability

No public proof-of-concept exploit code has been released, and there is no evidence of in-the-wild exploitation at this time (Feedly). However, the vulnerability is effectively self-documented by Shopper's own regression test suite: the tests PermissionsTest.php and CreateTeamMemberTest.php pass with only view_users permission, confirming the flaw and serving as a functional PoC blueprint. The attack requires only low privileges (a valid staff account) and no user interaction, making it straightforward to exploit once an attacker has any staff-level access. The CVE is not currently listed in the CISA Known Exploited Vulnerabilities (KEV) catalog, and no EPSS score is publicly available at this time (Shopper Advisory).

Exploitation steps

  1. Obtain a low-privilege staff account: Acquire or compromise a Shopper admin panel account holding only view_users + access_dashboard permissions (e.g., a "support" or "viewer" role as seeded by PermissionsTableSeeder).
  2. Navigate to the Permissions component: Log in to the Shopper admin panel and navigate to the Team Settings → Permissions page (/shopper/settings/team/permissions). The Livewire component mounts successfully because it only checks view_users.
  3. Enumerate permission IDs: Inspect the rendered HTML of the Permissions blade — all permission IDs are exposed directly in wire:click handlers (e.g., wire:click="togglePermission(5)"), requiring no guessing.
  4. Self-escalate via togglePermission: Trigger the togglePermission Livewire action with the ID of the access_setting permission to grant it to your own role. This unlocks all actions previously hardened by PR #511.
  5. Create a rogue admin account (alternative path): Navigate to the Create Team Member slide-over and invoke CreateTeamMember::store with a chosen email, password, and role_id set to the admin role. The new user is created with email_verified_at = now() and is immediately usable.
  6. Log in as the new admin: Log out and authenticate as the newly created admin account to gain full administrative access to the Shopper panel, including order management, customer data, and product catalog.
  7. RBAC DoS (optional): Invoke RolePermission::deleteAction on any role with can_be_removed=true to delete the role and cascade permission loss to all assigned users, disrupting legitimate administrator access (GitHub Advisory, Shopper Advisory).

Indicators of compromise

  • Logs: Application logs showing Livewire requests to togglePermission, removePermission, or store actions from accounts holding only view_users permission; audit logs recording permission grants or role assignments made by non-admin staff accounts.
  • Database: Unexpected entries in the model_has_permissions or model_has_roles tables associating low-privilege users with elevated permissions (e.g., access_setting, delete_customers); newly created admin-role users with email_verified_at timestamps that do not correspond to a legitimate registration flow.
  • Network: HTTP POST requests to Livewire endpoints (e.g., /livewire/message/...) containing togglePermission, removePermission, or store method calls originating from staff-level authenticated sessions.
  • Application Behavior: Unexpected disappearance of roles or permissions from the RBAC system; new admin accounts appearing in the team member list without a corresponding invitation or registration event (GitHub Advisory).

Mitigation and workarounds

Upgrade shopper/framework to version 2.9.2 or later, which corrects the authorization checks in all three affected Livewire components (GitHub Advisory, Shopper Advisory). If immediate upgrade is not possible, manually patch the three affected files by replacing $this->authorize('view_users') with $this->authorize('access_setting') in Permissions::togglePermission, Permissions::removePermission, Permissions::mount, CreateTeamMember::mount, and CreateTeamMember::store, and add ->authorize('access_setting') to RolePermission::deleteAction. As an operational control, audit all existing staff roles to ensure that view_users is not combined with access_dashboard for accounts that should not have write capabilities, and review logs for any unauthorized permission or role changes.

Community reactions

The vulnerability was reported by Vishal Shukla (@shukla304) using the sechub.dev AI Agent and disclosed responsibly to the Shopper maintainers, who published the advisory on June 22, 2026. The advisory notes that this is a recurrence of the same vulnerability class addressed in the prior advisory GHSA-f946-9qp6-vgch (fixed in v2.8.0), highlighting that the security fix itself introduced one of the three vulnerable components. No significant broader media coverage or notable public researcher commentary beyond the advisory has been identified (GitHub Advisory).

Additional resources


Source: This report was generated using AI

Related PHP vulnerabilities:

CVE ID

Severity

Score

Technologies

Component name

CISA KEV exploit

Has fix

Published date

CVE-2026-56828HIGH8.8
  • PHP logoPHP
  • shopper/framework
NoYesOct 28, 2026
CVE-2026-116675HIGH8.5
  • JavaScript logoJavaScript
  • tinymce/tinymce
NoYesOct 27, 2026
GHSA-5vrj-hxr4-wvrxLOWN/A
  • PHP logoPHP
  • laravel-chronicle/core
NoYesOct 28, 2026
GHSA-qr36-39c2-hp84MEDIUMN/A
  • PHP logoPHP
  • neto737/bitgosdk-php
NoYesOct 28, 2026
GHSA-87gw-9fr8-4p45MEDIUMN/A
  • PHP logoPHP
  • neto737/bitgosdk-php
NoYesOct 28, 2026

Free Vulnerability Assessment

Benchmark your Cloud Security Posture

Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.

Request assessment

Additional Wiz resources

Get a personalized demo

Ready to see Wiz in action?

"Best User Experience I have ever seen, provides full visibility to cloud workloads."
David EstlickCISO
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
Adam FletcherChief Security Officer
"We know that if Wiz identifies something as critical, it actually is."
Greg PoniatowskiHead of Threat and Vulnerability Management