Skip to main content

Ditty News Ticker CVE-2026-93339

| EUVDEUVD-2026-83942 MEDIUM
Cross-site Scripting (XSS) (CWE-79)
2026-09-21 VulnCheck GHSA-3vrp-5rc4-9852
5.1
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

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

  1. Access
    Authenticate as Author-level user
  2. Delivery
    Craft malicious wrapper attribute in layout tag
  3. Exploit
    Save Ditty item bypassing save-time KSES
  4. Execution
    Payload resolved as HTML element at render time
  5. Impact
    Script 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.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.1% exploitation probability (EPSS)

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

Alert me

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

Ditty 0 <3.1.70

Affected Packages

euvd ditty fix: 3.1.70

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

Vendor (VulnCheck) PRIMARY 5.1 MEDIUM
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
vuln.today AI 5.4 MEDIUM

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.

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

Primary rating from Vendor (VulnCheck).

CVSS VectorVendor: VulnCheck

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
Low
User Interaction
Passive
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
None
Vulnerable system: Availability
None
Subsequent system: Confidentiality
Low
Subsequent system: Integrity
Low
Subsequent system: Availability
None

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

EPSS Score
0.1%
Top 95% exploitable
Prevalence
Medium
moderately popular WordPress news-ticker plugin, common but not universal
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.1%
Patch available Yes
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

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

More in Ditty

View all
CVE-2025-8085 HIGH POC
8.6 Sep 08

The Ditty WordPress plugin before 3.1.58 lacks authorization and authentication for requests to its displayItems endpoin

CVE-2024-6715 MEDIUM POC
6.1 Aug 23

The Ditty WordPress plugin before 3.1.46 re-introduced a previously fixed security issue (https://wpscan.com/vulnerabili

CVE-2023-4148 MEDIUM POC
6.1 Sep 25

The Ditty WordPress plugin before 3.1.25 does not sanitise and escape some parameters and generated URLs before outputti

CVE-2022-0533 MEDIUM POC
6.1 Mar 07

The Ditty (formerly Ditty News Ticker) WordPress plugin before 3.0.15 is affected by a Reflected Cross-Site Scripting (X

CVE-2024-3939 MEDIUM POC
5.4 May 27

The Ditty WordPress plugin before 3.1.36 does not sanitise and escape some of its settings, which could allow high privi

CVE-2024-13357 MEDIUM POC
4.8 May 15

The Ditty WordPress plugin before 3.1.52 does not sanitise and escape some of its settings, which could allow high privi

CVE-2024-9600 MEDIUM POC
4.8 Nov 21

The Ditty WordPress plugin before 3.1.47 does not sanitise and escape some of its settings, which could allow high privi

CVE-2024-5575 MEDIUM POC
4.7 Jul 13

The Ditty WordPress plugin before 3.1.43 does not sanitise and escape some of its blocks' settings, which could allow hi

CVE-2026-94461 MEDIUM
6.5 Sep 23

Stored cross-site scripting in the Ditty WordPress plugin (versions through 3.1.69) allows an authenticated attacker hol

CVE-2024-6710 MEDIUM
5.4 Aug 05

The Ditty WordPress plugin before 3.1.45 does not sanitise and escape some parameters, which could allow users with a ro

CVE-2023-23874 MEDIUM
5.4 May 03

Auth. Rated medium severity (CVSS 5.4), this vulnerability is remotely exploitable, low attack complexity. No vendor pat

CVE-2026-81274 MEDIUM
5.3 Aug 27

Broken access control in the Ditty WordPress plugin (versions up to and including 3.1.67) allows subscriber-level authen

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