Atomic Edge analysis of CVE-2026-0913:
The User Submitted Posts WordPress plugin contains an authenticated stored cross-site scripting (XSS) vulnerability in its ‘usp_access’ shortcode. The vulnerability affects all plugin versions up to and including 20260110. Attackers with Contributor-level or higher permissions can inject malicious scripts into pages or posts. These scripts execute when other users view the compromised content. The CVSS score of 6.4 reflects the need for authentication and the impact of stored XSS.
The root cause is insufficient input sanitization and output escaping on user-supplied shortcode attributes. The vulnerable function `usp_access()` in `/user-submitted-posts/library/shortcode-access.php` processes the ‘deny’ and ‘content’ parameters. The original code used a simple regex filter (`preg_replace(‘#(.*)#is’, ”, $deny)`) to remove script tags. This filter was insufficient because it only matched complete “ tags. Attackers could bypass this filter by injecting event handlers or other JavaScript payloads within HTML attributes. The vulnerability also existed in the `usp_visitor()` and `usp_member()` functions within the same file.
Exploitation requires an authenticated attacker with at least Contributor permissions. The attacker creates or edits a post or page containing the shortcode `[usp_access cap=”read” deny=”INJECTED_PAYLOAD”][/usp_access]`. The payload replaces `INJECTED_PAYLOAD` with malicious JavaScript. For example, a payload could be ``. The plugin processes the ‘deny’ attribute through the vulnerable sanitization logic. When a user without the required capability views the page, the plugin outputs the unsanitized ‘deny’ message, executing the script in the victim’s browser.
The patch replaces the inadequate regex filter with WordPress’s secure `wp_kses_post()` function. In the patched version, lines 20 and 29 in `shortcode-access.php` now apply `$deny = wp_kses_post($deny);` and `$content = wp_kses_post($content);`. This function strips all disallowed HTML and attributes according to the `post` context rules, effectively neutralizing XSS payloads. The patch also updates the `usp_visitor()` and `usp_member()` functions with the same secure sanitization. The plugin version number increments from 20260110 to 20260113 in `user-submitted-posts.php`.
Successful exploitation allows attackers to execute arbitrary JavaScript in the context of a victim’s WordPress session. This can lead to session hijacking, account takeover, or administrative actions if a high-privileged user views the malicious content. Attackers could deface sites, redirect users, or steal sensitive data from the browser. The stored nature of the vulnerability means a single injection can affect multiple users over time.







