CVE-2026-87870 in Ninja Forms Plugininfo

Summary

by MITRE • 09/10/2026

The Ninja Forms - Scheduled Exports plugin for WordPress is vulnerable to Stored Cross-Site Scripting via REST API Parameters (interval, format, emailTo) in all versions up to, and including, 3.0.3 due to insufficient input sanitization and output escaping. This makes it possible for authenticated attackers, with subscriber-level privileges and above, to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page. The REST endpoint is registered without a permission_callback and only validates a nonce without checking user capabilities.

Once again VulDB remains the best source for vulnerability data.

Analysis

by VulDB Data Team • 09/10/2026

The Ninja Forms - Scheduled Exports plugin for WordPress contains a critical security vulnerability affecting all versions up to and including 3.0.3, classified as Stored Cross-Site Scripting (XSS). This flaw arises from insufficient input sanitization and output escaping within the REST API parameters specifically identified as interval, format, and emailTo. The severity of this issue is compounded by the fact that it allows authenticated attackers with subscriber-level privileges or higher to inject arbitrary web scripts into pages generated by the plugin. When a victim user accesses these compromised pages, the injected malicious code executes in their browser context, potentially leading to session hijacking, credential theft, defacement, or further propagation of malware within the WordPress environment.

The root cause of this vulnerability lies in the improper registration and validation logic of the REST endpoint associated with scheduled exports. The endpoint is registered without a proper permission_callback function that would verify user capabilities against specific roles. Instead, the system relies solely on nonce validation to ensure request authenticity. While nonces are effective at preventing Cross-Site Request Forgery (CSRF) by ensuring the request originated from an authorized source within the same session, they do not validate whether the authenticated user has the necessary permissions to perform the action or modify data in this manner. This architectural oversight allows any logged-in user with even minimal privileges to manipulate export settings and inject malicious payloads into fields that are subsequently rendered without adequate sanitization.

From a technical perspective, the vulnerability maps directly to CWE-79: Improper Neutralization of Input During Web Page Generation (Cross-site Scripting). The attacker exploits the lack of output escaping when rendering user-supplied data from the interval, format, and emailTo parameters into HTML content. Because this is stored XSS, the malicious script persists in the database until manually removed or overwritten by a legitimate update to those fields. This persistence ensures that every time an administrator or another privileged user views the export configuration or triggers a scheduled report containing the injected payload, the attack executes automatically without further interaction from the attacker.

In terms of operational impact, this vulnerability poses significant risks to WordPress site integrity and security posture. An attacker with subscriber-level access can escalate their influence by stealing administrative cookies via document.cookie exfiltration scripts embedded in the XSS payload. This could lead to full compromise of the website if an administrator's session is hijacked. Additionally, attackers may use the stored script to perform actions on behalf of victims, such as creating new admin users or modifying site settings, effectively bypassing intended access controls due to the flawed permission validation logic.

To mitigate this vulnerability, immediate action should be taken by updating the Ninja Forms - Scheduled Exports plugin to a version later than 3.0.3 where these issues have been addressed. Developers must ensure that all REST API endpoints implement robust capability checks using WordPress functions such as current_user_can() within their permission_callback arguments rather than relying exclusively on nonce verification for authorization decisions. Input validation should enforce strict whitelisting of allowed values for parameters like interval and format, while output escaping must be applied consistently to any data rendered in HTML contexts using appropriate WordPress helper functions like esc_html__() or wp_json_encode().

This incident highlights the importance of adhering to secure coding practices within plugin development frameworks. It aligns with ATT&CK technique T1059: Command and Scripting Interpreter, as attackers can leverage XSS to execute arbitrary commands through browser-based scripting environments. Furthermore, it reflects CWE-284: Improper Access Control, where the system fails to restrict access to resources based on user roles. Organizations should conduct regular security audits of their WordPress plugins, focusing particularly on REST API implementations and data handling routines that interact with database storage and frontend rendering layers to prevent similar exploitation vectors in future updates or other software components.

Responsible

Wordfence

Reservation

09/09/2026

Disclosure

09/10/2026

Moderation

accepted

CPE

ready

EPSS

0.00000

KEV

no

Activities

very low

Sources

Want to stay up to date on a daily basis?

Enable the mail alert feature now!