Skip to main content
Vulnerability Database/CVE-2026-48010

CVE-2026-48010: Shopware Auth Bypass Vulnerability

CVE-2026-48010 is an authentication bypass flaw in Shopware that allows non-admin API users to escalate privileges by setting admin rights on user accounts. This article covers technical details, affected versions, and mitigation.

Published:

Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

Sources: National Vulnerability Database, CISA KEV, Exploit-DB

CVE-2026-48010 Overview

CVE-2026-48010 is a privilege escalation vulnerability [CWE-269] in Shopware, an open commerce platform. The flaw resides in UserController::upsertUser() within src/Core/Framework/Api/Controller/UserController.php. This method writes raw user data in SYSTEM_SCOPE without filtering the admin field. A non-admin API user holding user:create or user:update ACL permissions can set admin: true on new or existing user accounts. The sibling method IntegrationController::upsertIntegration() contained an isAdmin() guard for the same field, but UserController did not. Shopware fixed the issue in versions 6.6.10.18 and 6.7.10.1.

Critical Impact

Authenticated non-admin API users with limited ACL permissions can elevate themselves or others to full administrator privileges, gaining complete control over the Shopware instance.

Affected Products

  • Shopware versions prior to 6.6.10.18 (6.6.x branch)
  • Shopware versions prior to 6.7.10.1 (6.7.x branch)
  • Shopware Admin API UserController endpoint

Discovery Timeline

  • 2026-07-17 - CVE-2026-48010 published to NVD
  • 2026-07-18 - Last updated in NVD database

Technical Details for CVE-2026-48010

Vulnerability Analysis

The vulnerability is a broken access control flaw in the Shopware Admin API. The upsertUser() method processes incoming JSON payloads and persists user records using SYSTEM_SCOPE, which bypasses standard write-scope checks. The controller verified that the caller had user:update permission or was updating their own account, but did not enforce a separate check for changes to the sensitive admin boolean field.

As a result, any API caller who could reach upsertUser() was able to include admin: true in the request body. The persistence layer accepted this field verbatim because SYSTEM_SCOPE skipped ACL enforcement on individual attributes. An analogous integration endpoint, IntegrationController::upsertIntegration(), already contained the required isAdmin() check, exposing the inconsistency.

Root Cause

The root cause is a missing authorization check on a privileged field. The controller conflated two authorization decisions: whether the caller can modify the user object at all, and whether the caller can modify the admin attribute specifically. Writing data in SYSTEM_SCOPE further removed field-level ACL enforcement that would otherwise intercept the change.

Attack Vector

An attacker needs a valid Admin API session with user:create or user:update ACL privileges. The attacker submits a request to the user upsert endpoint containing admin: true. The updated account then possesses full administrator rights across the Shopware instance, including access to customer data, orders, and system configuration.

php
// Security patch: src/Core/Framework/Api/Controller/UserController.php
// Source: https://github.com/shopware/shopware/commit/d8d9a34a9255abf69c2798015a17cd6a80b08c25

        }
        $data['id'] = $userId ?: $data['id'];

-        if (
-            !$source->isAllowed('user:update')
-            && $source->getUserId() !== $data['id']
-        ) {
+        $isSelfUpdate = $source->getUserId() === $data['id'];
+        $canUpdateUsers = $source->isAllowed('user:update');
+
+        if (!$canUpdateUsers && !$isSelfUpdate) {
+            throw new PermissionDeniedException();
+        }
+
+        $isTryingToChangeAdmin = isset($data['admin']);
+
+        if (!$source->isAdmin() && $isTryingToChangeAdmin) {
             throw new PermissionDeniedException();
         }

The patch adds an explicit isAdmin() check that throws PermissionDeniedException whenever a non-admin caller includes the admin field in the payload. A second commit (7f1cef324ca4edfa6369264cc1c41287d032624d) applies the same guard to a related code path.

Detect Identity Attacks the Moment Authentication Fails

Singularity™ Identity surfaces credential misuse, lateral movement, and privilege escalation in real time, so you can contain the breach before it spreads.

Stop Identity Attacks

Detection Methods for CVE-2026-48010

Indicators of Compromise

  • Admin API requests to /api/user or /api/_action/user/* containing an admin field with a boolean value in the JSON body.
  • User accounts whose admin flag transitioned from false to true without a corresponding change by an existing administrator.
  • New user records created by non-admin API integrations that immediately possess administrator privileges.

Detection Strategies

  • Audit the Shopware user table for accounts flagged as admin and cross-reference against expected administrator rosters.
  • Enable and review Shopware Admin API access logs for POST and PATCH calls to user endpoints originating from integration users or restricted ACL roles.
  • Search web server or reverse proxy logs for request bodies containing the string "admin":true sent to user upsert routes.

Monitoring Recommendations

  • Alert on any change to the admin column of the user table, especially outside of maintenance windows.
  • Monitor creation of new administrator-scoped API access keys or integrations following user upsert activity.
  • Review authentication events for newly elevated accounts logging into the Admin UI or issuing high-privilege API calls.

How to Mitigate CVE-2026-48010

Immediate Actions Required

  • Upgrade Shopware installations on the 6.6.x branch to version 6.6.10.18.
  • Upgrade Shopware installations on the 6.7.x branch to version 6.7.10.1.
  • Review all user accounts and revoke administrator status from any that should not hold it.
  • Rotate API keys and integration credentials that had user:create or user:update ACL permissions.

Patch Information

Shopware released fixes in v6.6.10.18 and v6.7.10.1. The remediation is described in GitHub Security Advisory GHSA-v39m-97p8-gqg7 and implemented across two commits: d8d9a34a and 7f1cef32. Both add an isAdmin() check that rejects requests attempting to modify the admin field from non-admin callers.

Workarounds

  • Restrict the user:create and user:update ACL privileges to trusted administrators only until patching completes.
  • Disable or scope down integration accounts that expose user management endpoints to external systems.
  • Place the Shopware Admin API behind network controls that limit which clients can reach /api/user routes.
bash
# Verify installed Shopware version and upgrade via Composer
php bin/console --version
composer require shopware/core:~6.7.10.1 shopware/administration:~6.7.10.1 \
  shopware/storefront:~6.7.10.1 shopware/elasticsearch:~6.7.10.1 --no-scripts
php bin/console system:update:finish

Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

Sources: National Vulnerability Database, CISA KEV, Exploit-DB

Experience the Most Advanced Cybersecurity Platform

See how the world’s most intelligent, autonomous cybersecurity platform can protect your organization today and into the future.