CVE-2026-15425
WordPress vulnerability analysis and mitigation

Overview

CVE-2026-15425 is a Stored Cross-Site Scripting (XSS) vulnerability in the Yoast SEO – Advanced SEO with real-time guidance and built-in AI plugin for WordPress. It affects all versions up to and including 28.0, allowing authenticated attackers with author-level access or above to inject arbitrary web scripts via the Post Slug (post_name) field. The vulnerability was published on July 25, 2026, and a patch is available in version 28.1. It carries a CVSS v3.1 base score of 6.4 (Medium), assigned by Wordfence (GitHub Advisory, Wordfence).

Technical details

The root cause is insufficient input sanitization and output escaping of the post_name (post slug) field, classified as CWE-79 (Improper Neutralization of Input During Web Page Generation). The exploit chain depends on WordPress's get_permalink() function embedding the stored, percent-encoded post_name value into the generated URL, which is then rendered without proper escaping in the Yoast SEO Bulk Editor list table (admin/class-bulk-editor-list-table.php, lines 898 and 900). Exploitation requires that WordPress pretty permalinks be enabled; without this setting, the malicious slug is not embedded in the URL and the XSS payload is not triggered. The vulnerability is network-exploitable with low attack complexity and requires only low privileges (author-level) (GitHub Advisory, Wordfence, WordPress Trac).

Impact

Successful exploitation allows any authenticated user with author-level access or above to inject arbitrary JavaScript into post slugs, which then executes in the browsers of any visitor who accesses the affected page. This can lead to session hijacking, credential theft, unauthorized actions performed on behalf of victims (including administrators), and potential site defacement or malware distribution. The scope is changed, meaning the injected script can affect users beyond the vulnerable component itself (GitHub Advisory, Wordfence).

Exploitation steps

  1. Reconnaissance: Identify WordPress sites running Yoast SEO plugin version 28.0 or earlier with pretty permalinks enabled (Settings > Permalinks in WordPress admin).
  2. Obtain author-level access: Log in or register as a user with at least author-level privileges on the target WordPress site.
  3. Craft malicious post slug: Create or edit a post and set the post slug (post_name) to a value containing a percent-encoded XSS payload (e.g., my-post%22><script>alert(document.cookie)</script>).
  4. Save the post: Submit the post, causing the malicious slug to be stored in the WordPress database.
  5. Trigger execution: When an administrator or other user visits the Yoast SEO Bulk Editor page (or any page where get_permalink() renders the slug without proper escaping), the injected script executes in their browser.
  6. Achieve objective: The executed script can steal session cookies, perform actions as the victim user, or redirect to attacker-controlled infrastructure (GitHub Advisory, WordPress Trac).

Indicators of compromise

  • Logs: WordPress access logs showing requests to the Bulk Editor admin page (/wp-admin/admin.php?page=wpseo_bulk-editor) from unusual IP addresses or at unusual times; error logs showing unexpected JavaScript-related output.
  • File System: Unexpected modifications to post slugs in the WordPress database (wp_posts.post_name column) containing percent-encoded special characters such as %22, %3C, %3E, or <script> patterns.
  • Network: Outbound requests from victim browsers to attacker-controlled domains following visits to affected pages; unusual POST or GET requests to external URLs originating from the WordPress admin interface.
  • Database: Post slugs in wp_posts containing encoded HTML/JavaScript payloads (e.g., %22><script>, javascript:, onerror=) (Wordfence).

Mitigation and workarounds

Update the Yoast SEO plugin to version 28.1 or later, which includes the fix applied in changeset 3598937 to admin/class-bulk-editor-list-table.php. As a temporary workaround if immediate patching is not possible, disabling WordPress pretty permalinks (Settings > Permalinks > Plain) will prevent exploitation, since the attack chain depends on get_permalink() embedding the slug in the URL. Additionally, restrict author-level and above access to only trusted users to reduce the attack surface (GitHub Advisory, WordPress Trac Changeset).

Additional resources


SourceThis report was generated using AI

Related WordPress vulnerabilities:

CVE ID

Severity

Score

Technologies

Component name

CISA KEV exploit

Has fix

Published date

CVE-2026-10818HIGH8.1
  • wpforms
NoYesJul 25, 2026
CVE-2026-8789HIGH8.1
  • easy-appointments
NoYesJul 24, 2026
CVE-2026-14955MEDIUM6.5
  • woocommerce-checkout-field-editor-pro
NoYesJul 25, 2026
CVE-2026-15425MEDIUM6.4
  • wordpress-seo
NoYesJul 25, 2026
CVE-2026-15962NONEN/A
  • fluentformpro
NoYesJul 26, 2026

Free Vulnerability Assessment

Benchmark your Cloud Security Posture

Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.

Request assessment

Get a personalized demo

Ready to see Wiz in action?

"Best User Experience I have ever seen, provides full visibility to cloud workloads."
David EstlickCISO
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
Adam FletcherChief Security Officer
"We know that if Wiz identifies something as critical, it actually is."
Greg PoniatowskiHead of Threat and Vulnerability Management