☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]
Designthemes logo [ WEBSITE ] [ VENDOR STATS ]
CVSS: 6.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N 🐛 CWE-79
👁️
Common Weakness Enumeration - Identifies the specific category of software weakness or flaw.

CVE-2025-68977

CVE-2025-68977 Cross-Site Scripting in Designthemes
📅 PUBLISHED: 2025-12-30 11:15 UTC 🔄 UPDATED: 2026-08-12 14:53 UTC
[ PATCH UNDER REVIEW ↓ ] Remains UNDER REVIEW until an independent source confirms the fix
[ DEFENSE PATCH ↓ ]
💣 PoC: Public
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 0.03%
👁️
0.03% probability
<1× above the median CVE
Tier: LOW
30-day exploitation window · FIRST.org · updated daily
🥷 MITRE: T1059.007
👁️
MITRE ATT&CK Tactic - Describes the strategy hackers use to execute this attack.
Country: Estonia License: Freemium
VULNERABLE: version not auto-detected — verify your deployed version locally
CVSS VECTOR BREAKDOWN 6.5
AV: N Attack Vector Network
AC: L Attack Complexity Low
PR: N Privileges Required None
UI: R User Interaction Required
S: C Scope Changed
C: L Confidentiality Low
I: L Integrity Low
A: N Availability None
6.5
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2025-68977 is a DOM-Based Cross-Site Scripting (XSS) vulnerability found in the DesignThemes Portfolio Addon WordPress plugin, version 1.5 and earlier. This vulnerability allows an attacker to inject malicious scripts into a web page through improper neutralization of user input during web page generation. The attack is executed entirely on the client side (DOM-based), meaning the payload is processed by the victim's browser without being sent to the server. The CVSS score of 6.5 (Medium) reflects the need for user interaction and the potential for data theft or session hijacking.

⚡ AUTOMATE YOUR CVE INTELLIGENCE

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.

›Patch confidence — UNVERIFIED to CONFIRMED, cross-referenced NVD + RHSA + Debian
›Exploit & PoC — poc_status, poc_url, has_exploit. Not in NVD.
›Shodan dorks — ready-made queries to find exposed vulnerable systems
›Detection rules — YARA · Wazuh · Elastic (all plans) · Sigma (Pro)
›pending_fields — know exactly which of 7 fields NVD hasn't processed yet
›Free backfill — data incomplete when you paid? Re-check within 30 days = 0 credits
PAYG €0.08/lookup Standard €19/mo (was €29) · 5k credits Pro €65/mo (was €99) · 20k credits FOUNDING PRICE · LOCKED FOR LIFE · ENDS 31 DEC 2026
[ FROM €19/MO ]
Free sandbox key available
No signup required

WordPress Ecosystem Context

This vulnerability specifically affects the WordPress plugin ecosystem. The plugin is installed on WordPress sites to enhance portfolio functionality. The attack does not involve Apache or Nginx server misconfigurations; it is purely a client-side scripting flaw within the plugin's JavaScript code.

CVSS Breakdown & Threat Level

  • Attack Vector (AV): Network (N) – The vulnerability is exploitable remotely.
  • Attack Complexity (AC): Low (L) – No special conditions are required for exploitation.
  • Privileges Required (PR): None (N) – No authentication is needed.
  • User Interaction (UI): Required (R) – The victim must click a crafted link or visit a malicious page.
  • Scope (S): Changed (C) – The impact extends beyond the vulnerable component.
  • Confidentiality (C): Low (L) – Limited data exposure possible.
  • Integrity (I): Low (L) – Limited ability to modify content.
  • Availability (A): None (N) – No impact on availability.

Threat Level: Medium. While the CVSS score is 6.5, the lack of a known patch and the DOM-based nature make it a persistent threat for unpatched sites.

Deep Dive & Mechanics

The vulnerability resides in the designthemes-portfolio-addon plugin's JavaScript code, which processes user-supplied data (e.g., via URL fragments or document.location properties) without proper sanitization. DOM-based XSS occurs when the script reads data from the DOM (like window.location.hash) and writes it back to the DOM in an unsafe manner.

Attack Flow:

  1. An attacker crafts a malicious URL containing a JavaScript payload in the fragment identifier (e.g., #<script>alert('XSS')</script>).
  2. The victim clicks the link, which loads the vulnerable WordPress page.
  3. The plugin's JavaScript reads the fragment and injects it into the page's DOM without escaping.
  4. The browser executes the injected script, allowing the attacker to steal cookies, redirect the user, or perform other malicious actions.

Root Cause: The plugin fails to use safe DOM manipulation methods (e.g., textContent instead of innerHTML) or sanitize input before insertion.

Vulnerable vs. Patched Code

Since no patch is available, the following is a hypothetical comparison based on common fixes.

Vulnerable Code (JavaScript):

// Vulnerable: directly sets innerHTML from URL hash
var hash = window.location.hash.substring(1);
document.getElementById('portfolio-title').innerHTML = hash;

Patched Code (Hypothetical):

// Patched: uses textContent to prevent script execution
var hash = window.location.hash.substring(1);
document.getElementById('portfolio-title').textContent = hash;

The patched version uses textContent which automatically escapes HTML entities, preventing script injection.

Exploitation & Lab Setup

Red Team (Attacker)

Prerequisites:

  • A WordPress site with the vulnerable plugin installed (version <= 1.5).
  • Ability to craft a malicious link.

Exploit Steps:

  1. Identify a page that uses the vulnerable plugin (e.g., portfolio single view).
  2. Craft a URL with a malicious payload in the fragment:
    http://target-site.com/portfolio-item/test/#<img src=x onerror=alert('XSS')>
    
  3. Send the link to the victim via phishing email or social engineering.
  4. When the victim clicks the link, the script executes in their browser.

Proof-of-Concept (PoC) HTML:

<!DOCTYPE html>
<html>
<head><title>PoC</title></head>
<body>
  <h1>Click the link below:</h1>
  <a href="http://target-site.com/portfolio-item/test/#<script>alert('XSS')</script>">Click me</a>
</body>
</html>

Blue Team (Defender)

Detection Steps:

  • Monitor web server logs for requests containing suspicious fragment identifiers (e.g., <script, onerror, alert).
  • Use browser-based security headers like Content-Security-Policy to block inline scripts.
  • Implement input validation on the client side using a library like DOMPurify.

Lab Setup:

  • Install a local WordPress instance with the vulnerable plugin.
  • Use a browser with developer tools to inspect DOM changes.
  • Simulate the attack by manually modifying the URL fragment.

Indicators of Compromise (IOCs)

  • Network IOCs:
    • HTTP requests containing #<script or #<img in the URL fragment.
    • Referer headers from known malicious domains.
  • Host IOCs:
    • Unexpected JavaScript execution in the browser console.
    • Modified DOM elements (e.g., injected <script> tags).
  • File IOCs:
    • Plugin file designthemes-portfolio-addon/js/main.js (or similar) containing unsafe innerHTML usage.

Detection Engineering

YARA Rule

rule Detect_DOM_XSS_Designthemes_Portfolio {
    meta:
        description = "Detects vulnerable JavaScript code in DesignThemes Portfolio Addon"
        author = "Valters IT"
        date = "2025-04-10"
        cve = "CVE-2025-68977"
    strings:
        $unsafe1 = ".innerHTML = " ascii nocase
        $unsafe2 = ".outerHTML = " ascii nocase
        $hash = "location.hash" ascii nocase
    condition:
        all of ($unsafe*) and $hash
}

Sigma Rule

title: DOM XSS via DesignThemes Portfolio Addon
id: 12345678-1234-1234-1234-123456789abc
status: experimental
description: Detects potential DOM-based XSS attacks targeting the vulnerable plugin
author: Valters IT
date: 2025-04-10
logsource:
    category: web
    product: apache
detection:
    selection:
        cs-uri-query|contains:
            - '#<script'
            - '#<img'
            - '#<svg'
            - '#onerror'
    condition: selection
falsepositives:
    - Legitimate use of hash fragments for navigation
level: medium

Suricata Rule

alert http any any -> any any (msg:"CVE-2025-68977 DOM XSS Attempt"; flow:to_server; content:"#<script"; http_uri; nocase; sid:1000001; rev:1;)
alert http any any -> any any (msg:"CVE-2025-68977 DOM XSS via img tag"; flow:to_server; content:"#<img"; http_uri; nocase; sid:1000002; rev:1;)

Remediation & Mitigation

Immediate Actions:

  1. Disable the plugin until a patch is released.
  2. Implement a Web Application Firewall (WAF) rule to block requests with suspicious fragment identifiers.
  3. Add Content-Security-Policy (CSP) header to restrict script execution:
    Content-Security-Policy: script-src 'self'; object-src 'none';
    

Long-Term Fix:

  • The vendor must release a patched version that uses safe DOM methods (e.g., textContent or setAttribute).
  • Alternatively, replace the plugin with a secure alternative.

Workaround:

  • Modify the plugin's JavaScript file to sanitize input using a library like DOMPurify before DOM insertion.

Valters IT
Senior DevSecOps & Cyber Threat Intelligence Expert

👁️ SHODAN DORKS (THREAT HUNTING)

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.

http.html:"designthemes-portfolio-addon"
http.html:"wp-content/plugins/designthemes-portfolio-addon"

💣 PoC CODE AVAILABLE

Exploit code for this CVE is tracked in our database. Access poc_code via API Pro.

[ API_PRO ] →
◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2025-68977/ · CVE data: NVD/MITRE (public domain) · © 2026 ValtersIT Hub
>_ SYSTEM_CORE: INTEL_ACTIVE
90% TEAM-CURATED // 10% AUTOMATED INGESTION.
ALL PATCH REFERENCES AND VERSION DATA SOURCED FROM NVD + OSV OFFICIAL REGISTRIES.