Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessIdentify site running Extendify ≤3.1.6
-
DeliverySend unauthenticated POST/PUT/PATCH to /wp/v2/global-styles
-
ExploitInject script via styles.blocks Block Type Key
-
ExecutionregisterIncoming() stores payload pre-permission-check
-
PersistVictim loads injected page
-
ImpactScript executes in victim browser session
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Output encoding, context-aware escaping
MITRE ATT&CK
2 techniques across 2 tactics: Initial Access, Execution The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | No special configuration is required beyond running a vulnerable Extendify version (≤3.1.6) on a WordPress site with the REST API reachable (the default). Exploitation needs only an unauthenticated HTTP POST, PUT, or PATCH to a /wp/v2/global-styles route; the registerIncoming() handler hooked on rest_request_before_callbacks runs before the route's permission_callback, so no authentication or user interaction by the attacker is required to store the payload. The limiting factor is the impact side: being stored XSS, a victim (visitor or admin) must subsequently load the injected page for the script to execute, and the impact is scoped to browser-side script execution (C:L/I:L) rather than direct server compromise. Upgrading to 3.2.0 removes the condition. |
| Impact | This is a genuinely notable issue despite lacking exploitation telemetry. The CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N, 7.2) is corroborated by the description's root cause: registerIncoming() is hooked on rest_request_before_callbacks, which fires BEFORE WordPress evaluates the route's permission_callback, so ANY unauthenticated POST/PUT/PATCH to a /wp/v2/global-styles route reaches the vulnerable sink. That makes PR:N and AC:L credible rather than optimistic - there is no authentication or special complexity gate, which is the key differentiator from the many Contributor+ stored-XSS plugin bugs. S:C and the C:L/I:L (not H) limited impacts are consistent with stored XSS executing in the browser of any user who views an injected page. No EPSS score, no CISA KEV listing, and no public POC were provided, so there is no evidence of active or automated exploitation yet - treat exploitation status as 'no public exploit identified at time of analysis.' However, the combination of unauthenticated reach, a plugin with a broad install base often bundled by hosts, and an available patch (3.2.0) means this should be prioritized for patching above a typical authenticated/UI-gated XSS. No signals conflict here; the main gap is the absence of EPSS/POC data rather than contradictory data. |
| Exploit ScenarioDerived | An unauthenticated attacker sends a crafted POST, PUT, or PATCH request to a /wp/v2/global-styles REST route carrying a malicious script in the 'styles.blocks' Block Type Key. Because registerIncoming() processes the request before the permission check runs, the payload is stored without authentication; it then executes in the browser of any visitor or administrator who loads an affected page. No public exploit code was identified at time of analysis, but the pre-permission hook makes the code path trivially reachable. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 01, 2026
Unauthenticated stored cross-site scripting in the Extendify plugin for WordPress (all versions up to and including 3.1.6) allows any remote attacker to plant arbitrary JavaScript into pages via the 'styles.blocks' Block Type Key, with no authentication or victim interaction required at injection time. The flaw exists because the plugin's registerIncoming() handler is bound to rest_request_before_callbacks and therefore executes before WordPress evaluates the target route's permission_callback, so a plain POST, PUT, or PATCH to a /wp/v2/global-styles endpoint reaches the vulnerable sanitization path on a default site with the REST API reachable. Impact is browser-side script execution when a victim later loads the injected page, not direct server compromise; no public exploit code has been identified at time of analysis and there is no confirmed active exploitation (CISA KEV) for this CVE. Upgrading to version 3.2.0 removes the condition.
RemediationAI
Vendor-released patch: upgrade the Extendify plugin to version 3.2.0, which is the release that contains the fix (see the changelog diff between tags 3.1.6 and 3.2.0 at https://plugins.trac.wordpress.org/changeset?reponame=&new=3688833%40extendify%2Ftags%2F3.2.0&old=3669317%40extendify%2Ftags%2F3.1.6 and the code change at https://plugins.trac.wordpress.org/changeset/3688833/extendify/trunk/app/Shared/Services/BlockStyleVariations.php); because the plugin auto-updates through the WordPress dashboard, sites with automatic updates enabled should receive it without manual action. If upgrading cannot be done immediately, the most direct compensating control is to deactivate the Extendify plugin entirely, which removes the rest_request_before_callbacks handler and the vulnerable /wp/v2/global-styles code path at the cost of losing the plugin's block-style and template-library features. A blunt but effective alternative is to block unauthenticated POST, PUT, and PATCH requests to /wp/v2/global-styles at the reverse proxy, WAF, or web server level (or require authentication for the WordPress REST API via a REST-API authentication filter), accepting the trade-off that legitimate unauthenticated REST clients and some block-editor flows may break. Applying a WAF rule that rejects request bodies containing script or event-handler markup in the styles.blocks parameter can reduce exposure but is bypassable and should be treated as temporary. Also consider tightening the permission model so plugin handlers do not run before permission_callback, and monitoring for unexpected content in global styles records; note that because this is stored XSS, the script only fires when a victim loads the injected page, so cleaning up any already-persisted malicious style payloads after patching is advisable.
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
The affected component is the Extendify WordPress plugin's block-style variation handling, specifically BlockStyleVariations.php (the cveorg references point to lines 29, 37, 62, and 75 of the 3.1.6 tag) and its binding in bootstrap.php (line 112). Extendify registers registerIncoming() on the WordPress hook rest_request_before_callbacks, which fires before the REST controller's permission_callback is evaluated. Because the plugin processes the incoming 'styles.blocks' Block Type Key payload at that early stage, an unauthenticated request to a /wp/v2/global-styles route - a route that would normally enforce its own capability checks - is routed through plugin code that neither sanitizes input on the way in nor escapes output on the way out. That is the classic CWE-79 stored cross-site scripting pattern: attacker-controlled markup is persisted and later rendered into a page without contextual escaping. The CVSS 3.1 vector CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N reflects network exploitability, no privileges, no attacker-side user interaction, and a scope change (S:C) - the script escapes the plugin's own data context and executes in the context of the browsing victim, including privileged users viewing the site, while confidentiality and integrity impacts are limited and availability is unaffected. The CPE cpe:2.3:a:extendify:extendify:* confirms the entire unfixed version history of the plugin is in scope.
Know when Wordpress Plugin 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
AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N
Unauthenticated network request reaches the sink before the permission check (PR:N, AC:L); stored XSS crosses to the victim's browser (S:C) with limited C/I and no availability impact.
Primary rating from Vendor (Wordfence).
CVSS VectorVendor: Wordfence
DescriptionCVE.org
The Extendify plugin for WordPress is vulnerable to Stored Cross-Site Scripting via 'styles.blocks' Block Type Key in all versions up to, and including, 3.1.6 due to insufficient input sanitization and output escaping. This makes it possible for unauthenticated attackers to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page. This is possible because registerIncoming() is hooked on rest_request_before_callbacks and runs before WordPress evaluates the route's permission_callback, meaning any unauthenticated POST, PUT, or PATCH request to a /wp/v2/global-styles route can trigger the vulnerable code path.
Executive ViewAI
A flaw in the Extendify plugin for WordPress, affecting all versions up to and including 3.1.6, allows an outside party to plant malicious JavaScript into a site's pages that then executes in the browsers of employees, customers, and other visitors who later load those pages. Because the vulnerable code path is reachable through the standard WordPress REST API on a default site configuration, any organization hosting the affected plugin on an internet-facing site should assume its published content and visitor sessions may be at risk. The consequence is browser-side compromise rather than direct server takeover, but it can enable credential theft, fraudulent content, or visitor redirection, and the only stated resolution is upgrading the plugin to 3.2.0.
No vendor-released patch identified at time of analysis for versions 3.1.6 and earlier; the advisory states upgrading to Extendify 3.2.0 removes the condition. Interim mitigations: deactivate the Extendify plugin until 3.2.0 can be deployed; block or restrict the /wp/v2/global-styles REST route at the WAF or reverse proxy; restrict the WordPress REST API to only the routes each site actually requires; audit and clean existing global styles and page content for injected script, particularly in the styles.blocks block type key; deploy Content-Security-Policy headers to limit script execution; and monitor logs for writes to /wp/v2/global-styles.
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
Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.
More in Wordpress Plugin
View allThe Backup Migration plugin for WordPress is vulnerable to Remote Code Execution in all versions up to, and including, 1
The Hash Form - Drag & Drop Form Builder plugin for WordPress is vulnerable to arbitrary file uploads due to missing fil
Authentication bypass in the LiteSpeed Cache WordPress plugin (versions prior to 6.5.0.1) allows unauthenticated remote
The Simple File List plugin for WordPress through version 4.2.2 contains an unauthenticated remote code execution vulner
The SureTriggers WordPress plugin through version 1.0.82 contains a privilege escalation vulnerability that allows unaut
The Ninja Forms plugin before 2.9.42.1 for WordPress allows remote attackers to conduct PHP object injection attacks via
The Business Directory Plugin - Easy Listing Directories for WordPress plugin for WordPress is vulnerable to time-based
SQL injection in the NotificationX WordPress plugin (versions up to and including 2.8.2) allows unauthenticated remote a
The POST SMTP Mailer - Email log, Delivery Failure Notifications and Best Mail SMTP for WordPress plugin for WordPress i
The MasterStudy LMS WordPress Plugin - for Online Courses and Education plugin for WordPress is vulnerable to union base
The Email Subscribers by Icegram Express plugin for WordPress is vulnerable to SQL Injection via the ‘hash’ parameter in
Remote code execution in the WP Query Console WordPress plugin (versions up to and including 1.0) by Ajit Bohra allows u
EUVD-2026-90500
GHSA-xx9f-33qf-3g5j
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB