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-31888
5.3

CVE-2026-31888: Observable Response Discrepancy in Shopware Store API

Alon Barad
Alon Barad
Software Engineer

Mar 12, 2026·5 min read·5 visits

PoC Available

Executive Summary (TL;DR)

An unauthenticated user enumeration vulnerability exists in Shopware's Store API (`/store-api/account/login`) due to differing error responses and processing times for valid versus invalid accounts. Attackers can leverage this to compile lists of registered users.

Shopware Open Commerce Platform is vulnerable to user enumeration via observable response discrepancies in the Store API login endpoint. An unauthenticated remote attacker can probe the `/store-api/account/login` endpoint to systematically identify registered customer accounts, facilitating targeted social engineering or subsequent password spraying attacks.

Vulnerability Overview

Shopware provides a Store API to facilitate headless commerce operations, including authentication through the /store-api/account/login endpoint. This endpoint accepts standard JSON payloads containing an email address and a password. Due to insufficient normalization of error handling, the API exposes the existence or non-existence of customer accounts to unauthenticated requesters.

The vulnerability is classified as an Observable Response Discrepancy (CWE-204). The API returns distinct error codes based on whether the queried email address exists in the underlying database. This allows an attacker to bypass intended privacy controls and systematically map out the user base by submitting lists of candidate email addresses and evaluating the HTTP responses.

Account enumeration serves as a critical reconnaissance step in broader attack chains. By verifying which email addresses correspond to valid accounts, an attacker can highly target subsequent credential stuffing, password spraying, or spear-phishing campaigns. The impact is limited to information disclosure (CVSS Confidentiality: Low), but the lack of authentication or user interaction requirements increases the overall risk profile.

Root Cause Analysis

The root cause of this vulnerability lies in the inconsistent exception handling within the Store API's login routing logic. The AccountService::getCustomerByLogin method is responsible for validating the provided credentials against the user database. When authentication fails, this method differentiates the failure modes by throwing distinct PHP exceptions.

If the provided email address does not match any existing records in the database, the method throws a CustomerNotFoundException. The API framework subsequently catches this exception and translates it into a specific JSON error response with the code CHECKOUT__CUSTOMER_NOT_FOUND. Additionally, this error payload echoes the queried email address back to the client in the response details.

Conversely, if the email address exists but the provided password is incorrect, the method throws a BadCredentialsException. This translates into an API response with the code CHECKOUT__CUSTOMER_AUTH_BAD_CREDENTIALS. By failing to catch and normalize these exceptions into a generic authentication failure message at the controller boundary, the application leaks the internal database state directly to the client.

Exploitation Mechanics

Exploitation requires sending standard HTTP POST requests to the vulnerable /store-api/account/login endpoint. The attacker does not need any prior authentication or specific network positioning. The requests require a JSON body containing the target email and a generic password string.

POST /store-api/account/login HTTP/1.1
Host: vulnerable-shopware.local
Content-Type: application/json
 
{
  "email": "target@example.com",
  "password": "InvalidPassword123!"
}

The attacker observes the resultant JSON response body. An invalid account yields a 400 or 401 status with the error code CHECKOUT__CUSTOMER_NOT_FOUND. A valid account yields a response with the error code CHECKOUT__CUSTOMER_AUTH_BAD_CREDENTIALS. The attacker scripts this process to iterate over thousands of candidate addresses, classifying them based purely on string matching within the returned error codes.

Timing Side-Channel Considerations

Even if the explicit error codes are unified, the underlying authentication logic may introduce an Information Exposure Through Environmental Side-Channels (CWE-208). In a typical vulnerable implementation, the application first queries the database for the user record. If the record is absent, the execution flow terminates immediately.

If the record exists, the application proceeds to verify the provided password against the stored hash. Shopware utilizes modern, computationally intensive hashing algorithms (such as Argon2 or BCrypt) to secure stored credentials. The execution of functions like password_verify() requires measurable CPU time (often tens to hundreds of milliseconds, depending on the work factor).

This creates a measurable timing discrepancy. Requests targeting non-existent users return significantly faster than requests targeting valid users. An attacker measuring the response latency over a network can statistically differentiate between valid and invalid accounts, effectively performing user enumeration even when the HTTP response body and status codes are perfectly uniform.

Remediation and Mitigation Analysis

Complete remediation of this vulnerability requires changes to both the error handling logic and the cryptographic timing execution paths. The immediate patch involves intercepting the CustomerNotFoundException at the LoginRoute boundary. Instead of passing this exception to the response formatter, the application must re-throw it as a generic BadCredentialsException to ensure the final output is indistinguishable from a standard failed login.

To address the timing side-channel, the authentication service must enforce a constant-time execution flow. This is achieved by computing a "dummy" hash comparison when the user is not found in the database. The system executes password_verify() against a hardcoded, static hash using the provided password, ensuring the CPU spends an equivalent amount of time processing the request regardless of whether the account exists.

Administrators who cannot apply the patches immediately should implement stringent rate limiting on the /store-api/account/login endpoint. Configuring Web Application Firewalls (WAF) or API gateways to track failed authentication attempts by IP address and strictly throttle bulk requests will severely degrade the efficacy of enumeration and subsequent brute-force attacks.

Official Patches

ShopwareGitHub Security Advisory GHSA-gqc5-xv7m-gcjq

Technical Appendix

CVSS Score
5.3/ 10
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N

Affected Systems

Shopware CoreShopware Platform

Affected Versions Detail

Product
Affected Versions
Fixed Version
Shopware Core
Shopware
< 6.6.10.156.6.10.15
Shopware Core
Shopware
>= 6.7.0.0, < 6.7.8.16.7.8.1
Shopware Platform
Shopware
< 6.6.10.146.6.10.14
Shopware Platform
Shopware
>= 6.7.0.0, < 6.7.8.16.7.8.1
AttributeDetail
CWE IDCWE-204 / CWE-208
Attack VectorNetwork
Authentication RequiredNone
CVSS v3.1 Score5.3 (Medium)
ImpactInformation Disclosure (User Enumeration)
Exploit StatusProof of Concept Available

MITRE ATT&CK Mapping

T1589.002Gather Victim Identity Information: Email Addresses
Reconnaissance
T1110.003Brute Force: Password Spraying
Credential Access
CWE-204
Observable Response Discrepancy

The product behaves differently or sends different responses depending on whether a particular state or condition exists, which may allow an attacker to learn about the state of the system.

Vulnerability Timeline

Vulnerability published by NVD and CVE.org
2026-03-11
Security advisory GHSA-gqc5-xv7m-gcjq released by Shopware
2026-03-11
Fixes released in Shopware versions 6.7.8.1, 6.6.10.15, and 6.6.10.14
2026-03-11

References & Sources

  • [1]Shopware Security Advisory
  • [2]NVD Vulnerability Detail
  • [3]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.