CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-56830

CVE-2026-56830: Broken Function Level Authorization in Shopper Media Component

Amit Schendel
Amit Schendel
Senior Security Researcher

Sep 15, 2026·6 min read·3 visits

Executive Summary (TL;DR)

Missing server-side authorization in Shopper's Livewire Media component allows low-privilege staff to maliciously overwrite product images.

An incomplete security fix in Shopper prior to version 2.9.2 exposes a Broken Function Level Authorization (BFLA) vulnerability in the Media component. Low-privileged administrative users with 'browse_products' permissions can bypass role-based access control policies to execute the 'store' action and modify product media.

Vulnerability Overview

Shopper is a headless e-commerce admin panel built on Laravel. The administrative interface relies heavily on Laravel Livewire to handle dynamic component-state updates via client-side AJAX requests. In versions prior to 2.9.2, Shopper suffers from a Broken Function Level Authorization (BFLA) vulnerability designated as CVE-2026-56830. This flaw allows low-privilege users possessing the browse_products permission to execute restricted write actions.

The attack surface is exposed via the standard Livewire update endpoint located at /livewire/update. Under normal operations, Livewire components serialize and transmit state snapshots to the client, which subsequently returns them when initiating actions. Due to a missing authorization check in the Media sub-form component, an authenticated low-privilege staff member can bypass intended privilege boundaries and perform unauthorized state modifications.

The target of this vulnerability is the Media.php component, which is responsible for managing product image assets and galleries. Exploitation of this vulnerability does not lead to remote code execution directly, but it enables unauthorized modification of crucial e-commerce database records and media associations. This undermines system integrity and allows malicious product defacement.

Root Cause Analysis

The root cause of CVE-2026-56830 lies in a missing server-side authorization check inside the store() method of the Media Livewire component. During a prior security patch (remediating GHSA-h4mp-g9c6-xwph), Shopper developers intended to secure administrative actions by locking state variables and validating permissions. While sibling components received explicit authorization directives, the Media component was omitted from these protections.

Laravel Livewire exposes all public component methods to client-side invocation. Because the client can request the execution of any public method by targeting /livewire/update, developers must enforce strict access control checks directly within those methods. The Media sub-form component (packages/admin/src/Livewire/Components/Products/Form/Media.php) implements a public store() method that performs database updates, but lacks any permission verification.

While the underlying $product property is protected by the #[Locked] attribute (which prevents attackers from changing the targeted product ID on the client side), the absence of a permission check allows any authenticated session with minimum rights to invoke store(). An attacker who can view a product can capture the Livewire snapshot of that product's media component and trigger the update action, bypassing the application's RBAC model.

Code Analysis

Before the patch, the store() method in packages/admin/src/Livewire/Components/Products/Form/Media.php was vulnerable. The code validated input and immediately updated the product model using form state without checking user privileges.

// Vulnerable Code Path
public function store(): void
{
    // No authorization check is performed here
    $this->validate();
 
    $this->product->update($this->form->getState());
    $this->dispatch('product.updated');
    Notification::make()
        ->body(__('shopper::pages/products.notifications.media_update'))
        ->success()
        ->send();
}

To resolve this vulnerability, the fix in commit bf72e2753e21296184596d507336c7d65ecd46ff introduces an explicit call to the authorize method. This forces Laravel's underlying authorization system to evaluate whether the authenticated user holds the required edit_products permission.

// Patched Code Path
public function store(): void
{
    // Enforce authorization prior to validation or model mutation
    $this->authorize('edit_products');
 
    $this->validate();
 
    $this->product->update($this->form->getState());
    $this->dispatch('product.updated');
    Notification::make()
        ->body(__('shopper::pages/products.notifications.media_update'))
        ->success()
        ->send();
}

The fix is robust for this specific component because it prevents execution of any database write operations prior to verifying security policies. Additionally, the patch implemented similar authorization checks across multiple sibling controllers and actions, closing other outstanding administrative security gaps.

