CVE-2026-9125 affects Presto Player and is an authenticated Contributor+ Stored Cross-Site Scripting vulnerability in versions up to and including 4.2.0. A malicious presto_player_overlay shortcode can preserve a javascript: URI in link_url, allowing attacker-controlled JavaScript to run in the WordPress origin when another user clicks the overlay during playback.

CVECVE-2026-9125
Plugin VersionPresto Player <= 4.2.0, fixed in 4.2.1
All Time4 601 633
Active installations100 000+
Publicly PublishedJune 11, 2026
Last UpdatedJune 12, 2026
ResearcherDmitrii Ignatyev
PoCYes
ExploitNo
Referencehttps://www.cve.org/CVERecord?id=CVE-2026-9125
https://www.wordfence.com/threat-intel/vulnerabilities/wordpress-plugins/presto-player/the-ultimate-video-player-for-wordpress-420-authenticated-contributor-stored-cross-site-scripting-via-link-url-shortcode-attribute
Plugin Security Certification by CleanTalk
Logo of the pluginPresto Player plugin logo

Join the community of developers who prioritize security. Highlight your plugin in the WordPress catalog.

PSC by Cleantalk

Timeline

March 23, 2026Plugin testing and vulnerability detection in Presto Player were completed.
March 23, 2026The vulnerability was reported with PoC, description, and recommendations for remediation.
June 11, 2026CVE-2026-9125 was publicly published by Wordfence.

Discovery of the Vulnerability

The vulnerable flow starts in getOverlays() in inc/Services/Shortcodes.php. It parses presto_player_overlay attributes embedded inside the outer player shortcode and places link_url directly in link.url. Version 4.2.0 does not restrict this value to HTTP or HTTPS and does not reject the javascript: scheme before the overlay configuration reaches the browser.

The Presto Dynamic Overlay UI component renders the resulting value as the href of an anchor element. WordPress KSES filters post markup but does not validate a dangerous protocol embedded in shortcode attribute text before the plugin parses it. The crafted link remains stored in post content and becomes active after the post is rendered.

Understanding of Stored Cross-Site Scripting attacks

Stored Cross-Site Scripting occurs when untrusted input is saved on the server and later reaches a browser-executable context. Here the shortcode is stored in WordPress post content, then Presto Player converts link_url into an overlay anchor. Ordinary HTML filtering is insufficient because the dangerous value is hidden in shortcode attribute text until the plugin processes it.

A Contributor can prepare the malicious post but cannot publish it on a default WordPress installation. After an authorized user reviews or publishes the content, JavaScript runs in the site origin when a visitor clicks the overlay. An administrator interaction can expose session-bound data and permit authenticated action abuse within the privileges available to that browser.

Exploiting the Stored Cross-Site Scripting Vulnerability

A Contributor or higher can add the following nested shortcodes to a post. Replace YOUR_WORKING_MP4_URL with a valid MP4 address, render the post, play the video, and click the overlay during the first ten seconds.

POC:

POC:
[presto_player src="YOUR_WORKING_MP4_URL" class="big-overlay"]
[presto_player_overlay start_time="0:00" end_time="0:10" position="top-right" text="Click me" link_url="javascript:alert(document.domain)" link_new_tab="0"]
[/presto_player]

____

The alert displays the current document domain and demonstrates JavaScript execution without changing credentials, site data, or configuration. The vulnerable link remains part of the saved shortcode until the post is edited or the plugin blocks the unsafe scheme.

Recommendations for Improved Security

Site owners should update Presto Player to version 4.2.1 or later. Until the update is applied, review Contributor-authored content before publication and reject presto_player_overlay shortcodes that use a non-HTTP link_url. A restrictive Content Security Policy can reduce impact but does not replace the plugin update.

Developers should validate overlay links against an explicit scheme allowlist before placing them in the player configuration, reject javascript:, data:, and other executable schemes, and escape the URL when it is rendered. WordPress URL validation and escaping functions should be applied to both the saved configuration and the final href.

By addressing Stored Cross-Site Scripting issues like CVE-2026-9125, WordPress site owners can prevent low-privileged shortcode content from becoming a browser-side execution path. Stay vigilant, stay secure.

#WordPressSecurity #StoredXSS #PluginSecurity #ShortcodeSecurity #WebsiteSafety #StayProtected #MediumVulnerability

Use CleanTalk solutions to improve the security of your website

CVE-2026-9125 – Presto Player – Contributor+ Stored XSS – POC

Dmitrii I

Pentester with 5 years of hands-on experience securing WordPress and web applications, holding OSWE, OSEP, OSCP, and OSWP certifications. Author of 450 published CVEs, including 35 disclosed within the last month. Specializes in discovering and validating high-impact vulnerabilities in WordPress plugins/themes / Custom WEB applications and delivering actionable remediation guidance to harden production sites.

Visit Author's Website

See all posts by dmitrii-ignatyev