Skip to main content

DesignSetGo CVE-2026-111068

| EUVDEUVD-2026-111740 MEDIUM
Cross-site Scripting (XSS) (CWE-79)
2026-10-28 Wordfence GHSA-pff7-36wv-mf7h
4.4
CVSS 3.1 · Vendor: Wordfence
View

Attack ChainAIDerived

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

  1. Access
    Authenticate as contributor
  2. Delivery
    Inject payload into tagName block delimiter comment
  3. Exploit
    Administrator runs block-conversion migration
  4. Execution
    Payload promoted into live post_content HTML
  5. Impact
    Script executes in visitor browsers

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

Requires an authenticated contributor-level (or higher) WordPress account on a site running DesignSetGo ≤2.11.0, used to store a malicious 'tagName' value inside a Section/Row/Grid block delimiter comment (the value evades kses because it contains no '<'). Crucially, the payload is inert until an administrator performs a specific out-of-band action: deactivating the plugin and running the 'Scan & Convert Blocks' block-conversion migration, which triggers the vulnerable build_group_block() and writes the stored tagName into live post_content. The attacker cannot trigger execution on their own. Limiting factors: contributor authentication is mandatory, the migration is a non-default administrative step entirely outside attacker control, and exploitation only lands if/when that migration is run - all of which sharply narrow real-world exploitability.

Impact

This is a genuinely medium/low-priority issue despite being a network-vector stored XSS. The CVSS 3.1 vector (AV:N/AC:H/PR:L/UI:R/S:C/C:L/I:L/A:N, base 4.4) tells a consistent, de-escalating story: exploitation needs an authenticated contributor-level account (PR:L), carries high attack complexity (AC:H), and requires user interaction (UI:R). The description clarifies why complexity and interaction are high - the attacker cannot self-trigger the payload; an administrator must run the plugin's 'Scan & Convert Blocks' migration during deactivation to promote the dormant payload into live HTML. That multi-party, non-attacker-controlled precondition is the dominant risk limiter. The vuln.today decision label is 'this_month' (not act_now/emergency). No EPSS score, no CISA KEV listing, and no confirmed public exploit are present in the input, so there is no public exploit identified at time of analysis and no quantitative exploitation-probability signal to weigh - this gap should be noted rather than assumed benign. The signals do not conflict: a low-to-moderate CVSS, a routine priority label, and the absence of exploitation evidence all point the same way. This is a real but low-urgency finding, not a high-CVSS/low-real-risk mismatch.

Exploit ScenarioDerived

A contributor-level user crafts a DesignSetGo Section, Row, or Grid block and sets a malicious 'tagName' (e.g. an element name carrying an onerror handler) that lives in the block delimiter comment, where WordPress kses does not treat it as markup. The payload stays dormant until an administrator deactivates the plugin and runs the 'Scan & Convert Blocks' migration, which invokes build_group_block() and writes the attacker's value directly into live post_content, executing the script in the browser of anyone who then views the page. No public exploit is identified in the input; the only code references are the vendor fix and source.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
No patch listed yet 0.2% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Oct 28, 2026

Stored cross-site scripting in the DesignSetGo WordPress plugin through version 2.11.0 allows a contributor-level (or higher) account to stash an arbitrary HTML element name in the free-form 'tagName' attribute of a Section, Row or Grid block delimiter comment, which later becomes live markup. The payload is dormant by design: it only executes if an administrator deactivates the plugin and runs the 'Scan & Convert Blocks' migration, which invokes build_group_block() and carries the stored value into rendered post_content HTML. The attacker cannot trigger execution themselves, so exploitation requires an authenticated contributor plus a specific, non-default administrative action; no public exploit has been identified at time of analysis and the vulnerability has not been confirmed actively exploited (not in CISA KEV).

RemediationAI