Exploitation Methodology

Exploiting CVE-2026-56830 requires an active session with low-level administrative privileges (specifically browse_products). The attacker must navigate to a product detail or browse page to retrieve the target product's Livewire snapshot. This snapshot contains the serialized component state required to perform transactions on /livewire/update.

Once the snapshot is acquired, the attacker crafts a POST request to /livewire/update. The payload must specify the shopper.products.form.media component name and include the extracted snapshot. In the updates object, the attacker defines the malicious parameters (such as form.thumbnail or form.gallery), and in the calls array, they request the execution of the store method.

An automated Python script can facilitate this attack by extracting the necessary CSRF token and session cookies, formatting the nested JSON parameters, and transmitting the payload to the server. If successful, the server responds with a status code of 200 and performs the unauthorized media update, which can be verified by observing the defaced product page.

Impact Assessment

The security impact of CVE-2026-56830 is classified as high for system integrity, resulting in a CVSS v3.1 base score of 6.5 (Medium). The vulnerability allows low-privileged staff members to compromise the integrity of the store's product catalog. An attacker can replace authentic product images with fraudulent, malicious, or offensive imagery, severely damaging the brand's reputation.

Because the scope is restricted to the Shopper application itself, the vulnerability has a CVSS scope metric of Unchanged. It does not allow for cross-site scripting (XSS), local file inclusion (LFI), or remote code execution (RCE) directly. The confidentiality and availability metrics are rated as None, as the vulnerability does not leak database credentials or cause service downtime.

This flaw represents a significant risk in multi-tenant or multi-tier administrative setups where staff permissions are strictly segregated. Trust assumptions between low-privilege product catalog browsers and high-privilege store managers are violated. It is critical to address this vulnerability to maintain administrative boundary isolation.

Remediation and Prevention

The primary mitigation for CVE-2026-56830 is upgrading the Shopper installation to version 2.9.2 or later. This release incorporates the authorization fixes in the core admin package and secures the Livewire endpoints against unauthorized calls. Running composer update shopperlabs/shopper in the application root will fetch the patched dependency.

In environments where immediate upgrading is not possible, a manual hotfix must be applied to the vendor files. Developers can locate the Media.php controller file within the Shopper package and manually add $this->authorize('edit_products'); as the first line of the store() method. This ensures that the application checks the user's role before processing validation or updates.

Furthermore, organization security teams should implement defensive monitoring on web application firewalls (WAFs). Logging and analyzing traffic to /livewire/update for request payloads invoking store on the shopper.products.form.media component can assist in detecting exploitation attempts. Conducting routine permission audits across all administrative accounts is also highly recommended.

Official Patches

shopperlabsFix Commit in Shopper Repository

Fix Analysis (1)

Technical Appendix

CVSS Score
6.5/ 10
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N
EPSS Probability
0.01%

Affected Systems

Shopper (shopperlabs/shopper) Headless E-Commerce Admin Panel

Affected Versions Detail

Product
Affected Versions
Fixed Version
shopperlabs/shopper
shopperlabs
< 2.9.22.9.2
AttributeDetail
CWE IDCWE-862
Attack VectorNetwork (AV:N)
CVSS v3.1 Score6.5
ImpactHigh Integrity Loss (I:H)
Exploit StatusProof of Concept (PoC) Available
CISA KEV StatusNot Listed

MITRE ATT&CK Mapping

T1068Exploitation for Privilege Escalation
Privilege Escalation
CWE-862
Missing Authorization

The product does not perform an authorization check when an actor attempts to access a resource or perform an action.

Known Exploits & Detection

PoC DocumentationExploit methodology and manual curl/Python instructions documented in security advisory GHSA-99h5-jhh7-v3r3

Vulnerability Timeline

Initial code translation commits submitted
2026-06-20
Fix commit merged into master resolving the BFLA in Media.php
2026-06-22
CVE-2026-56830 formally published in NVD and GHSA
2026-09-15

