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-47745

CVE-2026-47745: Missing Authorization in Shopper Admin Panel Settings

Alon Barad
Alon Barad
Software Engineer

Jun 6, 2026·6 min read·5 visits

Executive Summary (TL;DR)

Missing server-side authorization checks in Shopper e-commerce admin panels allow any authenticated user to disable payment methods, currencies, and carrier configurations via forged Livewire update requests.

Shopper is an open-source headless e-commerce administration panel built on Laravel, Livewire, and Filament. Prior to version 2.8.0, the admin tables for PaymentMethods, Currencies, and Carriers exposed inline toggles and per-record actions that could be modified by any authenticated user without verifying the corresponding administrative permissions on the backend.

Vulnerability Overview

Shopper is an open-source, headless e-commerce administration panel constructed using Laravel, Livewire, and the Filament administration framework. Prior to version 2.8.0, the platform exposed an authorization vulnerability within its management interfaces for core e-commerce resources. Specifically, the configuration tables responsible for handling payment methods, store currencies, and logistics carriers did not enforce backend authorization check verification when executing actions or toggling resource statuses.

Because the underlying components rely on Livewire to bind frontend UI events to backend mutations, any authenticated panel user could invoke backend updates directly. The attack surface does not require full administrative privileges to exploit; any user with valid dashboard credentials can interact with the endpoints. This exposure allows unauthorized actions that directly manipulate active configuration states, bypass intended access controls, and compromise shop operation.

This vulnerability is tracked as CVE-2026-47745 and carries a CVSS base score of 6.5. The root weakness lies in missing authorization checks (CWE-862) across multiple Livewire administrative pages. The vulnerability has been resolved in the 2.8.0 release by integrating explicit permission validations before state transitions and action executions occur on the server.

Root Cause Analysis

The vulnerability stems from an architectural mismatch between frontend state visibility and backend lifecycle enforcement within the Filament and Livewire ecosystems. In standard Laravel applications, view-level restrictions (such as omitting a button from a blade template) are insufficient for securing underlying application state modifications. Filament tables use interactive components like ToggleColumn to enable rapid, inline modification of database fields via AJAX requests.

When a user interacts with a ToggleColumn or initiates an inline table action such as EditAction or DeleteAction, Filament issues a standardized POST request to the /livewire/update endpoint. This request targets the corresponding Livewire component class on the backend, passing parameter updates and payload states. If the PHP class defining the component lacks explicit authorization constraints on those dynamic interactions, the server processes the state update implicitly.

In the vulnerable versions of Shopper, components such as PaymentMethods, Currencies, and Carriers defined their toggle columns and actions without specifying permission boundaries. Although the user interface might restrict low-privileged users from seeing these administrative tables in standard navigation flows, the Livewire routing handlers remained registered and fully accessible. This allowed any authenticated user to transmit custom Livewire payloads directly to the backend components and bypass visual frontend blocks.

Code-Level Diff Analysis

The vulnerability was resolved by appending explicit authorization controls directly onto the Filament component definitions. The primary patch ensures that state modifications initiated via toggle columns execute authorization checks prior to saving changes to the database. Additionally, standard action hooks are explicitly bound to the required permission policy.

In the vulnerable implementation, the ToggleColumn for enabling or disabling carriers did not define any hooks to intercept the update cycle:

// Vulnerable code in Carriers.php
ToggleColumn::make('is_enabled')
    ->label(__('shopper::forms.label.status')),

The patched version integrates the beforeStateUpdated method, forcing the component to authorize the access_setting capability before executing the database write. This prevents unprivileged Livewire requests from mutating the state:

// Patched code in Carriers.php
ToggleColumn::make('is_enabled')
    ->label(__('shopper::forms.label.status'))
    ->beforeStateUpdated(fn (): mixed => $this->authorize('access_setting')),

Furthermore, actions such as editing or deleting records are updated with explicit calls to the native authorize method. For instance, the DeleteAction wrapper now explicitly enforces permissions prior to modal invocation and execution:

// Patched action definition
DeleteAction::make('delete')
    ->label(__('shopper::forms.actions.delete'))
    ->icon(Untitledui::Trash03)
    ->authorize('access_setting')
    ->iconButton(),

