Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessReach public WPGraphQL endpoint
-
ExploitSend distinct queries with SHA-256 queryId documents
-
ExecutionBatch and repeat to persist unlimited rows
-
ImpactGrow wp_posts unbounded, degrade database performance
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V2 - Validation and Business Logic Resource allocation limits
MITRE ATT&CK
1 technique across 1 tactic: Impact The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | No special conditions beyond a reachable WPGraphQL GraphQL endpoint running Smart Cache 2.3.2 or earlier in its default configuration: Automatic Persisted Query saving defaults to 'anyone, including logged-out visitors', and garbage collection is opt-in, defaults to off, and prunes by age rather than by count - so on a default install nothing bounds or reclaims persisted documents. Limiting factors that reduce realistic risk: impact is confined to database bloat and query slowdown (no data exposure, no code execution, no scope change); versions 2.3.3+ cap documents at 5000 by default; and administrators who set the new mode to 'logged in users only' or 'nobody' remove the anonymous write path (note that on WPGraphQL core 2.5.4+, 'logged in users only' requires token auth such as JWT/application password or an X-WP-Nonce, not a bare browser cookie). The advisory states there is no workaround that keeps the endpoint open - enabling age-based garbage collection slows but does not bound growth - so updating to 2.3.3 is the only complete fix. |
| Impact | Signals are consistent and point to a genuine but bounded availability issue rather than a top-tier emergency. The CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:N) confirms the write path is trivially reachable - remote, low-complexity, unauthenticated, no user interaction - which matches the advisory's statement that Automatic Persisted Queries are open to anyone who can reach the endpoint in the default configuration. However, impact is limited to VA:L with VC:N/VI:N/VA (no confidentiality or integrity effect and no scope change): the advisory explicitly states no data is exposed and a caller cannot run anything they could not already run, so this is uncontrolled resource consumption (CWE-770) that bloats wp_posts and degrades database performance, not code execution or a full service outage. The vuln.today Decision label is 'this_month' (not act_now/emergency), aligning with the 6.9 medium base score. Key decision data is MISSING: no EPSS exploitation-probability score is provided, this CVE is NOT listed in CISA KEV, and no verified public exploit code is present in the inputs - only a VulnCheck advisory reference and the reporter's own measurement (~100 documents in 1.6 seconds from one thread). Net: prioritize patching within a normal cycle (confirmed fix exists), treating it as an easy-to-trigger, moderate-impact DoS/resource-exhaustion flaw rather than a critical breach risk. The ease of triggering (PR:N/AC:L) is the main argument for not deferring indefinitely, especially on managed hosts with hard database-size caps. |
| Exploit ScenarioDerived | An unauthenticated remote attacker repeatedly POSTs distinct GraphQL queries, each paired with its SHA-256 queryId, to the public WPGraphQL endpoint via the Automatic Persisted Query handler, optionally batching many operations into a single request so each operation persists its own wp_posts row. Because garbage collection is off by default and prunes by age rather than count, nothing reclaims these rows, so the table grows without bound - the reporter measured roughly 100 documents in 1.6 seconds from a single thread - inflating database storage and slowing any query scoped to wp_posts. No public exploit code is identified at time of analysis, though the mechanism is simple and documented in the vendor advisory. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 30, 2026
Unbounded automatic persisted-query storage in WPGraphQL Smart Cache 2.3.2 and earlier lets unauthenticated remote attackers inflate the WordPress wp_posts table by sending an endless stream of distinct query documents through the Automatic Persisted Query handler, degrading database queries and pushing managed-host storage toward hard caps. The write path is open to anyone who can reach the GraphQL endpoint, batched operations register one document per operation (the reporter measured roughly 100 documents in 1.6 seconds from a single thread), and default installs never reclaim them because garbage collection is opt-in, off by default, and prunes by age rather than by count. No data is exposed and nothing executes that the caller could not already run; the vendor fix in 2.3.3 caps automatic documents at 5000 by default, and no public exploit identified at time of analysis.
RemediationAI
Vendor-released patch: upgrade WPGraphQL Smart Cache to 2.3.3 (Composer composer/wp-graphql/wp-graphql-smart-cache 2.3.3 or wordpress/wpgraphql-smart-cache 2.3.3; release tag wp-graphql-smart-cache/v2.3.3), which enforces a default ceiling of 5000 automatically saved documents evicted oldest-first at save time, so the table converges on the limit instead of growing without end. Sites already holding more automatic documents than the limit shrink back to it as traffic arrives; to reclaim space immediately, use the audit panel under GraphQL > Settings > Saved Queries or the wp graphql smart-cache documents audit and purge CLI commands. Additional hardening available in 2.3.3: set "Who can save new queries automatically" to "logged in users only" or "nobody" - noting that on WPGraphQL core 2.5.4 and later a request carrying only a login cookie is treated as logged out unless it also sends a nonce, so "logged in users only" in practice means clients using a JWT, application password or X-WP-Nonce header, and that browser sessions will stop saving documents; use the graphql_smart_cache_can_auto_persist_document filter to admit a known first-party client by API key, and graphql_smart_cache_automatic_document_limit to raise the cap deliberately. The vendor states there is no workaround that keeps the endpoint open: enabling age-based garbage collection slows growth but does not bound it, so updating to 2.3.3 is the only complete fix.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
WPGraphQL Smart Cache implements Automatic Persisted Queries (APQ) for the WPGraphQL GraphQL API: a client sends a query once together with its SHA-256 hash (the queryId) and thereafter references only that hash, with the plugin storing each registered query as a graphqlDocument post inside wp_posts - the same table that holds every page, post and attachment on the site. The flaw is CWE-770 (Allocation of Resources Without Limits or Throttling): the save handler had no ceiling on how many automatic documents could be registered, and the protocol's write path is intentionally reachable by any unauthenticated caller who can reach the endpoint. Garbage collection exists but is opt-in, defaults to off, and prunes by document age rather than by count, so on a default install nothing bounded or reclaimed the rows. Documents are still verified against their own hash (established by GHSA-r844-6gqh-59qj), so this is purely an availability and storage-consumption issue - no query can be substituted and no data is read or written beyond the document rows themselves. Version 2.3.3 introduces an enforced count limit applied at save time (default AUTO_PERSIST_DEFAULT_LIMIT = 5000) that evicts the oldest automatic documents as new ones arrive, leaving granted, denied and grouped documents untouched because they are curated rather than automatic; eviction is safe because a client that presents an unknown ID re-sends the full query, which is re-registered under its verified hash, the protocol's own fallback. 2.3.3 also adds a mode setting restricting who may auto-save (public, authenticated, or off) plus the graphql_smart_cache_can_auto_persist_document and graphql_smart_cache_automatic_document_limit filters for cases the settings cannot express.
Know when Wpgraphql gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N
Remote, low-complexity, unauthenticated write path open to anyone by default (AV:N/AC:L/PR:N/UI:N); no confidentiality or integrity effect, only partial availability degradation via unbounded table growth, so C:N/I:N/A:L.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
DescriptionCVE.org
WPGraphQL Smart Cache before 2.3.3 contains an uncontrolled resource consumption vulnerability that allows unauthenticated attackers to persist unlimited query documents via the Automatic Persisted Query handler. Attackers can send distinct queries with matching SHA-256 queryId values, including batched operations, to grow the wp_posts table without bound and degrade database performance.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
The WPGraphQL 0.2.3 plugin for WordPress allows remote attackers to register a new user with admin privileges, whenever
An issue was discovered in the WPGraphQL 0.2.3 plugin for WordPress. Rated critical severity (CVSS 9.1), this vulnerabil
WordPress Plugin WPGraphQL 1.3.5 contains a denial of service vulnerability that allows unauthenticated attackers to exh
The createComment mutation in the WPGraphQL 0.2.3 plugin for WordPress allows unauthenticated users to post comments on
Unauthenticated SQL injection in the WPGraphQL WordPress plugin versions prior to 2.11.1 allows remote attackers to inje
Unauthenticated callers can create comments on WordPress content they are not allowed to see through the createComment G
Unauthenticated email flooding in WPGraphQL 2.24.0 and earlier lets a remote attacker send roughly a thousand password r
WPGraphQL 2.24.0 and earlier leak object existence through four GraphQL write mutations - deleteMediaItem, updateMediaIt
Cross-site request forgery (CSRF) in WPGraphQL plugin versions up to 2.5.3 allows unauthenticated attackers to perform u
Unauthenticated retrieval of embedded sensitive data is possible on WordPress sites running the WPGraphQL plugin through
Server-Side Request Forgery (SSRF) vulnerability in WPGraphQL.14.5. Rated medium severity (CVSS 4.4), this vulnerability
EUVD-2026-114104
GHSA-v637-6536-jqxc
NVD
CVE.org
EPSS
Exploit-DB