References & Sources

  • [1]GitHub Security Advisory GHSA-99h5-jhh7-v3r3
  • [2]Fix Commit in Shopper Repository
  • [3]Pull Request #570
  • [4]Shopper v2.9.2 Release Notes
  • [5]CVE-2026-56830 Record
  • [6]Wiz Vulnerability Database - CVE-2026-56830

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•23 minutes ago•GHSA-5648-RGJ9-V224
8.1

GHSA-5648-RGJ9-V224: Multiple Security Control Bypasses in @zereight/mcp-gitlab

A constellation of five distinct security flaws (F1 through F5) in `@zereight/mcp-gitlab` prior to version 2.1.30 allows unauthenticated remote access, read-only policy bypasses, DNS rebinding, and denial-of-service via session exhaustion.

Alon Barad
Alon Barad
1 views•6 min read
•about 1 hour ago•CVE-2026-61568
9.6

CVE-2026-61568: DNS Rebinding Vulnerability in @zereight/mcp-gitlab Streamable HTTP Transport

A critical security vulnerability has been identified in the @zereight/mcp-gitlab implementation of the Model Context Protocol (MCP) server. Prior to version 2.1.30, the server lacks HTTP Host and Origin header validation on its Streamable HTTP transport interface (/mcp). This security omission permits remote attackers to bypass the Same-Origin Policy (SOP) via a DNS Rebinding attack. Under this vector, an attacker can route malicious API requests to the victim's local or internal MCP server, thereby gaining unauthorized control over the victim's GitLab account and resources.

Alon Barad
Alon Barad
4 views•9 min read
•about 2 hours ago•CVE-2026-61559
9.6

CVE-2026-61559: Critical Server-Side Request Forgery and Token Leakage in @zereight/mcp-gitlab

A critical Server-Side Request Forgery (SSRF) vulnerability in @zereight/mcp-gitlab allows attackers to leak sensitive GitLab Private-Tokens by supplying an arbitrary external hostname via the X-GitLab-API-URL header when dynamic routing is enabled.

Amit Schendel
Amit Schendel
5 views•7 min read
•about 3 hours ago•CVE-2026-69208
7.5

CVE-2026-69208: Memory Leak and Denial of Service in http4s DigestAuth Middleware

A critical memory leak vulnerability exists in the server-side DigestAuth middleware of the http4s library. Due to a logical inversion in the stale-nonce clean-up routine, the internal cache fails to evict stale nonces while prematurely purging fresh ones. Unauthenticated remote attackers can exploit this behavior by repeatedly prompting the server for authentication challenges, leading to unbounded memory consumption and application crashes via a java.lang.OutOfMemoryError.

Amit Schendel
Amit Schendel
5 views•6 min read
•about 5 hours ago•CVE-2026-56825
8.1

CVE-2026-56825: Missing Authorization and State Tampering in Shopper e-commerce Admin Panel

A critical authorization bypass and insecure direct object reference (IDOR) vulnerability was discovered in Shopper, a Headless e-commerce Admin Panel. Due to missing authorization chains on table actions and the lack of a locked property on the collection state model, authenticated low-privilege staff can detach products from arbitrary collections.

Alon Barad
Alon Barad
4 views•9 min read
•about 7 hours ago•CVE-2026-59973
8.5

CVE-2026-59973: High-Severity Server-Side Request Forgery in FrontMCP and mcp-from-openapi

CVE-2026-59973 is a high-severity Server-Side Request Forgery (SSRF) vulnerability in FrontMCP and its underlying OpenAPI parsing library, mcp-from-openapi. The flaw allows authenticated attackers capable of importing or configuring OpenAPI specifications to bypass string-based hostname filtering mechanisms. By employing DNS wildcard loopbacks, HTTP redirects, or IPv4-mapped IPv6 address formatting, attackers can coerce the application into sending HTTP requests to internal networks, loopback adapters, and cloud metadata environments.

Amit Schendel
Amit Schendel
7 views•7 min read