CVE-2026-56827
Executive Summary
CVE-2026-56827 is an improper authorization vulnerability (CWE-862) in Shopper, a headless e-commerce admin panel, affecting versions prior to 2.9.2. Grouped bulk-action handlers (groupedBulkActions) on several admin Livewire pages — Attribute, Tag, Brand, Category, and Supplier — omit server-side authorization checks, allowing any user holding only a browse permission (e.g., browse_attributes, browse_tags, browse_brands, browse_categories, browse_suppliers) to invoke destructive or state-changing bulk operations. The impact is high integrity and availability loss (CVSS 8.1): a low-privileged staff account can mass-delete attributes/tags and flip visibility state (enabled/disabled) on attributes, brands, categories, and suppliers, disrupting product variants and storefront catalog visibility.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Technical Analysis
The vulnerability is a broken function-level authorization flaw (CWE-862) rooted in how Laravel Livewire bulk actions are handled in Shopper's admin panel. The affected code lives in the following files (per the advisory):
packages/admin/src/Livewire/Pages/Attribute/Browse.phppackages/admin/src/Livewire/Pages/Tag/Index.phppackages/admin/src/Livewire/Pages/Brand/Index.phppackages/admin/src/Livewire/Pages/Category/Index.phppackages/admin/src/Livewire/Pages/Supplier/Index.php
On each of these pages, the groupedBulkActions definition fails to enforce server-side authorization, while the pages themselves require only a corresponding browse permission to load:
browse_attributesbrowse_tagsbrowse_brandsbrowse_categoriesbrowse_suppliers
The consequence is an authorization boundary mismatch: the page gate admits a browse-only user, and the bulk-action handlers perform no additional permission check. Because Livewire renders the page and dispatches the bulk action through a server round-trip, the operation is executed server-side using the authenticated user's session — the missing check, not a client-side control, is the entire defect.
Two operation classes are exposed via groupedBulkActions:
- Destructive mass delete — a browse-only user can invoke
DeleteBulkActionto mass-delete attributes or tags. - Visibility state change — a browse-only user can invoke
BulkAction::make('enabled')orBulkAction::make('disabled')to change the visibility of attributes, brands, categories, or suppliers.
Notably, the advisory states that per-record actions and the comparison pages identified in the advisory are correctly authorized and are not affected. The defect is therefore scoped strictly to the grouped bulk-action surface on the listed index pages, not to Shopper's authorization model as a whole.
The fix in 2.9.2 (claimed via OSV) adds the missing server-side authorization checks to groupedBulkActions on the affected pages. No public PoC or Nuclei template exists at the time of writing.
Exploitation Scenarios
No public PoC is available; the attack chain below is inferred from the vulnerability class (CWE-862) and the NVD description. No function names, parameters, or endpoints are asserted beyond those explicitly present in the description.
1) Reconnaissance / target identification.
An attacker — typically a malicious or compromised low-privilege staff member, or an external actor holding a browse-only account — identifies a Shopper admin panel running a version prior to 2.9.2. For an insider or a staff account obtained via credential compromise, no external recon is required: the attacker simply authenticates and observes which admin pages load. Pages under /admin/Livewire routes for Attributes, Tags, Brands, Categories, and Suppliers load successfully when only browse_* permissions are held, confirming the vulnerable surface.
2) Triggering the flaw class.
The core defect is missing function-level authorization. The attacker navigates to one of the affected Livewire pages (e.g., the Attribute browse page), selects catalog records, and invokes a grouped bulk action. Because groupedBulkActions performs no server-side permission check, the request is not rejected on the basis of the user's browse-only role. This is the authorization bypass: the browse permission is sufficient to reach a capability that should require a higher privilege.
3) Payload / execution method (at the vulnerability-class level). Two outcomes are achievable within the described surface:
- Invoking
DeleteBulkActionagainst selected attributes or tags performs a mass delete server-side. - Invoking
BulkAction::make('enabled')orBulkAction::make('disabled')flips visibility on attributes, brands, categories, or suppliers.
The execution is a standard authenticated server-side action over the Livewire transport; the vulnerability is purely that authorization is not enforced, not that any injection or memory-safety primitive is involved.
4) Post-exploitation impact. Deleting attributes or tags and toggling visibility across attributes, brands, categories, and suppliers can break product variants and substantially disrupt storefront catalog visibility — for example, by hiding whole category branches or making variants unorderable. The attacker does not gain code execution, credential escalation, or data read (Confidentiality impact is None per CVSS), but Integrity and Availability are both rated High.
Impact Assessment
- Confidentiality (C:N): No data disclosure is described; the flaw is an unauthorized write/delete capability.
- Integrity (I:H): Mass deletion of attributes/tags and unauthorized visibility changes corrupt catalog structure and variant integrity.
- Availability (A:H): Hiding categories/brands/suppliers or deleting attributes/tags can render products unorderable and storefront navigation broken.
- Attack Vector (AV:N), Complexity (AC:L), Privileges (PR:L), User Interaction (UI:N): Remotely reachable, low complexity, requiring only a low-privileged staff account, with no victim interaction.
- CVSS 3.1 Score: 8.1 (High).
Business blast radius. Shoppers rely on Shopper as the admin layer over their e-commerce operations. A single browse-only staff account (e.g., a fulfillment or marketing user who legitimately only needs to view catalog data) can now perform catalog-destructive operations. The trust boundary that browse ≠ modify is broken. There is no data-leak risk, but operational disruption — broken variants, hidden catalogs, lost attribute/tag taxonomy — can directly reduce revenue and require manual restoration. Because no public exploit code or KEV listing exists, opportunistic scanning is unlikely; the realistic threat is insider misuse or abuse of compromised low-privilege credentials.
Detection Guidance
Because the vulnerability is an authorization defect rather than a signature-based attack, detection must focus on anomalous bulk-action behavior by low-privileged accounts and on Livewire bulk-action requests. Signatures below are behavioral and are provided as templates to tune to the deployment.
Sigma Rule
title: Shopper Admin - Bulk Action Invoked by Browse-Only User (CVE-2026-56827)
id: 6f1c2a90-3b7e-4d2f-9c11-8a0e5f7b1234
status: experimental
description: Detects Livewire grouped bulk actions (delete/visibility) performed by users lacking modify permissions in Shopper < 2.9.2.
references:
- https://nvd.nist.gov/vuln/detail/CVE-2026-56827
author: valtersit.com
date: 2026-01-01
logsource:
product: shopper
service: admin
detection:
selection_actions:
action|contains:
- 'groupedBulkActions'
- 'DeleteBulkAction'
- 'enabled'
- 'disabled'
selection_pages:
page|contains:
- 'Attribute'
- 'Tag'
- 'Brand'
- 'Category'
- 'Supplier'
condition: selection_actions and selection_pages
falsepositives:
- Legitimate administrators with full catalog permissions
level: high
tags:
- attack.t1565.001
- cve.2026.56827
YARA Rule
rule CVE_2026_56827_Shopper_Missing_Bulk_AuthZ
{
meta:
description = "Detects Shopper admin pages defining groupedBulkActions without a corresponding authorization check, indicative of CVE-2026-56827 (< 2.9.2)"
author = "valtersit.com"
reference = "https://nvd.nist.gov/vuln/detail/CVE-2026-56827"
date = "2026-01-01"
strings:
$a = "groupedBulkActions"
$b = "DeleteBulkAction"
$c = "browse_attributes"
$d = "browse_tags"
$e = "browse_brands"
$f = "browse_categories"
$g = "browse_suppliers"
$h = "Attribute/Browse.php"
$i = "Tag/Index.php"
$j = "Brand/Index.php"
$k = "Category/Index.php"
$l = "Supplier/Index.php"
condition:
$a and ($b or any of ($c,$d,$e,$f,$g)) and any of ($h,$i,$j,$k,$l)
}
Suricata IDS Rule
alert http any any -> any any (msg:"CVE-2026-56827 Shopper Livewire Bulk Action From Browse-Only User"; flow:established,to_server; http.method; content:"POST"; http.header; content:"X-Livewire"; http.request_body; content:"groupedBulkActions"; nocase; http.request_body; content:"DeleteBulkAction"; nocase; reference:cve,2026-56827; classtype:attempted-admin; sid:202656827; rev:1;)
Elastic Detection
sequence by user.name with maxspan=5m
[ authentication where event.action == "user_login" and user.name != null ]
[ network where http.request.method == "POST"
and http.request.body contains "groupedBulkActions"
and (http.request.body contains "DeleteBulkAction"
or http.request.body contains "enabled"
or http.request.body contains "disabled") ]
Splunk SPL Query
index=web OR index=shopper sourcetype=access_combined OR sourcetype=shopper:admin
| search uri_path IN ("*/attribute*", "*/tag*", "*/brand*", "*/category*", "*/supplier*")
| search ("groupedBulkActions" OR "DeleteBulkAction")
| stats count values(uri_path) as paths values(action) as actions by src_ip user
| where count > 5
Wazuh OSSEC Rule
<group name="shopper,cve-2026-56827,">
<rule id="2026568" level="10">
<decoded_as>json</decoded_as>
<field name="http.request.body">groupedBulkActions</field>
<description>CVE-2026-56827: Shopper Livewire grouped bulk action invoked (possible unauthorized bulk delete/visibility change).</description>
<mitre>
<id>T1565.001</id>
</mitre>
</rule>
</group>
Mitigation & Patch Guidance
Patch confidence: 2/4 (CLAIMED — single source claims patch, not independently confirmed). The OSV advisory states the issue is fixed in 2.9.2; this fix has not been independently verified by the report author.
1) Immediate mitigations (if upgrade is delayed):
- Restrict admin access. Limit who can reach the affected admin pages; do not grant browse-only permissions to accounts that are not otherwise trusted, since browse is now effectively a modify-capable permission on the affected pages.
- Least-privilege review. Audit all staff accounts holding
browse_attributes,browse_tags,browse_brands,browse_categories, orbrowse_suppliers, and remove them where not strictly needed. - Defensive authorization. If you maintain a fork, add a server-side authorization check to
groupedBulkActionson the five affected files so that delete/enable/disable actions require modify-level permissions rather than browse. - Monitoring. Alert on bulk-action activity by non-administrative roles (see Detection Guidance).
2) Patch / upgrade steps:
- Upgrade Shopper to 2.9.2 or later.
- After upgrading, verify that
groupedBulkActionson the Attribute, Tag, Brand, Category, and Supplier pages rejects browse-only users. - Keep Laravel Livewire and Shopper dependencies current to ensure the patched bulk-action code path is active.
3) Long-term hardening:
- Enforce server-side authorization on every state-changing Livewire action; treat page-level browse gates as distinct from action-level modify gates.
- Adopt a policy/permission middleware or policy class pattern for bulk actions to prevent silent authorization regressions.
- Apply change-review and automated authorization tests to admin bulk-action handlers.
- Maintain alerting on destructive catalog operations to enable rapid rollback and recovery.
References
- NVD — CVE-2026-56827: https://nvd.nist.gov/vuln/detail/CVE-2026-56827
- Shopper project repository (see
packages/admin/src/Livewire/Pages/...): https://github.com/shopperlabs/shopper - OSV advisory (patch source claiming fix in 2.9.2)
- CWE-862 — Missing Authorization: https://cwe.mitre.org/data/definitions/862.html
Threat actor / exploit status: No public PoC, no Nuclei template, no exploit code observed, and no CISA KEV listing. No known threat actor campaigns are associated with CVE-2026-56827 at the time of writing. The predominant risk is insider misuse of low-privilege browse-only credentials.
What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.