CVE-2023-26051
Executive Summary
CVE-2023-26051 is an information disclosure vulnerability in Saleor, a headless GraphQL commerce platform. The flaw stems from improper exception handling within the Python backend, which causes internal exception messages to be returned directly in API responses. These error messages can leak sensitive information, including user email addresses, but only to staff-authenticated requests. The vulnerability carries a CVSS score of 6.5 (Medium) and has a low EPSS score of 0.00817, indicating limited in-the-wild exploitation activity. Organizations running self-hosted Saleor instances should prioritize patching given the confirmed fix from multiple independent sources.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Technical Analysis
Saleor is a headless, GraphQL commerce platform written in Python (using Django and Graphene). The vulnerability resides in the exception-handling layer of the GraphQL API. When certain internal Python exceptions are raised during processing of authenticated GraphQL queries or mutations, the application fails to sanitize or suppress the exception messages before returning them to the client in the API response payload.
The attack mechanism is straightforward: a staff-authenticated user (an account with staff privileges within the Saleor admin interface) crafts a GraphQL request that triggers an unhandled or improperly handled Python exception. The exception message — which may contain contextual data from the application's internal state — is then serialized into the GraphQL error response and returned to the caller. Because staff users can access a broader set of GraphQL queries and mutations than regular customers, the attack surface is larger for these authenticated roles.
The sensitive data exposure is not guaranteed for every exception; only some exceptions carry sensitive information. The NVD description specifically notes that user email addresses can appear in these leaked messages. This suggests that certain code paths within Saleor embed user-related objects (e.g., User model instances or email fields) into exception strings, either through logging, debug assertions, or exception constructors that include object representations.
The affected versions listed in the OSV package data reference three specific Git commits (6c0861e12fcf01a00b6290391d1907b60c4d7b18, 5763cb1ad22b84e29a270b9b0b365f32074b753d, f5b8251d0c9fc2e56b877c2c32eba297af98fb1a) that remain unfixed. This suggests the vulnerability was introduced at some point in the development history and that the maintainers have not yet published a tagged patched release covering all affected commit lineages.
From a code-level perspective, the issue is consistent with the vulnerability class CWE-209 (Generation of Error Message Containing Sensitive Information). In Python applications, this commonly manifests in one of two ways:
Unhandled exceptions in GraphQL resolvers: Graphene/Django GraphQL frameworks can catch exceptions and return
str(exc)to the client. If the exception was raised with a message containing user data (e.g.,raise ValueError(f"User {user.email} not found")), that message leaks.Improper logging configuration: Application-level logging handlers that include exception details may propagate to the response if logging errors are misconfigured as response content.
Insufficient technical detail is available in the NVD description to pinpoint the exact function names or code paths. The description does not specify which GraphQL operations are affected, which exception types are involved, or the precise conditions under which sensitive data appears in error messages.
Exploitation Scenarios
No public PoC is available; the attack chain described below is inferred from the vulnerability class and the NVD description.
Step 1 — Reconnaissance and Target Identification:
An attacker who has already obtained staff-level credentials for a Saleor instance (e.g., via phishing, credential stuffing, or insider access) first identifies the GraphQL endpoint. Saleor exposes its GraphQL API typically at a well-known path such as /graphql/ or /graphql. The attacker confirms the API is responsive by sending a simple introspection query or a basic health-check request.
Step 2 — Triggering the Vulnerability Class: The attacker authenticates with staff credentials and begins issuing GraphQL queries and mutations that exercise functionality with broader data access. Since staff users have permissions to query user data, orders, products, and other administrative entities, the attacker can target operations that are likely to encounter unexpected input states. This could include malformed IDs, references to non-existent objects, operations on orphaned records, or queries with invalid filters that cause the backend to raise exceptions with object string representations.
Step 3 — Payload/Execution Method: At the vulnerability-class level, the attacker crafts requests that deliberately force error conditions in the application. Examples of triggering inputs include:
- Querying for a user or order with a syntactically valid but non-existent ID to see if the error message reveals database state.
- Submitting mutations with inconsistent data (e.g., associating an order with an invalid payment) to trigger validation exceptions.
- Passing specially crafted arguments to fields that perform lookups or aggregations, potentially causing internal errors during object serialization.
The goal is to cause the Python backend to raise an exception whose message string contains embedded user data — most notably user email addresses. Because the application does not properly handle these exceptions, the message is returned verbatim in the GraphQL errors array of the response.
Step 4 — Post-Exploitation Impact: The attacker collects the leaked email addresses and other sensitive data from repeated error-triggering requests. This information can be leveraged for:
- Targeted phishing campaigns against the platform's users.
- Account enumeration, which facilitates further credential attacks.
- Potentially correlating email addresses with other data for social engineering or identity theft.
The attacker does not gain arbitrary code execution, privilege escalation, or data modification through this vulnerability — the impact is strictly information disclosure confined to what data is embedded in Python exception messages.
Impact Assessment
CVSS Analysis (Score 6.5, Medium): The CVSS vector can be parsed from available sub-scores as:
- Attack Vector (AV): Network — the vulnerability is exploitable remotely.
- Attack Complexity (AC): Low — no special conditions are required beyond valid staff authentication.
- Privileges Required (PR): Low — staff-level authentication is needed, though the attacker does not need any special high-privilege role beyond standard staff membership.
- User Interaction (UI): None — no victim interaction is required.
- Scope (S): Unchanged — the vulnerability impacts only the Saleor application, not adjacent systems.
- Confidentiality (C): High — sensitive user data (email addresses) can be extracted.
- Integrity (I): None — no data modification possible.
- Availability (A): None — no denial-of-service impact.
Business Impact: For e-commerce operators, leaking user email addresses constitutes a data privacy breach. Depending on jurisdiction (e.g., GDPR in Europe, CCPA in California), this may trigger mandatory breach notification requirements. The exposure is limited to staff-authenticated requests, meaning the information disclosure is not accessible to external unauthenticated actors; however, any compromise of staff credentials elevates the severity. The full blast radius depends on which user records are included in exception messages — if order-related exceptions leak email addresses alongside basket contents or addresses, the impact extends beyond simple enumeration.
Likelihood of Exploitation: The EPSS score of 0.00817 (53.9th percentile) suggests a moderate-to-low probability of in-the-wild exploitation. The requirement for staff-level authentication significantly reduces attack surface. No CISA KEV listing, no public PoC, and no known exploit code exist as of the reporting date. Threat actor interest is likely low unless Saleor is widely deployed in the enterprise segment, a factor that depends on the specific vertical/customer base of the organization running the platform.
Detection Guidance
Sigma Rule
title: Saleor GraphQL API Error Message Information Disclosure
id: 7f3a9c2e-5b81-4d6e-9a1c-3b2f8d4e6a10
status: experimental
description: Detects responses from Saleor GraphQL API containing email addresses within error messages, indicating potential CVE-2023-26051 exploitation.
references:
- https://nvd.nist.gov/vuln/detail/CVE-2023-26051
author: Valtersit Threat Intelligence
date: 2025/01/15
logsource:
category: application
product: saleor
detection:
selection:
response.status: 200
response.body|contains:
- '"errors"'
- 'Invalid'
- 'TypeError'
- 'ValueError'
response.body|re: '[\w\.\+\-]+@[\w\-]+\.[\w\.\-]+'
condition: selection
falsepositives:
- Legitimate error messages that include email addresses (rare, as errors should be sanitized)
level: medium
tags:
- attack.t1552
- cve.2023.26051
YARA Rule
rule CVE_2023_26051_Saleor_Error_Info_Disclosure {
meta:
author = "Valtersit Threat Intelligence"
description = "Detects Saleor API error responses containing email addresses in exception messages"
date = "2025-01-15"
cve = "CVE-2023-26051"
severity = "medium"
strings:
$graphql_errors = /"errors"\s*:\s*\[/"
$email_pattern = /[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,}/
$exception_types = /(TypeError|ValueError|KeyError|AttributeError|InternalError|IntegrityError)/
$graphql_response = /"data"\s*:\s*\{/
condition:
2 of them and $email_pattern and $graphql_errors
}
Suricata IDS Rule
alert http any any -> any any (msg:"CVE-2023-26051 - Saleor GraphQL Error Message Info Disclosure Attempt"; flow:established,to_server; content:"POST"; http_method; content:"graphql"; http_uri; pcre:"/\"errors\"\s*:/i"; pcre:"/[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,}/"; classtype:attempted-information-leak; reference:cve,2023-26051; sid:202326051; rev:1;)
Elastic Detection
// Elastic EQL query to detect Saleor GraphQL responses containing email addresses in error blocks
sequence by source.ip
[network where event.action == "connection_established" and destination.port == 443]
[http where request.method == "POST" and request.uri contains "graphql" and response.body contains "errors" and response.body regex "[\w\.\+\-]+@[\w\-]+\.[\w\.\-]+"]
Splunk SPL Query
index=web sourcetype=access_combined OR sourcetype=json
| search "graphql" AND "errors"
| regex response_body="(?i)[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,}"
| regex response_body="(?i)errors"
| stats count by src_ip, uri_path, status, user_agent
| where count > 3
| sort - count
| head 50
Wazuh OSSEC Rule
<rule id="100326" level="8">
<decoded_as>json</decoded_as>
<field name="url">\.*graphql\.*</field>
<regex>errors</regex>
<regex>[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,}</regex>
<description>CVE-2023-26051 - Potential Saleor GraphQL API information disclosure via error message containing email address</description>
<group>saleor, information_disclosure, cve_2023_26051,</group>
<mitre>
<id>T1552</id>
</mitre>
<info type="cve">CVE-2023-26051</info>
</rule>
Mitigation & Patch Guidance
Patch Confidence: 3/4 (LIKELY). Two independent sources (the CNA and OSV) confirm that a fix for this issue has been developed. The specific patched version number was not disclosed in the provided data.
Immediate Mitigations:
- Restrict staff access: Minimize the number of staff accounts, enforce strong MFA, and audit staff account activity. Since exploitation requires staff-level authentication, reducing the staff attack surface is the highest-priority short-term control.
- Disable verbose error messages: If the Saleor deployment environment allows configuration of exception verbosity, ensure Django
DEBUG=Falseand that production error reporting minimizes exception content. - Web Application Firewall (WAF) filtering: Deploy WAF rules that inspect GraphQL responses for email-address patterns within
errorsblocks and block or alert on such responses (see detection rules above). - Network segmentation: Ensure Saleor API endpoints are not directly reachable from untrusted networks; place them behind a reverse proxy with appropriate access controls.
Patch/Upgrade Steps:
- Monitor the Saleor GitHub repository and official security advisories for the patch release corresponding to CVE-2023-26051.
- When available, upgrade to the patched version immediately.
- If running a fork or custom deployment based on the affected commits (
6c0861e12fcf01a00b6290391d1907b60c4d7b18,5763cb1ad22b84e29a270b9b0b365f32074b753d,f5b8251d0c9fc2e56b877c2c32eba297af98fb1a), cherry-pick the upstream fix or rebase onto the latest stable branch. - After patching, re-run a validation suite that intentionally triggers the previously disclosed error conditions to confirm the fix resolves the information disclosure.
Long-Term Hardening:
- Centralized exception handling: Ensure all GraphQL resolvers utilize a centralized error handler that sanitizes messages before they reach the client.
- Logging hygiene: Configure application logs to capture full exception details server-side while stripping sensitive fields from client-facing responses.
- Security testing: Integrate checks for CWE-209 (generation of error message containing sensitive info) into the CI/CD pipeline — fuzz GraphQL endpoints and assert that no email addresses or PII appear in error responses.
- Credential management: Implement periodic staff credential rotation and enforce least-privilege roles across Saleor staff accounts.
References
- NVD Entry: https://nvd.nist.gov/vuln/detail/CVE-2023-26051 — Official NVD description of the vulnerability.
- Saleor GitHub Repository: https://github.com/saleor/saleor — Source repository where the fix is expected to be published; monitor for security advisory releases.
- OSV Database: https://osv.dev/vulnerability/CVE-2023-26051 — Open Source Vulnerability database entry confirming patch availability and affected commit hashes.
- MITRE ATT&CK: https://attack.mitre.org/techniques/T1552/ — Reference for the Unsecured Credentials tactic associated with credential/information disclosure.
- CWE-209: https://cwe.mitre.org/data/definitions/209.html — Common Weakness Enumeration entry for generation of error message containing sensitive information.
Threat Actor Campaigns / Exploit-in-the-Wild Evidence: No known threat actor campaigns or in-the-wild exploitation activity have been reported for CVE-2023-26051 as of this report. The vulnerability is not listed on the CISA Known Exploited Vulnerabilities (KEV) catalog. EPSS scoring (0.00817) places it in the 53.9th percentile, indicating speculative but not active exploitation. Monitoring should continue as public PoC availability could increase attack surface once details emerge.
What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.