Skip to main content

JetFormBuilder CVE-2026-97342

| EUVDEUVD-2026-91250 HIGH
Cross-site Scripting (XSS) (CWE-79)
2026-10-02 Wordfence GHSA-h3qq-hvw6-cjjf
7.2
CVSS 3.1 · Vendor: Wordfence
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Reach public nopriv AJAX endpoint
  2. Delivery
    Submit crafted form with script payload
  3. Exploit
    Insert/Update Post stores raw value in post meta
  4. Execution
    Victim loads page with Select Field block
  5. Persist
    Unescaped option value/label renders
  6. Impact
    Script executes in victim browser

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Output encoding, context-aware escaping
MITRE ATT&CK

2 techniques across 2 tactics: Initial Access, Execution

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Exploitation requires that the site run the JetFormBuilder plugin (≤3.6.5.4) with the public submission endpoint wp_ajax_nopriv_jet_form_builder_submit reachable (its default behavior for front-end forms), AND a form configured with the Insert/Update Post action that writes submitted values into post meta, AND a Select Field block whose options are populated by the get_from_db option generator reading that same meta_key. The injection itself needs no authentication, no user interaction, and no special configuration beyond a published form with these actions; the limiting factor is the rendering side - the stored payload only executes once a victim loads a page containing the vulnerable Select Field block bound to the poisoned meta. If no such Select/get_from_db field exists on the site, the stored payload remains dormant.

Impact

This is a genuinely notable issue rather than a high-CVSS-but-low-real-risk flaw, driven primarily by the CVSS vector: AV:N/AC:L/PR:N/UI:N means a remote, unauthenticated attacker can inject the payload with low complexity and no interaction via the wp_ajax_nopriv_jet_form_builder_submit endpoint. The S:C (scope change) with C:L/I:L reflects classic stored XSS impact - script executing in the browser context of whoever later views the injected page. However, several corroborating signals are MISSING: no EPSS score was provided, so exploitation probability cannot be quantified; KEV status is not listed (treat as not in CISA KEV); and no public POC is referenced beyond the vendor's own wpunit regression test (SelectStoredXssTest.php). The 7.2 base score is therefore the main driver, and it should be read as 'realistic, scriptable injection vector but second-order (XSS) impact requiring a victim to view the page.' The unauthenticated nature meaningfully raises priority for any site running the affected plugin, but absence of active-exploitation evidence keeps this below emergency-patch tier. One caveat to verify: payload execution depends on the site actually using a Select Field block with the get_from_db option generator pointed at the attacker-influenced post meta - if no such form/field exists, real-world exposure is lower than the raw score suggests.

Exploit ScenarioDerived

An unauthenticated attacker submits a crafted form to the public wp_ajax_nopriv_jet_form_builder_submit endpoint, embedding a script payload (e.g. '"></option></select><img src=x onerror=alert(document.domain)>') that is stored verbatim into post meta through the Insert/Update Post action. Later, when any user or administrator loads a page where a Select Field block renders those meta values via the get_from_db generator, the unescaped value and label break out of the <option> tag and execute in the victim's browser. No public exploit is identified at time of analysis, though the vendor's patch commit includes a wpunit test demonstrating the payload.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
No patch listed yet 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 02, 2026

Stored cross-site scripting in the JetFormBuilder - Dynamic Blocks Form Builder WordPress plugin through version 3.6.5.4 lets unauthenticated remote attackers plant arbitrary JavaScript that later executes in the browser of any visitor viewing an affected page. The payload is submitted through the plugin's public wp_ajax_nopriv_jet_form_builder_submit endpoint, persisted verbatim into post meta by the Insert/Update Post action, and rendered without escaping by a Select Field block whose options are populated by the get_from_db generator. No confirmed active exploitation or public exploit code has been identified at time of analysis, and the impact is constrained by configuration: the payload only fires on sites that combine a publicly submittable form with an Insert/Update Post action and a Select/get_from_db field bound to the poisoned meta key.

RemediationAI

Upstream fix available (PR/commit); released patched version not independently confirmed - the security-relevant changes are contained in GitHub commit 534c2ce996408d1f9b5a9fba165348a7cd38bccc (Crocoblock/jetformbuilder), which esc_attr()/esc_html()-escapes the Select Field option value, label and placeholder output and hardens array-key sanitization in Tools::sanitize_recursive()/recursive_wp_kses(). Site operators should update the plugin to the first vendor release that contains this commit and verify the fix afterwards; if the plugin cannot be updated immediately, apply the commit as a patch (it is small and localized to block-template.php and tools.php) and re-test. Where patching is not possible, prioritise compensating controls that break the exploit chain rather than generic hardening: disable or gate the public submission endpoint (wp_ajax_nopriv_jet_form_builder_submit) with a capability or nonce check, accepting the trade-off that logged-out visitors can no longer submit front-end forms; avoid Insert/Update Post actions that write attacker-submitted values into post meta consumed by get_from_db Select fields, or restrict those forms to authenticated users (this removes the unauthenticated PR:N vector but does not fix the underlying escaping defect); and switch Select Field blocks away from the get_from_db generator to static, administrator-defined option lists, which fully removes the render-side sink at the cost of dynamic option management. As a layered measure, deploy WAF rules or input filtering that reject tag-bearing field names and option payloads at the AJAX endpoint, recognising this only blunts known payload shapes. Consult the Wordfence advisory (https://www.wordfence.com/threat-intel/vulnerabilities/id/84857045-833f-44fb-ada0-1e0f4eb84a52?source=cve) for the vendor's official version guidance, and note that any stored payloads already embedded in post meta must be cleaned or the affected meta deleted after patching, since fixed rendering alone leaves the poisoned data in the database.

Affected VersionsENISA

JetFormBuilder — Dynamic Blocks Form Builder 0 ≤3.6.5.4

Affected Packages

euvd jetformbuilder_dynamic_blocks_form_builder no fix

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The flaw is a classic CWE-79 persistent (stored) cross-site scripting issue arising from missing output encoding rather than an exotic memory-safety problem. JetFormBuilder's unauthenticated AJAX entry point (wp_ajax_nopriv_jet_form_builder_submit, handled in includes/form-handler.php) accepts attacker-controlled field names and values and passes them through the Insert/Update Post action, where modules/actions-v2/insert-post/properties/post-meta-property.php writes them into WordPress post meta with no sanitization on the way in. The Select Field block then reads that same meta_key through the get_from_db option generator (includes/generators/get-from-db.php), which copies raw meta values straight into the option 'value' attribute and 'label' content, and modules/option-field/blocks/select/block-template.php prints them unescaped inside <option> tags. Because the stored script executes in the origin of the WordPress site, the CVSS score is 7.2 with Scope:Changed (S:C) - the vulnerable component is the plugin, but the consequences land on the wider site and its users. The upstream fix commit (534c2ce996408d1f9b5a9fba165348a7cd38bccc) addresses both ends of the chain: it adds esc_attr() on the option value and esc_html() on labels and placeholders in block-template.php, and introduces sanitize_array_key()/hardened sanitize_recursive() and recursive_wp_kses() logic in includes/classes/tools.php so submitted array keys containing tags are stripped and colliding sanitized keys no longer overwrite earlier values. The same commit ships a regression test (tests/wpunit/SelectStoredXssTest.php) asserting that previously stored payloads such as '"></option></select><img src=x onerror=alert(document.domain)>' are escaped on render and cannot break out of the <option> element with quote-only injections like '" onpointerover=alert(document.domain) x="'. A parallel one-line guard was added to process-meta-boxes-trait.php requiring class_exists('Jet_Engine_CPT_Meta') before meta-box processing.

Know when Jetformbuilder Dynamic Blocks Form Builder gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (Wordfence) PRIMARY 7.2 HIGH
AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N
vuln.today AI 7.2 HIGH

Unauthenticated injection via a public AJAX endpoint (PR:N, AV:N, AC:L); stored XSS executing in a separate victim's browser context gives S:C with C:L/I:L and no availability impact.

3.1 AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:L/VA:N/SC:L/SI:L/SA:N

Primary rating from Vendor (Wordfence).

CVSS VectorVendor: Wordfence

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Changed
Confidentiality
Low
Integrity
Low
Availability
None

DescriptionCVE.org

The JetFormBuilder - Dynamic Blocks Form Builder plugin for WordPress is vulnerable to Stored Cross-Site Scripting via 'choice' Post Meta via Insert/Update Post Action in all versions up to, and including, 3.6.5.4 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 injected payload is submitted via the unauthenticated wp_ajax_nopriv_jet_form_builder_submit endpoint, stored verbatim into post meta through the Insert/Update Post action, and later rendered unescaped by the Select Field block template when the get_from_db option generator copies raw meta values into option value attributes and label content.

Executive ViewAI

Why It Matters

JetFormBuilder versions through 3.6.5.4 contain a stored cross-site scripting flaw that can expose visitors to malicious JavaScript on WordPress sites using specific form configurations. Because no vendor patch is available, organizations relying on this plugin for public-facing forms may face session hijacking, credential theft, or brand damage. No public exploit identified at time of analysis, but leadership should prioritize identifying and mitigating exposed sites, especially those with high visitor traffic or sensitive user interactions.

Business Impact: High
Compensating Controls

No vendor-released patch identified at time of analysis; interim mitigations include disabling the JetFormBuilder plugin, removing or disabling Insert/Update Post actions and Select/get_from_db fields from publicly accessible forms, blocking or filtering submissions to wp_ajax_nopriv_jet_form_builder_submit via WAF, scanning post meta for unexpected script content, and enforcing a Content Security Policy to reduce script execution.

Threat Intelligence Overview

EPSS Score
0.2%
Top 86% exploitable
Prevalence
Medium
popular Crocoblock WordPress form plugin, large but not universal install base
Data Quality
6 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GitHub VulDB

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.2%
Patch available No
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact
High
Technical Impact
Partial

Priority Score

36
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +36
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy