Quick Look: CVE-2026-4803 — Unauthenticated Stored XSS in Royal Elementor Addons via Leaked Nonce

A brief summary of CVE-2026-4803, a high severity stored cross site scripting vulnerability in the Royal Elementor Addons WordPress plugin that allows unauthenticated attackers to inject scripts via a publicly leaked nonce and unsanitized status parameter.

CVE Analysis

5 min read

ZeroPath CVE Analysis
ZeroPath CVE Analysis

2026-05-04

Quick Look: CVE-2026-4803 — Unauthenticated Stored XSS in Royal Elementor Addons via Leaked Nonce
Experimental AI-Generated Content

This CVE analysis is an experimental publication that is completely AI-generated. The content may contain errors or inaccuracies and is subject to change as more information becomes available. We are continuously refining our process.

If you have feedback, questions, or notice any errors, please reach out to us.

[email protected]

Introduction

A publicly leaked nonce in the Royal Elementor Addons plugin for WordPress has turned what should be a protected AJAX endpoint into an open door for unauthenticated stored cross site scripting. With over 600,000 active installations, this plugin's exposure to CVE-2026-4803 represents a meaningful risk across a large swath of the WordPress ecosystem.

Royal Elementor Addons, developed by WP Royal, is a widely used extension for the Elementor page builder that provides additional widgets, templates, and form handling capabilities. Its popularity among WordPress site builders makes it a frequent target for security researchers and, consequently, for attackers.

Technical Information

The vulnerability exists in the wpr_update_form_action_meta AJAX handler, located in wpr-actions-status.php. The root cause is a combination of two distinct flaws: a publicly exposed nonce that defeats authentication controls, and insufficient sanitization of user supplied input before it is stored and rendered.

Nonce Exposure and Authentication Bypass

The AJAX handler is registered via the wp_ajax_nopriv hook, meaning WordPress routes requests from unauthenticated users to this endpoint. While the code does perform a nonce check, the nonce value (WprConfig.nonce) is embedded in frontend JavaScript on any page that loads Royal Addons widgets. Any visitor to the site can extract a valid nonce from the page source, rendering the nonce verification meaningless as an access control mechanism.

The endpoint also lacks any capability checks or ownership verification. There is no call to current_user_can() or any equivalent authorization gate. The nonce was the sole barrier, and it was publicly available.

Payload Storage and Rendering

Once an attacker has the nonce, they can call the wpr_update_form_action_meta AJAX action and supply a crafted payload in the status parameter. The vulnerable code path calls update_post_meta with this user controlled input without adequate sanitization or escaping. The malicious data is written directly to the WordPress database as post metadata. When the stored metadata is later rendered on the frontend, it is output without proper escaping, resulting in stored cross site scripting.

Attack Flow

The exploitation chain proceeds as follows:

  1. The attacker visits any page on the target WordPress site that loads a Royal Elementor Addons widget.
  2. The attacker extracts the WprConfig.nonce value from the page's JavaScript source.
  3. Using this nonce, the attacker sends a crafted POST request to wp-admin/admin-ajax.php with the action set to wpr_update_form_action_meta and a malicious JavaScript payload in the status parameter.
  4. The server validates the nonce (which succeeds because the nonce is legitimate), performs no capability or ownership checks, and stores the payload via update_post_meta.
  5. When any user, including administrators, visits the page where this metadata is rendered, the injected script executes in their browser.

The entire chain requires no authentication. The CVSS score of 7.2 reflects the unauthenticated attack vector and the persistent nature of the stored XSS payload.

Patch Mechanics

The patched version (1.7.1057 and later) introduces strict server side validation. The updated code requires a specific submission secret that is generated per post. It verifies this secret using hash_equals before allowing any metadata updates, effectively blocking unauthenticated tampering.

Affected Systems and Versions

The vulnerability affects the Royal Addons for Elementor (also known as Royal Elementor Addons) WordPress plugin in all versions up to and including 1.7.1056. The fix was introduced in version 1.7.1057, with version 1.7.1058 also containing the security fixes.

Any WordPress site running an affected version of the plugin with form modules active is vulnerable, as the nonce is exposed on any page that loads Royal Addons widgets.

Vendor Security History

WP Royal has faced a cluster of security disclosures in a compressed timeframe. The following table summarizes recent vulnerabilities in the Royal Elementor Addons ecosystem:

CVE IdentifierVulnerability TypeAffected VersionsCVSS ScorePatched Version
CVE-2026-4803Unauthenticated Stored XSSUp to 1.7.10567.21.7.1057
CVE-2026-4024Missing AuthorizationUp to 1.7.10565.31.7.1057
CVE-2026-5159Authenticated Stored XSSUp to 1.7.10566.41.7.1057
CVE-2026-40720Unauthenticated Stored XSS (Pro)Up to 1.7.10417.21.7.1041

The recurring themes across these disclosures are authorization bypass and insufficient input sanitization. The vendor has been responsive in releasing patches, but the frequency of similar vulnerability classes suggests systemic issues in the codebase's security posture.

References

Detect & fix
what others miss

Security magnifying glass visualization