This pattern is replicated across all affected administrative screens, including PaymentMethods.php and Currencies.php. This consistent enforcement guarantees that the backend application layer rejects unauthorized Livewire operations before they can affect database state.

Exploitation Methodology

Exploitation requires network access to the Shopper administration panel and valid authentication credentials for any low-privileged staff account. The attacker first establishes a session and captures a valid state signature or checksum from any accessible Livewire page. Since Livewire components use a signed checksum (serverMemo.checksum) to verify request integrity, the attacker must obtain a valid base context before crafting modified payloads.

Using an intercepting proxy or browser developer tools, the attacker intercepts or replays a POST request to the /livewire/update endpoint. The attacker structures the JSON body to target the vulnerable components, such as shopper.livewire.pages.settings.payment-methods. Within the payload, the attacker defines a callMethod action aiming to modify database records directly:

{
  "fingerprint": {
    "id": "target-component-id",
    "name": "shopper.livewire.pages.settings.payment-methods",
    "locale": "en",
    "path": "admin/settings/payments"
  },
  "serverMemo": {
    "data": {},
    "checksum": "valid-session-checksum"
  },
  "updates": [
    {
      "type": "callMethod",
      "payload": {
        "method": "updateTableColumnState",
        "params": ["is_enabled", "target-payment-method-uuid", false]
      }
    }
  ]
}

When the backend processes this payload in a vulnerable environment, it routes the request through the updateTableColumnState lifecycle method. Because no authorization callback or policy validation occurs on the server side, the backend executes the state change. The target payment method is disabled instantly, yielding a complete denial of checkout capability for standard customers of the online store.

Impact Assessment

The security impact of CVE-2026-47745 is concentrated on the integrity and availability of the e-commerce transaction workflow. By disabling active payment methods, carriers, or altering the default currency settings, an attacker can induce an operational denial of service across the entire shopping portal. If all payment gateways are disabled, checkout flows fail globally, preventing customers from placing orders and causing immediate financial damage.

Furthermore, manipulating active currency structures can lead to pricing discrepancies. If an attacker disables a specific currency or changes currency configuration parameters, active products might render with incorrect pricing ratios. This integrity compromise allows malicious low-privileged internal users to degrade customer trust, disrupt processing pipelines, or execute unauthorized business actions.

According to CVSS v3.1 metrics, the flaw carries a base score of 6.5, which represents medium severity. The impact is categorized as high for integrity because administrative configurations can be altered unauthorized, and none for confidentiality as the bug does not leak database records or user credentials directly. However, the operational impact on store availability remains a key risk vector for organizations employing Shopper in production environments.

Remediation & Detection Guidance

The primary remediation path is upgrading the Shopper administrative panel installation to version 2.8.0 or higher. This update introduces comprehensive backend validation on all administrative tables. If an immediate upgrade is not feasible, administrators must apply manual code patches to secure the vulnerable components by adding authorization checks to all toggle and action definitions.

composer update shopperlabs/shopper

To detect potential exploitation attempts, security operations teams should monitor web server logs for suspicious traffic patterns targeting Livewire routes. Specifically, audit HTTP POST requests routed to /livewire/update where the payload contains calls to updateTableColumnState on setting components such as shopper.livewire.pages.settings.payment-methods, shopper.livewire.pages.settings.currencies, or shopper.livewire.pages.settings.carriers.

# Conceptual WAF Rule Target
HTTP POST /livewire/update
Body matches: "shopper.livewire.pages.settings.*"
Body matches: "updateTableColumnState"

Additionally, audit application logs for mismatch events where a low-privileged user session issues updates to configuration resources. Enforcing the principle of least privilege on administrative panels restricts the initial compromise surface and prevents unauthorized actors from accessing any portion of the Livewire administration structure.

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.03%
Top 91% most exploited

Affected Systems

Shopper (Laravel/Livewire/Filament E-Commerce Administration Panel)

Affected Versions Detail

Product
Affected Versions
Fixed Version
Shopper
shopperlabs
< 2.8.02.8.0
AttributeDetail
CWE IDCWE-862
Attack VectorNetwork (AV:N)
CVSS Score6.5
EPSS Score0.00029
Exploit Statusnone
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.

Vulnerability Timeline

Vulnerability patched in release 2.8.0
2026-02-15
GitHub Security Advisory published
2026-02-16

References & Sources

  • [1]GitHub Security Advisory GHSA-fxqw-97cc-7g5c
  • [2]GitHub Pull Request 511
  • [3]Official Patch Commit
  • [4]CVE.org Record

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

•about 1 hour ago•CVE-2026-47760
8.7

CVE-2026-47760: Cross-Site Scripting (XSS) via SVG Namespace Sanitizer Bypass in TinyMCE

TinyMCE versions 6.8.0 through 7.0.1 contain a high-severity Cross-Site Scripting (XSS) vulnerability. The flaw exists in the custom HTML parser and sanitizer module, which incorrectly manages SVG namespace scopes when parsing nested elements. A low-privileged or unauthenticated attacker can submit a crafted HTML payload containing nested SVG structures to bypass sanitization filters, leading to arbitrary JavaScript execution in the context of the victim's browser session.

Alon Barad
Alon Barad
6 views•7 min read
•about 2 hours ago•CVE-2026-47759
8.7

CVE-2026-47759: Stored Cross-Site Scripting (XSS) via Unsanitized data-mce-* Serialization Bypass in TinyMCE

CVE-2026-47759 is a critical stored Cross-Site Scripting (XSS) vulnerability affecting multiple active branches of the TinyMCE rich text editor. The flaw resides in the editor's handling of user-controlled, prefixed internal attributes, such as data-mce-href, data-mce-src, and data-mce-style. When processing raw HTML inputs, TinyMCE's internal validation schema neglects to inspect these custom prefixed attributes. During HTML serialization, the editor's engine extracts these unsanitized values and copies them back into standard executable attributes, overwriting any previously sanitized standard values and leading to execution of arbitrary code.

Amit Schendel
Amit Schendel
6 views•7 min read
•about 2 hours ago•CVE-2026-47762
8.7

CVE-2026-47762: Stored Cross-Site Scripting (XSS) in TinyMCE Protect Pattern Restoration

A high-severity stored Cross-Site Scripting (XSS) vulnerability was identified in the TinyMCE rich text editor. The flaw exists in the handling of the 'protect' configuration option, where forged placeholder comments containing malicious payloads bypass the editor's sanitization routines and execute arbitrary JavaScript during serialization and content restoration.

Amit Schendel
Amit Schendel
6 views•8 min read
•about 3 hours ago•CVE-2026-47742
6.5

CVE-2026-47742: Missing Authorization and Client-Side Property Tampering in Shopper E-commerce Panel

An authorization bypass and client-side property tampering vulnerability (CVE-2026-47742) in the Shopper headless admin panel (built on Laravel and Livewire) allows low-privileged users to modify arbitrary product records (Insecure Direct Object Reference). This occurs due to unlocked public model properties and a complete lack of access control checks on mutating sub-form store methods.

Amit Schendel
Amit Schendel
6 views•5 min read
•about 4 hours ago•CVE-2026-47715
3.1

CVE-2026-47715: Insecure Direct Object Reference (IDOR) / Cross-Project Authorization Bypass in Bugsink

An Insecure Direct Object Reference (IDOR) vulnerability in Bugsink (versions < 2.2.0) allows authenticated users with access to at least one project to view sensitive event details (including stack traces, local/environment variables, and execution breadcrumbs) belonging to other projects, by supplying a known event UUID directly to the issue event URL paths.

Alon Barad
Alon Barad
4 views•7 min read
•about 4 hours ago•CVE-2026-47716
3.1

CVE-2026-47716: Broken Object Level Authorization in Bugsink Bulk Issue Actions

Bugsink prior to version 2.2.0 is vulnerable to Broken Object Level Authorization (BOLA). The issue list view authorizes access based on the project in the URL path but applies requested bulk actions to submitted issue UUIDs globally, without verifying project ownership.

Amit Schendel
Amit Schendel
4 views•6 min read