Vendor fix: the correction is committed upstream in PR #659 (https://github.com/jnealey-godaddy/designsetgo/pull/659) and landed in the plugin repository as changeset 3762066 (https://plugins.trac.wordpress.org/changeset/3762066/designsetgo/trunk/includes/admin/class-block-migrator.php); it introduces designsetgo_sanitize_container_tag() as an allowlist of div, section, article, aside, header, footer and main, applies it to every serializer wrapper and to build_group_attrs()/build_group_block(), and adds the corresponding enum to block.json. No tagged release number containing this fix is stated in the available data, so confirm the installed version includes the helper before considering the site patched. Until then, the highest-value control is to restrict who can post Section/Row/Grid blocks - remove or downgrade contributor accounts on sites running an affected version, or gate authoring behind an editorial review role - at the cost of editorial throughput. Second, postpone the deactivation 'Scan & Convert Blocks' migration on affected installs until the patched build is in place, and if migration must run, first search post_content for block delimiter attributes containing tagName values outside the allowlist; note that this only prevents promotion of the payload, it does not remove the stored attribute. Third, review existing posts authored by contributors for hand-edited block comments, since the fix prevents new injection and neutralizes the value during migration but does not itself rewrite previously stored comments in existing content.

Affected VersionsENISA

DesignSetGo 0 ≤2.11.0

Affected Packages

euvd designsetgo 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

DesignSetGo's Section, Row and Grid blocks expose an 'HTML Element' setting stored as a free-form tagName string inside the block delimiter comment (the serialized block attributes), and the plugin's serializer classes (class-section-serializer.php, class-row-serializer.php, class-grid-serializer.php) build the opening wrapper tag by concatenating '<' with that stored value. The design flaw is a CWE-79 sanitization gap of the allowlist-vs-denylist kind: the pre-patch Grid serializer only ran a character filter (preg_replace('/[^a-z0-9]/i', '', ...)), and the Row/Section serializers and the admin migrator used the raw attribute entirely, so alphanumeric-only values such as script or iframe survived filtering. Because the value contains no '<', WordPress's kses filtering never treats it as markup, which is why the payload passes content sanitization at save time and only materializes when the plugin itself emits the tag. The decisive path is the admin block migrator (includes/admin/class-block-migrator.php, build_group_block()/build_group_attrs()): during the 'Scan & Convert Blocks' step of deactivation it promotes the stored tagName into a core/group block's saved content, converting the dormant comment attribute into live HTML in post_content. The upstream fix (PR #659, changeset 3762066) replaces the character filter and raw concatenations with a single allowlist helper, designsetgo_sanitize_container_tag(), restricted to div, section, article, aside, header, footer and main, adds matching enum constraints to the grid and row block.json/deprecated-layout-settings schemas, and drops out-of-list tagName values during migration so core/group falls back to its default <div>.

Know when Designsetgo 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 4.4 MEDIUM
AV:N/AC:H/PR:L/UI:R/S:C/C:L/I:L/A:N
vuln.today AI 4.4 MEDIUM

Contributor access gives PR:L; the required admin-run migration is outside attacker control, forcing AC:H and UI:R; stored XSS runs in other users' context, so S:C with C:L/I:L and no availability impact.

3.1 AV:N/AC:H/PR:L/UI:R/S:C/C:L/I:L/A:N
4.0 AV:N/AC:H/AT:P/PR:L/UI:A/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
High
Privileges Required
Low
User Interaction
Required
Scope
Changed
Confidentiality
Low
Integrity
Low
Availability
None

DescriptionCVE.org

The DesignSetGo plugin for WordPress is vulnerable to Stored Cross-Site Scripting via the 'tagName' parameter in all versions up to, and including, 2.11.0 due to insufficient input sanitization and output escaping. This makes it possible for authenticated attackers, with contributor-level access and above, to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page. Successful exploitation requires an administrator to run the plugin's block-conversion migration ("Scan & Convert Blocks" during deactivation), which triggers the vulnerable build_group_block() function and promotes the dormant payload from a block delimiter comment into live post_content HTML. Successful exploitation additionally requires an action by an administrator - the attacker cannot trigger the vulnerability on their own.

Threat Intelligence Overview

EPSS Score
0.2%
Top 88% exploitable
Prevalence
Low
niche WordPress design plugin, limited install base
Social Media
1
Sightings
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 MEDIUM
CISA KEV No
Public POC No
EPSS 0.2%
Patch available No
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
No
Human Impact· derived
Medium

Priority Score

22
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +22
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.

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