Skip to main content

Extendify WordPress Plugin EUVDEUVD-2026-90500

| CVE-2026-85679 HIGH
Cross-site Scripting (XSS) (CWE-79)
2026-10-01 Wordfence GHSA-xx9f-33qf-3g5j
7.2
CVSS 3.1 · Vendor: Wordfence
View

Attack ChainAIDerived

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

  1. Access
    Identify site running Extendify ≤3.1.6
  2. Delivery
    Send unauthenticated POST/PUT/PATCH to /wp/v2/global-styles
  3. Exploit
    Inject script via styles.blocks Block Type Key
  4. Execution
    registerIncoming() stores payload pre-permission-check
  5. Persist
    Victim loads injected page
  6. Impact
    Script 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.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
No patch listed yet 0.3% exploitation probability (EPSS)

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

Alert me

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

Extendify 0 ≤3.1.6

Affected Packages

euvd extendify no fix

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

Vendor (Wordfence) PRIMARY 7.2 HIGH
AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N
vuln.today AI 7.2 HIGH

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.

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

Primary rating from Vendor (Wordfence).

CVSS VectorVendor: Wordfence

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Changed
Confidentiality
Low
Integrity
Low
Availability
None

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

Why It Matters

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.

Business Impact: High
Compensating Controls

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

EPSS Score
0.3%
Top 79% exploitable
Prevalence
High
widely-deployed WordPress plugin, frequently bundled with host onboarding, large install base
Data Quality
5 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 HIGH
CISA KEV No
Public POC No
EPSS 0.3%
Patch available No
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.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
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact
High
Technical Impact
Partial

Priority Score

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

Attack Technique

Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.

CVE-2023-6553 CRITICAL POC
9.8 Dec 15

The Backup Migration plugin for WordPress is vulnerable to Remote Code Execution in all versions up to, and including, 1

CVE-2024-5084 CRITICAL POC
9.8 May 23

The Hash Form - Drag & Drop Form Builder plugin for WordPress is vulnerable to arbitrary file uploads due to missing fil

CVE-2024-44000 CRITICAL POC
9.8 Oct 20

Authentication bypass in the LiteSpeed Cache WordPress plugin (versions prior to 6.5.0.1) allows unauthenticated remote

CVE-2020-36847 CRITICAL POC
9.8 Jul 12

The Simple File List plugin for WordPress through version 4.2.2 contains an unauthenticated remote code execution vulner

CVE-2025-27007 CRITICAL POC
9.8 May 01

The SureTriggers WordPress plugin through version 1.0.82 contains a privilege escalation vulnerability that allows unaut

CVE-2016-1209 CRITICAL POC
9.8 May 14

The Ninja Forms plugin before 2.9.42.1 for WordPress allows remote attackers to conduct PHP object injection attacks via

CVE-2024-4443 CRITICAL POC
9.8 May 22

The Business Directory Plugin - Easy Listing Directories for WordPress plugin for WordPress is vulnerable to time-based

CVE-2024-1698 CRITICAL POC
9.8 Feb 27

SQL injection in the NotificationX WordPress plugin (versions up to and including 2.8.2) allows unauthenticated remote a

CVE-2023-6875 CRITICAL POC
9.8 Jan 11

The POST SMTP Mailer - Email log, Delivery Failure Notifications and Best Mail SMTP for WordPress plugin for WordPress i

CVE-2024-1512 CRITICAL POC
9.8 Feb 17

The MasterStudy LMS WordPress Plugin - for Online Courses and Education plugin for WordPress is vulnerable to union base

CVE-2024-4295 CRITICAL POC
9.8 Jun 05

The Email Subscribers by Icegram Express plugin for WordPress is vulnerable to SQL Injection via the ‘hash’ parameter in

CVE-2024-50498 CRITICAL POC
10.0 Oct 28

Remote code execution in the WP Query Console WordPress plugin (versions up to and including 1.0) by Ajit Bohra allows u

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