Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate as Author-level user
-
DeliveryCraft malicious wrapper attribute in layout tag
-
ExploitSave Ditty item bypassing save-time KSES
-
ExecutionPayload resolved as HTML element at render time
-
ImpactScript executes in visitor browser viewing embedding page
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 account with Author-level privileges or higher on the target WordPress site (PR:L), so exploitation is gated by the site's user-registration and role-assignment policy - highest risk on sites granting Author/Editor access to untrusted or many contributors. The stored payload only fires when a visitor loads a post or page that embeds the affected Ditty item (UI:P), and the injection must be placed in a wrapper attribute value of a layout tag that ditty_layout_render_tag_wrapper() emits as an HTML element name. The affected versions are Ditty (ditty-news-ticker) before 3.1.70; the plugin must be installed, active, and used to render Ditty items on public-facing pages. |
| Impact | This is a moderate-severity stored XSS in the Ditty (ditty-news-ticker) WordPress plugin, and the signals are internally consistent rather than conflicting. The CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N, 5.1) shows network reach and low complexity but requires authenticated Author-level privileges (PR:L) plus victim interaction (UI:P), which correctly caps this below critical. There is no EPSS score, no CISA KEV listing, and no public POC in the provided data, so exploitation status is 'no public exploit identified at time of analysis' - this is not a drop-everything emergency. The real value is a low-to-mid priority patch item: the trust boundary is that any Author (a role often granted to contributors/guest writers) can persist a payload that fires for every anonymous visitor, and the subtle bypass (KSES sanitizes at save time, but layout tag wrapper attributes are resolved at render time via ditty_layout_render_tag_wrapper()) means standard wp_kses_post() defenses are silently ineffective. Prioritize patching on sites with untrusted or multi-author editorial workflows; deprioritize where only trusted administrators author content. |
| Exploit ScenarioDerived | An attacker holding an Author-level account (self-registered on open-registration sites, a compromised contributor, or a rogue guest writer) edits a Ditty item and supplies a malicious wrapper attribute value in a layout tag so that an attacker-controlled string is emitted as an HTML element name. Because wp_kses_post() runs at save time before the layout tag attributes are resolved at render time, the payload survives sanitization and executes in the browser of any visitor viewing a post or page that embeds the affected Ditty item. No public POC is referenced in the provided data. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 21, 2026
Stored cross-site scripting in the Ditty News Ticker WordPress plugin (ditty-news-ticker) before 3.1.70 allows an authenticated user holding Author-level privileges or higher to inject arbitrary HTML elements into a layout, which then execute in the browser of any visitor who loads a post or page embedding the affected Ditty item. The flaw stems from ditty_layout_render_tag_wrapper() emitting caller-supplied wrapper attribute values directly as HTML element names without allowlist validation, so the payload survives because wp_kses_post() sanitization runs at save time, before those layout tag attributes are resolved at render time. There is no public exploit identified at time of analysis, and no evidence of confirmed active exploitation (CISA KEV); the risk is moderate and gated by the site's role-assignment policy, making it most dangerous on sites that grant Author or Editor access to untrusted or numerous contributors.
RemediationAI
Vendor-released patch: upgrade the Ditty (ditty-news-ticker) plugin to version 3.1.70 or later, which is the fixed release referenced by the vendor's changelog at https://wordpress.org/plugins/ditty-news-ticker/#developers and described in the VulnCheck advisory at https://www.vulncheck.com/advisories/ditty-stored-xss-via-layout-tag-wrapper-attribute. Because exploitation requires an Author-level account or higher, the most effective compensating control where immediate updating is impossible is to tighten role assignment: remove or downgrade Author/Editor accounts held by untrusted contributors, and disable open or self-service registration that could grant contributor capabilities - the trade-off is reduced editorial throughput on multi-author sites. Sites that do not use Ditty items on public pages can simply deactivate the plugin until patched, accepting the loss of the ticker/news-display functionality. Administrators should also audit existing Ditty layouts for unexpected wrapper attribute values that resolve to unusual HTML element names, since stored payloads created before patching will persist and continue to render until the affected layout is corrected or removed. Note that generic output filtering or a WAF keyword blocklist is a weak substitute here, because the injection is assembled at render time from attribute values and may not match signature patterns.
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
This is a classic CWE-79 improper neutralization of input during web page generation, specifically a stored (persistent) XSS variant, affecting the WordPress plugin Ditty (slug ditty-news-ticker), identified by CPE cpe:2.3:a:metaphor_creations:ditty. The root cause is a sanitization-timing mismatch: WordPress's wp_kses_post() is applied when a Ditty layout is saved, at which point layout tag attributes are still opaque placeholders. At render time, ditty_layout_render_tag_wrapper() resolves those attributes and interpolates the caller-supplied wrapper attribute value directly into the HTML element name position without validating it against an allowlist of permitted tags or attribute names. Because the dangerous string is only assembled after the sanitizer has already run, the KSES filter never sees the final markup, and an attacker with Author-level capability can therefore place crafted values that produce arbitrary HTML elements - including script-bearing or event-handler-bearing markup - in the rendered page. The resulting injected content is stored in the plugin's layout and is served to every visitor viewing content that embeds the Ditty item. The supplied CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:L/UI:P, with only subsequent-system confidentiality and integrity impact, SC:L/SI:L) is consistent with our independent CVSS 3.1 assessment (AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N), which likewise treats this as a scope-changing, moderate-impact stored XSS requiring an authenticated low-privileged account and visitor interaction.
Know when Ditty 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
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N
Author-level account needed (PR:L) and a victim must view the embedding page (UI:R); XSS executes in another user's browser so scope changes (S:C) with limited confidentiality/integrity impact.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
DescriptionCVE.org
Metaphor Creations Ditty (ditty-news-ticker) before 3.1.70 contains a stored cross-site scripting vulnerability that allows authenticated users with Author-level privileges or higher to inject arbitrary HTML elements by supplying malicious wrapper attribute values in layout tags. The ditty_layout_render_tag_wrapper() function inserts caller-supplied wrapper attribute values directly as HTML element names without allowlist validation, bypassing wp_kses_post() sanitization because KSES runs at save time before layout tag attributes are resolved at render time, causing the payload to execute in the browser of any visitor viewing posts or pages embedding the affected Ditty item.
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.
The Ditty WordPress plugin before 3.1.58 lacks authorization and authentication for requests to its displayItems endpoin
The Ditty WordPress plugin before 3.1.46 re-introduced a previously fixed security issue (https://wpscan.com/vulnerabili
The Ditty WordPress plugin before 3.1.25 does not sanitise and escape some parameters and generated URLs before outputti
The Ditty (formerly Ditty News Ticker) WordPress plugin before 3.0.15 is affected by a Reflected Cross-Site Scripting (X
The Ditty WordPress plugin before 3.1.36 does not sanitise and escape some of its settings, which could allow high privi
The Ditty WordPress plugin before 3.1.52 does not sanitise and escape some of its settings, which could allow high privi
The Ditty WordPress plugin before 3.1.47 does not sanitise and escape some of its settings, which could allow high privi
The Ditty WordPress plugin before 3.1.43 does not sanitise and escape some of its blocks' settings, which could allow hi
Stored cross-site scripting in the Ditty WordPress plugin (versions through 3.1.69) allows an authenticated attacker hol
The Ditty WordPress plugin before 3.1.45 does not sanitise and escape some parameters, which could allow users with a ro
Auth. Rated medium severity (CVSS 5.4), this vulnerability is remotely exploitable, low attack complexity. No vendor pat
Broken access control in the Ditty WordPress plugin (versions up to and including 3.1.67) allows subscriber-level authen
EUVD-2026-83942
GHSA-3vrp-5rc4-9852
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB