Severity by source
AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N
Unauthenticated network injection (AV:N/AC:L/PR:N), but the stored payload fires only when a victim views the page (UI:R); scope change with low C/I reflects script execution in victims' browser context, no availability impact.
Primary rating from Vendor (Wordfence).
CVSS VectorVendor: Wordfence
Lifecycle Timeline
2DescriptionCVE.org
The FormCraft plugin for WordPress is vulnerable to Stored Cross-Site Scripting via the '[parameter name]' parameter in all versions up to, and including, 3.9.14 due to insufficient input sanitization and output escaping. This makes it possible for unauthenticated attackers to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page. The exploit chain combines a server-side gap - where composite matrix sub-field keys such as field2_0 and field2_1 are never passed through the sanitization loop and are stored raw via $wpdb->insert() - with a client-side gap where DOMPurify is only invoked when typeof field.value === 'string', but matrix values arrive from the server as arrays, bypassing the check before being mapped to strings and injected into the DOM. Additionally, the same sink is reachable via a second attack vector: array-typed field values are passed through htmlentities() on submission but later reversed by html_entity_decode() at formcraft-main.php:2608 and :2122, restoring the malicious payload before storage and rendering.
Articles & Coverage 2
AnalysisAI
Stored cross-site scripting in the FormCraft WordPress plugin (all versions through 3.9.14) lets unauthenticated attackers persist malicious JavaScript that executes in any user's browser when an affected page is rendered. The flaw stems from a two-sided sanitization gap: composite matrix sub-field keys (e.g. field2_0) are written raw via $wpdb->insert(), and the client-side DOMPurify guard is skipped because matrix values arrive as arrays rather than strings. No public exploit identified at time of analysis and the issue is not listed in CISA KEV, but its unauthenticated, network-reachable nature (CVSS 7.2) makes it a meaningful patch priority for exposed sites.
Technical ContextAI
The affected component is FormCraft (cpe:2.3:a:formcraft:formcraft), a drag-and-drop form-builder plugin for WordPress written in PHP. The root cause is CWE-79 (improper neutralization of input during web page generation). Two independent code paths reach the same DOM sink: (1) composite matrix sub-field keys such as field2_0 and field2_1 never enter the plugin's sanitization loop and are stored raw in the database; and (2) array-typed field values are encoded with htmlentities() on submission but then reversed by html_entity_decode() at formcraft-main.php lines 2608 and 2122, restoring the original payload before storage and rendering. On the client, DOMPurify is only invoked when typeof field.value === 'string', so array-typed matrix values bypass sanitization before being mapped to strings and injected into the DOM.
RemediationAI
Update FormCraft to a release later than 3.9.14 once the vendor publishes a fixed build; no exact patched version is confirmed in the available data, so consult the vendor changelog at https://formcraft-wp.com/changelog/ and the Wordfence advisory at https://www.wordfence.com/threat-intel/vulnerabilities/id/6b30089a-2267-47b9-b0a5-d6eeadfe51d2?source=cve to identify the corrected release. Until a patch is applied, reduce exposure by restricting or disabling forms that use composite matrix field types (the specific vector), placing affected forms behind authentication or CAPTCHA to limit anonymous submissions, and deploying a WordPress WAF ruleset (such as Wordfence) to filter script payloads in form submissions; note that disabling matrix fields breaks any form relying on that field type, and WAF filtering can be bypassed and should be treated as a stopgap rather than a fix. Additionally, review the FormCraft submissions table for already-stored payloads, since stored XSS persists in the database even after the code is patched.
In PHP versions 7.1.x below 7.1.33, 7.2.x below 7.2.24 and 7.3.x below 7.3.11 in certain configurations of FPM setup it
sapi/cgi/cgi_main.c in PHP before 5.3.12 and 5.4.x before 5.4.2, when configured as a CGI script (aka php-cgi), does not
(1) boardData102.php, (2) boardData103.php, (3) boardDataJP.php, (4) boardDataNA.php, and (5) boardDataWW.php in Netgear
The '/common/download_agent_installer.php' script in the Quest KACE System Management Appliance 8.0.318 is accessible by
ProjectSend versions prior to r1720 are affected by an improper authentication vulnerability. Rated critical severity (C
Roundcube Webmail contains a critical PHP object deserialization vulnerability (CVE-2025-49113, CVSS 9.9) that allows au
Util/PHP/eval-stdin.php in PHPUnit before 4.8.28 and 5.x before 5.6.3 allows remote attackers to execute arbitrary PHP c
Palo Alto Networks PAN-OS management web interface contains an authentication bypass allowing unauthenticated attackers
Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re
Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re
The get_referers function in /opt/ws/bin/sblistpack in Sophos Web Appliance before 3.7.9.1 and 3.8 before 3.8.1.1 allows
The Backup Migration plugin for WordPress is vulnerable to Remote Code Execution in all versions up to, and including, 1
Same weakness CWE-79 – Cross-site Scripting (XSS)
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-47878
GHSA-xr57-33vw-pgmj