Three Livewire admin components in the shopper/framework e-commerce package check the read-only 'view_users' permission instead of the write-gating 'access_setting' permission before allowing state-changing actions, letting any staff account with only a support/viewer role grant itself arbitrary permissions, create a brand-new admin user with a password of its choosing, or delete permission and role records. There is no EPSS score, no CISA KEV listing, and no public exploit or Nuclei template yet, but the bug requires only a low-privilege authenticated session and no user interaction (CVSS 8.8, AV:N/AC:L/PR:L/UI:N), and Shopper's own regression test suite already demonstrates the exploit path working end to end. This is a general e-commerce backend authorization flaw, not an AI/ML-specific vulnerability — shopper/framework does not appear in our tracked AI/ML package catalog, and no AI pipeline, model, or agent component is implicated. Any organization running Shopper (versions >= 2.8.0, < 2.9.2) should upgrade to 2.9.2 immediately and audit which staff accounts hold 'view_users' to check for unauthorized permission grants, new admin users, or deleted roles created since the prior GHSA-f946-9qp6-vgch fix (which this issue slipped through).
What is the risk?
High severity (CVSS 8.8) with a low bar to exploit: any authenticated staff user holding the common, low-privilege 'view_users' permission (support/viewer role) can self-escalate to full admin without any additional access, social engineering, or technical sophistication — the vulnerable page even enumerates the permission IDs needed via visible wire:click handlers. There is no evidence of active exploitation (not in CISA KEV, no EPSS/SSVC data, no public PoC or scanner template), which lowers immediate urgency, but the triviality of exploitation and the fact that Shopper's own tests already confirm the attack path make this a high-priority patch item rather than a theoretical risk. This is a general web application RBAC/authorization defect in an e-commerce admin panel, not an AI/ML-specific threat — it does not touch model inference, training pipelines, agents, or any component in our tracked AI package catalog.
How does the attack unfold?
What systems are affected?
| Package | Ecosystem | Vulnerable Range | Patched |
|---|---|---|---|
| shopper/framework | composer | >= 2.8.0, < 2.9.2 | 2.9.2 |
Do you use shopper/framework? You're affected.
How severe is it?
What is the attack surface?
What should I do?
1 step-
Upgrade shopper/framework to version 2.9.2 or later immediately. As an interim workaround if upgrading is delayed, restrict or revoke the 'view_users' permission from any role that should not have write access to team/permission/role management, and manually audit the
permissions,roles, anduserstables for unexpected admin grants, unrecognized team members, or deleted roles/permissions created since the prior GHSA-f946-9qp6-vgch fix. Review authentication logs for logins by newly created admin accounts. After patching, confirm the two affected regression tests (PermissionsTest.php,CreateTeamMemberTest.php) were updated to assert against 'access_setting' rather than 'view_users' to prevent regression.
How is it classified?
Which compliance frameworks are affected?
Compliance analysis pending. Sign in for full compliance mapping when available.
Frequently Asked Questions
What is CVE-2026-56828?
Three Livewire admin components in the shopper/framework e-commerce package check the read-only 'view_users' permission instead of the write-gating 'access_setting' permission before allowing state-changing actions, letting any staff account with only a support/viewer role grant itself arbitrary permissions, create a brand-new admin user with a password of its choosing, or delete permission and role records. There is no EPSS score, no CISA KEV listing, and no public exploit or Nuclei template yet, but the bug requires only a low-privilege authenticated session and no user interaction (CVSS 8.8, AV:N/AC:L/PR:L/UI:N), and Shopper's own regression test suite already demonstrates the exploit path working end to end. This is a general e-commerce backend authorization flaw, not an AI/ML-specific vulnerability — shopper/framework does not appear in our tracked AI/ML package catalog, and no AI pipeline, model, or agent component is implicated. Any organization running Shopper (versions >= 2.8.0, < 2.9.2) should upgrade to 2.9.2 immediately and audit which staff accounts hold 'view_users' to check for unauthorized permission grants, new admin users, or deleted roles created since the prior GHSA-f946-9qp6-vgch fix (which this issue slipped through).
Is CVE-2026-56828 actively exploited?
No confirmed active exploitation of CVE-2026-56828 has been reported, but organizations should still patch proactively.
How to fix CVE-2026-56828?
Upgrade shopper/framework to version 2.9.2 or later immediately. As an interim workaround if upgrading is delayed, restrict or revoke the 'view_users' permission from any role that should not have write access to team/permission/role management, and manually audit the `permissions`, `roles`, and `users` tables for unexpected admin grants, unrecognized team members, or deleted roles/permissions created since the prior GHSA-f946-9qp6-vgch fix. Review authentication logs for logins by newly created admin accounts. After patching, confirm the two affected regression tests (`PermissionsTest.php`, `CreateTeamMemberTest.php`) were updated to assert against 'access_setting' rather than 'view_users' to prevent regression.
What is the CVSS score for CVE-2026-56828?
CVE-2026-56828 has a CVSS v3.1 base score of 8.8 (HIGH).
What are the technical details?
Original Advisory
## Summary Three Livewire admin components in `shopper/framework` (latest master at commit `fcd0c59`, released as v2.8.0) gate state-mutating actions on the read-only `view_users` permission. This is the same class as the issue Shopper fixed in v2.8.0 / PR #511 / [GHSA-f946-9qp6-vgch](https://github.com/shopperlabs/shopper/security/advisories/GHSA-f946-9qp6-vgch) — the PR moved most write actions from `view_users` to `access_setting`, but three were missed (one of them is a brand-new file added by the security commit itself). A staff user holding only `view_users` + `access_dashboard` (a realistic "support" or "viewer" role per Shopper's own `PermissionsTableSeeder`) can: (1) self-escalate by granting any permission to their own role; (2) create a brand-new admin team member with a chosen password and the `admin` role and then log in as that user; (3) delete arbitrary `permissions` rows (RBAC DoS) or — when `can_be_removed=true` — delete entire roles. CVSS 3.1: `AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H` = 8.8 (High). CWE-285 (Improper Authorization) + CWE-862 (Missing Authorization). ## Vulnerable components (paths relative to repo root) ### 1) `packages/admin/src/Livewire/Components/Settings/Team/Permissions.php` - `togglePermission(int $id)` at line 28 calls `$this->authorize('view_users');` - `removePermission(int $id)` at line 55 calls `$this->authorize('view_users');` The Permissions blade at `packages/admin/resources/views/livewire/components/settings/team/permissions.blade.php` line 34 emits every permission's `id` directly in `wire:click` handlers, so the attacker does not even need to guess IDs — the page itself enumerates them. Net effect: any user who can mount the Permissions component (gated on `view_users`) can grant any permission row to the bound `$role`. Granting `access_setting` to the attacker's own role unlocks every action that PR #511 supposedly hardened with `->authorize('access_setting')`. Granting `delete_customers`, `edit_orders`, `edit_products`, `add_brands`, etc. is direct data-modification escalation. ### 2) `packages/admin/src/Livewire/SlideOvers/CreateTeamMember.php` - `mount()` at line 53 calls `$this->authorize('view_users');` - `store()` at line 122 calls `$this->authorize('view_users');` This file is `new file mode 100755` in commit `fcd0c59` — it was created as part of the security fix and inherited the same misclassified gate. `store()` creates a `User` with `email_verified_at = now()`, the attacker's chosen password, and any selected `role_id`. The `Radio::make('role_id')` options filter only excludes `config('shopper.admin.roles.user')`, so the `admin` role is selectable. Log out, log in as the new account → full admin. ### 3) `packages/admin/src/Livewire/Pages/Settings/Team/RolePermission.php` - `deleteAction` at lines 81-90: only gated by `->visible($this->role->can_be_removed)`, with no `->authorize()` chain. Page-level `mount` (line 52) requires only `view_users`. For any role with `can_be_removed = true`, a `view_users`-only user can call the action and delete the role (cascading the loss of permissions for every assigned user). ## Self-confirmation in the project's own test suite The following tests are green on master @ `fcd0c59` — they ARE the PoC: ``` tests/Admin/Livewire/Components/Settings/Team/PermissionsTest.php line 14-16: `givePermissionTo('view_users')` only line 36-45: "can toggle permission to role" — passes line 74-85: "can remove permission" — passes tests/Admin/Livewire/SlideOvers/CreateTeamMemberTest.php line 16-18: `givePermissionTo('view_users')` only line 29-56: "can create new team member" — passes, asserts the new user `hasRole('manager')` ``` A `view_users`-only Livewire user actor successfully toggles permissions, removes permissions, and creates a new privileged user — verified by Shopper's own regression tests. ## Suggested fix Change `$this->authorize('view_users')` to `$this->authorize('access_setting')` in: - `Permissions::togglePermission` - `Permissions::removePermission` - `Permissions::mount` (defence in depth, matches `Team\Index`) - `CreateTeamMember::mount` - `CreateTeamMember::store` Add `->authorize('access_setting')` to `RolePermission::deleteAction` (matches the pattern already applied to `generatePermissionsAction`, `createPermissionAction`, and `Team\Index::DeleteAction`). Update the two regression tests to use `access_setting` instead of `view_users` so they accurately reflect the privilege boundary. ## Resources - Prior advisory of the same class: https://github.com/shopperlabs/shopper/security/advisories/GHSA-f946-9qp6-vgch - Fix commit that introduced these residual gaps: https://github.com/shopperlabs/shopper/commit/fcd0c5920588702df5b874f432b1042abd77a50b - CWE-285 Improper Authorization - CWE-862 Missing Authorization ### Credits Reported by Vishal Shukla(@shukla304) using sechub.dev AI Agent ### Support If this disclosure was useful and if users would like to support continued open-source security research and responsible-disclosure work, they can sponsor at https://github.com/sponsors/therawdev — Shoppers thanks those who keeping open source safe.
Exploitation Scenario
An attacker who has obtained (or been legitimately granted, e.g. as a support agent) a low-privilege Shopper admin account with only 'view_users' and 'access_dashboard' permissions loads the Permissions Livewire component, which lists every permission ID directly in the page's wire:click handlers. The attacker clicks to grant their own role the 'access_setting' permission (unlocking every action nominally protected by the prior security fix), or alternatively opens the CreateTeamMember slide-over — also gated only on 'view_users' — to create a brand-new user with a self-chosen password and the 'admin' role. Logging out and back in as this new account, or simply operating under the newly escalated role, gives the attacker full administrative control over the e-commerce backend, including the ability to delete permissions or roles as a denial-of-service against the RBAC system.
Weaknesses (CWE)
CWE-285 — Improper Authorization: The product does not perform or incorrectly performs an authorization check when an actor attempts to access a resource or perform an action.
- [Architecture and Design] Divide the product into anonymous, normal, privileged, and administrative areas. Reduce the attack surface by carefully mapping roles with data and functionality. Use role-based access control (RBAC) to enforce the roles at the appropriate boundaries. Note that this approach may not protect against horizontal authorization, i.e., it will not protect a user from attacking others with the same role.
- [Architecture and Design] Ensure that you perform access control checks related to your business logic. These checks may be different than the access control checks that you apply to more generic resources such as files, connections, processes, memory, and database records. For example, a database may restrict access for medical records to a specific database user, but each record might only be intended to be accessible to the patient and the patient's doctor.
Source: MITRE CWE corpus.
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H References
Timeline
Related Vulnerabilities
CVE-2026-21858 10.0 n8n: Input Validation flaw enables exploitation
Same attack type: Auth Bypass GHSA-vvpj-8cmc-gx39 10.0 picklescan: security flaw enables exploitation
Same attack type: Auth Bypass CVE-2025-2828 10.0 LangChain RequestsToolkit: SSRF exposes cloud metadata
Same attack type: Auth Bypass CVE-2025-53767 10.0 Azure OpenAI: SSRF EoP, no auth required (CVSS 10)
Same attack type: Auth Bypass CVE-2026-26030 10.0 semantic-kernel: Code Injection enables RCE
Same attack type: Auth Bypass