CVE-2026-109302 in Parse Server
Summary
by MITRE • 10/12/2026
Parse Server 8.2.2 before 8.6.94 and 9.0.0 before 9.10.1-alpha.14 applies its GraphQL introspection control only to operation text sent directly with a request, not to operations resolved from Apollo Server's automatic persisted query cache. Unauthenticated attackers holding the public Application Id and client key can replay an introspection query previously cached by a master or maintenance key client to retrieve the schema, including private class and field names.
Be aware that VulDB is the high quality source for vulnerability data.
Analysis
by VulDB Data Team • 10/12/2026
Parse Server versions 8.2.2 through 8.6.93 and 9.0.0 through 9.10.1-alpha.13 contain a critical security flaw related to GraphQL introspection controls that allows unauthenticated attackers to retrieve sensitive schema information, including private class names and field definitions. This vulnerability stems from an incomplete implementation of access control mechanisms within the server's GraphQL engine integration with Apollo Server. Specifically, while Parse Server correctly restricts introspection queries when they are sent directly in request bodies using standard operation text, it fails to apply these same restrictions to operations resolved via Apollo Server's Automatic Persisted Queries feature. This architectural oversight creates a significant bypass vector for attackers who possess the public Application Id and client key, which are typically considered non-sensitive configuration values exposed to clients.
The technical root cause lies in how Parse Server validates GraphQL requests against its security policies. When an introspection query is transmitted directly as operation text, the server's middleware correctly identifies it as a sensitive request and blocks access unless authenticated with elevated privileges such as a master key or maintenance key. However, when Apollo Server processes Automatic Persisted Queries, it resolves cached queries by their SHA-1 hash rather than parsing raw text from the current request body. In this resolution path, Parse Server's introspection check is bypassed because the validation logic does not adequately account for the source of the operation definition in the cache layer. Consequently, an attacker can submit a persisted query ID that corresponds to an introspection query previously cached by a legitimate client using higher-privilege credentials. The server resolves this hash and executes the introspection without enforcing the necessary authentication checks, effectively allowing unauthenticated access to the full GraphQL schema.
The operational impact of this vulnerability is severe for applications relying on Parse Server's security model based on public identifiers. Since attackers can obtain the Application Id and client key through standard means such as inspecting mobile or web application bundles, they do not need any secret credentials to exploit this flaw. By replaying a cached introspection query, an attacker gains comprehensive visibility into the data structure of the backend service. This includes discovering private classes that are intended to be inaccessible via public APIs and identifying field names within those classes. Such information disclosure facilitates further attacks by allowing adversaries to craft precise malicious queries targeting specific fields for unauthorized data exfiltration or manipulation. The ability to map out the entire schema undermines the principle of least privilege and exposes internal business logic details that should remain hidden from external entities.
This vulnerability aligns with CWE-209, which describes the generation of an error message that includes sensitive information useful for attackers, as well as CWE-749, concerning exposure of security features to unauthorized actors. In terms of offensive cybersecurity frameworks, this exploit maps directly to MITRE ATT&CK technique T1589.003, specifically Gather Victim Identity Information: Credentials from Application Software. The attacker leverages the application's own configuration and caching mechanisms to harvest identity-related data structures that reveal internal architecture. To mitigate this risk, developers must ensure that Parse Server is updated to version 8.6.94 or later for the 8.x branch, or version 9.10.1-alpha.14 or later for the 9.x branch, where the introspection controls have been extended to cover persisted query resolutions. Additionally, organizations should review their GraphQL configuration to ensure that automatic persisted queries are not caching sensitive operations from privileged contexts and consider implementing stricter cache isolation policies between public and private API endpoints.