Skip to main content

Themify Builder CVE-2026-115869

| EUVDEUVD-2026-114233 MEDIUM
Cross-site Scripting (XSS) (CWE-79)
2026-10-30 Wordfence GHSA-2m93-9jp5-xhh2
6.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-level user
  2. Delivery
    Create Custom Font post with script in 'variations' repeater sub-field
  3. Exploit
    Payload saved unescaped to post meta
  4. Execution
    Administrator opens Custom Fonts admin listing
  5. Impact
    Script executes in admin 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

Requires an authenticated WordPress account at contributor level or above on a site running Themify Builder <= 7.8.4. The attacker must create or edit a Custom Font (tb_cf) post and inject payload into the 'variations' repeater field's sub-fields (style, or woff/woff2/ttf/svg/eot URL values) - these bypass the wp_kses_data() sanitization that is only applied to 'textbox'/'textarea' field types. Execution is gated on a second user (typically an administrator) subsequently visiting the Custom Fonts admin listing page where render_columns() echoes the value unescaped inside a <style> block. Limiting factors: contributor-level authentication is mandatory (not exploitable anonymously), the payload only fires when a privileged user browses the specific admin listing, and the plugin must be installed and active.

Impact

This is a moderate-severity stored XSS (CVSS 6.4, CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N) whose real-world priority is bounded by its authentication requirement. The vector's AV:N/AC:L/UI:N signals a low-friction network-reachable flaw, but PR:L is the decisive limiter: exploitation requires an authenticated contributor-level (or higher) account, so this is not a mass-exploitable unauthenticated bug. The scope change (S:C) and C:L/I:L reflect the classic XSS pattern where a low-privileged author injects script that executes in a higher-privileged admin's browser session, enabling privilege escalation toward full site takeover - the reason stored XSS in WordPress plugins is treated seriously despite modest base scores. No EPSS score and no KEV status were supplied in the input, and the Decision label is 'this_month' (not act_now/emergency), which is consistent with a patch-this-cycle rather than drop-everything posture. No public exploit code or PoC reference is present among the sources (only Wordfence threat intel, plugin source lines, and the fix changeset), so there is no evidence of active exploitation or available weaponization. Net: a legitimate issue to remediate within the normal cycle on sites that grant contributor access to untrusted users, but low urgency on sites where all authors are trusted.

Exploit ScenarioDerived

An attacker who holds (or phishes/registers for) a contributor-level account creates or edits a Custom Font (tb_cf) post and places a JavaScript payload inside a 'variations' repeater sub-field (e.g., the style or font-file URL values), which is written to post meta without sanitization. When an administrator later opens the Custom Fonts admin listing, the stored payload is echoed unescaped inside a <style> block and executes in the admin's authenticated session, allowing session/account actions on their behalf. No public exploit identified at time of analysis.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.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 30, 2026

Stored cross-site scripting in the Themify Builder WordPress plugin affects all versions up to and including 7.8.4: authenticated users holding contributor-level access or higher can write arbitrary markup into the 'variations' repeater sub-fields (style, or the woff/woff2/ttf/svg/eot URL values) of a Custom Font (tb_cf) post, because Themify_Metabox::_save_meta() only applies wp_kses_data() when the field type is 'textbox' or 'textarea' and stores repeater values through update_post_meta() unfiltered. The injected content is later echoed without escaping by Themify_Custom_Fonts::render_columns() inside a <style> block on the Custom Fonts admin listing, so the script runs when a privileged user (typically an administrator) opens that page. The CVSS 3.1 score is 6.4 (AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N), and no public exploit was identified at time of analysis; real-world priority is bounded by the mandatory contributor-level account, the need for the plugin to be active, and the requirement that a second, higher-privileged user visit the specific admin listing.

RemediationAI

An upstream fix has been committed to the plugin repository in changeset 3774070 (https://plugins.trac.wordpress.org/changeset?reponame=&old=3774070%40themify-builder&new=3774070%40themify-builder), which is the authoritative patch reference in the CVE record; a released, tagged plugin version containing that change was not independently confirmed from the available data, so verify the current changelog before upgrading and move off 7.8.4 as soon as a build carrying the fix is published. Because no fixed tagged version could be confirmed at time of analysis, sites that cannot immediately upgrade should reduce exposure at the specific attack surface: remove or restrict the ability of contributor-level and lower accounts to create or edit Custom Font (tb_cf) posts (for example by adjusting role capabilities or the post type's capabilities), which stops the write primitive but limits legitimate font-management workflows for those roles; audit existing tb_cf posts and their 'variations' post meta for unexpected style declarations or font URLs (including javascript: and event-handler payloads) and clean any injected entries, since existing stored payloads remain live after patching; and, as a last resort, deactivate Themify Builder until a patched build is available, accepting the loss of the builder's front-end layouts. Reviewing the Custom Fonts admin listing is the only way the stored payload fires, so administrators should avoid opening that screen on unpatched sites except when cleaning the affected meta. Additional detail and any updated fix version are published in the Wordfence advisory at https://www.wordfence.com/threat-intel/vulnerabilities/id/cf80f304-f79d-4863-b57a-d273daa5fe7f?source=cve.

Affected VersionsENISA

Themify Builder 0 ≤7.8.4

Affected Packages

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

Themify Builder ships its own metabox framework (Themify_Metabox) that serialises Custom Font post types (tb_cf) into WordPress post meta. The save routine, Themify_Metabox::_save_meta(), branches on the declared field type and only routes values through wp_kses_data() for 'textbox' and 'textarea' fields; the 'repeater' field type in the Custom Font 'variations' definition has no equivalent sanitisation, so each attacker-supplied sub-field is passed straight into update_post_meta() and persisted verbatim. The companion renderer, Themify_Custom_Fonts::render_columns(), reads that meta and prints the stored style and font-file URL values inside a <style> block on the Custom Fonts administration listing without esc_* or wp_kses output escaping, which is the sink that turns the persisted meta into executable script. This is CWE-79 (improper neutralisation of input during web page generation / cross-site scripting), with both the input-sanitisation and output-escaping defences missing on the same data path. The CPE cpe:2.3:a:themifyme:themify_builder:*:*:*:*:*:*:*:* covers the plugin across versions up to 7.8.4; the vulnerable code paths are visible in the 7.8.4 tagged source at class-themify-custom-fonts.php (render_columns) and themify-metabox-core.php (the save logic). The CVSS scope-change component (S:C) reflects that the script executes in the admin context of a different, higher-privileged user than the one who stored the payload.

Know when Themify Builder 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 6.4 MEDIUM
AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N
vuln.today AI 6.4 MEDIUM

Network-reachable admin screen with low-complexity injection; PR:L reflects the mandatory contributor account; S:C and C:L/I:L capture script executing in a different (admin) security context; no availability impact.

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

Primary rating from Vendor (Wordfence).

CVSS VectorVendor: Wordfence

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

DescriptionCVE.org

The Themify Builder plugin for WordPress is vulnerable to Stored Cross-Site Scripting via the 'variations' repeater field of Custom Font (tb_cf) posts in versions up to, and including, 7.8.4. This is due to insufficient input sanitization and output escaping on the variations post meta: Themify_Metabox::_save_meta() only passes the value through wp_kses_data() when the field type is 'textbox' or 'textarea', so the 'repeater' field writes attacker-controlled sub-fields (style, woff/woff2/ttf/svg/eot URLs) to update_post_meta() verbatim, and Themify_Custom_Fonts::render_columns() later echoes those values unescaped inside a <style> block on the Custom Fonts admin listing. 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 (specifically, the Custom Fonts admin listing).

Threat Intelligence Overview

EPSS Score
0.3%
Top 78% exploitable
Prevalence
Medium
popular WordPress page-builder plugin, common but not universally deployed
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.3%
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
None
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

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