Mar 12, 2026·5 min read·35 visits
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.
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.
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 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.
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.
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.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N| Product | Affected Versions | Fixed Version |
|---|---|---|
Shopware Core Shopware | < 6.6.10.15 | 6.6.10.15 |
Shopware Core Shopware | >= 6.7.0.0, < 6.7.8.1 | 6.7.8.1 |
Shopware Platform Shopware | < 6.6.10.14 | 6.6.10.14 |
Shopware Platform Shopware | >= 6.7.0.0, < 6.7.8.1 | 6.7.8.1 |
| Attribute | Detail |
|---|---|
| CWE ID | CWE-204 / CWE-208 |
| Attack Vector | Network |
| Authentication Required | None |
| CVSS v3.1 Score | 5.3 (Medium) |
| Impact | Information Disclosure (User Enumeration) |
| Exploit Status | Proof of Concept Available |
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.
A critical stored Cross-Site Scripting (XSS) vulnerability was identified in Froxlor server administration software panel before version 2.3.8. Authenticated customers with DNS editor privileges can inject malicious JavaScript into DNS TXT records. Because the application processes these values via a raw formatting callback without context-aware HTML entity encoding, the payload executes in the security context of administrative users who view the affected domain's DNS zones.
An authenticated administrator with privileges to manage admin accounts (such as change_serversettings) can execute arbitrary SQL commands via a second-order SQL injection vulnerability. The flaw resides in Froxlor's administrative API endpoints, specifically during the handling of IP address mapping parameters which are stored as serialized arrays and later interpolated without sanitization into active database queries. This vulnerability allows high-privileged administrative attackers to compromise the database. By injecting a payload into administrative profile metadata, an attacker can extract sensitive credentials, manipulate backend settings, or potentially disrupt database integrity. The vulnerability affects all versions of Froxlor prior to 2.3.8.
CVE-2026-54543 is a DNS Resource Record (RR) Injection vulnerability in Froxlor, an open-source server administration control panel. Prior to version 2.3.8, the DomainZones.add API command failed to perform strict sanitization and validation on the user-controlled record (label) and type parameters before serializing them into BIND-compatible zone files. An authenticated customer with DNS zone management permissions can inject control characters, breaking out of the original record context to define unauthorized resource records within managed zones.
CVE-2026-42533 is a critical security vulnerability discovered in NGINX Open Source, NGINX Plus, NGINX Ingress Controller, and related products, referred to as the 'Two-Pass Capture-Clobbering' bug. The flaw is situated within NGINX's internal evaluation engine when handling complex variables, exposing a heap-based buffer overflow and information leak when a configuration chains regular expression-based map directives with numbered capture groups. An unauthenticated remote attacker can exploit this weakness by transmitting crafted HTTP requests to trigger remote code execution or defeat ASLR.
Froxlor prior to version 2.3.8 contains a high-severity architectural flaw where the standalone lib/ajax.php entry point bypasses the centralized request validation in lib/init.php. Unauthenticated remote attackers can leverage Cross-Site Request Forgery (CSRF) to induce authenticated administrators to submit forged requests that modify API key whitelists and expiration dates, potentially yielding persistent, out-of-band administrative control.
An insecure data retrieval flaw in the Froxlor server administration panel API allows authenticated remote attackers to retrieve unredacted bcrypt password hashes and Base32-encoded Time-Based One-Time Password (TOTP) seeds. Affected endpoints include several 'get' and 'listing' handlers for customers, administrators, and FTP accounts. Utilizing these leaked parameters, attackers can crack the password hashes offline and concurrently generate valid second-factor authentication codes to completely bypass access controls.