Skip to main content

WPGraphQL Smart Cache EUVDEUVD-2026-114104

| CVE-2026-119699 MEDIUM
Allocation of Resources Without Limits or Throttling (CWE-770)
2026-10-30 VulnCheck GHSA-v637-6536-jqxc
6.9
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Reach public WPGraphQL endpoint
  2. Exploit
    Send distinct queries with SHA-256 queryId documents
  3. Execution
    Batch and repeat to persist unlimited rows
  4. Impact
    Grow 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.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.5% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

WPGraphQL Smart Cache 0 <2.3.3

Affected Packages

euvd wpgraphql_smart_cache fix: 2.3.3

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

Vendor (VulnCheck) PRIMARY 6.9 MEDIUM
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
vuln.today AI 5.3 MEDIUM

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.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N

Primary rating from Vendor (VulnCheck).

CVSS VectorVendor: VulnCheck

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
None
Vulnerable system: Availability
Low
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

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

EPSS Score
0.5%
Top 61% exploitable
Prevalence
Medium
companion caching plugin for the popular WPGraphQL WordPress ecosystem, not core
Data Quality
4 sources
Confidence: Medium

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.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.5%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
Yes
Human Impact· derived
Medium

Priority Score

34
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +34
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.

CVE-2019-9879 CRITICAL POC
9.8 Jun 10

The WPGraphQL 0.2.3 plugin for WordPress allows remote attackers to register a new user with admin privileges, whenever

CVE-2019-9880 CRITICAL POC
9.1 Jun 10

An issue was discovered in the WPGraphQL 0.2.3 plugin for WordPress. Rated critical severity (CVSS 9.1), this vulnerabil

CVE-2021-47959 HIGH POC
8.7 May 15

WordPress Plugin WPGraphQL 1.3.5 contains a denial of service vulnerability that allows unauthenticated attackers to exh

CVE-2019-9881 MEDIUM POC
5.3 Jun 10

The createComment mutation in the WPGraphQL 0.2.3 plugin for WordPress allows unauthenticated users to post comments on

CVE-2026-40762 HIGH
7.5 Jun 15

Unauthenticated SQL injection in the WPGraphQL WordPress plugin versions prior to 2.11.1 allows remote attackers to inje

CVE-2026-119702 MEDIUM
6.9 Oct 30

Unauthenticated callers can create comments on WordPress content they are not allowed to see through the createComment G

CVE-2026-119701 MEDIUM
6.9 Oct 30

Unauthenticated email flooding in WPGraphQL 2.24.0 and earlier lets a remote attacker send roughly a thousand password r

CVE-2026-119700 MEDIUM
6.9 Oct 30

WPGraphQL 2.24.0 and earlier leak object existence through four GraphQL write mutations - deleteMediaItem, updateMediaIt

CVE-2025-68604 MEDIUM
5.4 May 07

Cross-site request forgery (CSRF) in WPGraphQL plugin versions up to 2.5.3 allows unauthenticated attackers to perform u

CVE-2026-109703 MEDIUM
5.3 Oct 13

Unauthenticated retrieval of embedded sensitive data is possible on WordPress sites running the WPGraphQL plugin through

CVE-2023-23684 MEDIUM
4.4 Nov 13

Server-Side Request Forgery (SSRF) vulnerability in WPGraphQL.14.5. Rated medium severity (CVSS 4.4), this vulnerability

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy