Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
ReconObtain Microweber admin credentials
-
DeliveryCraft decimal entity-encoded XSS payload in tag_names
-
ExploitSubmit GET /api/save_content_admin bypassing all three sanitizers
-
InstallPayload persisted to CMS database
-
C2Victim visits public blog page
-
ExecuteInjected script executes in victim browser
-
ImpactSame-origin CSRF token reused for authenticated action
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 | Admin-level authentication to the Microweber CMS application is required to stage the injection - this is the single most significant limiting condition, confirmed by PR:H in the CVSS 4.0 vector. The content tagging feature must be reachable by the authenticated admin via GET /api/save_content_admin, which is present in default installations through 2.0.20 with no non-default configuration required. The three sanitization bypasses (HTTP-method-blind middleware, narrow unsafe-attribute pattern, decimal entity passthrough) are inherent default behaviors of the codebase - no special mode or feature flag is needed to trigger them. For the stored payload to execute against blog visitors, the public blog page must be live and accessed; for execution in the admin editor, another admin must open the affected post. No special operating system, hosting environment, or plugin configuration beyond a default Microweber installation is required. What limits exploitation: the PR:H admin credential requirement is the primary real-world barrier; absence of a KEV listing suggests no confirmed opportunistic mass targeting at time of analysis. |
| Impact | The CVSS 4.0 score of 4.8 (Medium) is appropriate and reflects the key limiting factor: PR:H requires admin-level authentication before the injection can be staged. The attack vector is network (AV:N) with low complexity once authenticated, so the real-world gate is credential possession, not technical difficulty. Subsequent-system impact is rated Low/Low (SC:L/SI:L) in the CVSS 4.0 vector, consistent with a cross-origin script reaching victim sessions rather than directly compromising server-side resources. Three significant risk amplifiers elevate practical concern beyond the raw score: a public POC exists on GitHub, sharply reducing the skill threshold for exploitation; the payload persists and fires for every blog visitor with zero further interaction, creating a broad blast radius from a single admin compromise; and the CSRF token reuse path enables authenticated actions on behalf of victims, including potential privilege escalation chains if the affected instance has multiple admins. The primary mitigant is the PR:H prerequisite - this is not remotely exploitable without prior admin compromise. EPSS data was not provided. No KEV listing exists, indicating no confirmed mass exploitation. In multi-tenant SaaS deployments of Microweber or environments where admin credentials are shared or weakly protected, practical risk is meaningfully higher than the numeric score implies. |
| Exploit ScenarioDerived | An attacker holding Microweber admin credentials submits a GET request to /api/save_content_admin with a tag_names value containing a decimal entity-encoded event-handler payload - bypassing the middleware, strip_unsafe pattern, and titlecase normalizer - causing the script to be written to the database. Every visitor to the public blog page thereafter executes the payload, which silently reads the CSRF token embedded in the page and issues authenticated same-origin fetch requests to perform admin-level actions on the victim's behalf. A public POC demonstrating this full chain is available at https://github.com/theopaid/Stored-XSS-via-Content-Tag-Names-Microweber-. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 03, 2026
Stored XSS in Microweber CMS through version 2.0.20 allows admin-authenticated attackers to persist arbitrary JavaScript via the tag_names parameter of the GET /api/save_content_admin endpoint, defeating three independent sanitization layers through a combination of HTTP-method blind middleware, an overly narrow unsafe-attribute pattern, and a titlecase normalizer that passes HTML decimal entity-encoded payloads unchanged. Injected scripts execute silently for every public blog visitor and within the admin post editor, enabling same-origin CSRF token abuse for session riding and account takeover chaining. A public proof-of-concept exploit exists; no CISA KEV listing is present at time of analysis.
RemediationAI
No vendor-released patch has been confirmed at time of analysis - neither the VulnCheck advisory nor the POC repository specifies a fixed Microweber version, so patch availability is unconfirmed and administrators should monitor the official Microweber release channel directly. As an immediate compensating control, restrict network access to the /api/save_content_admin endpoint at the WAF or reverse-proxy layer to known administrative IP ranges, eliminating the ability of a compromised admin account operating from an unexpected location to stage the injection (trade-off: disrupts legitimate remote admin workflows). Deploy a strict Content Security Policy header with a restrictive script-src directive to limit the blast radius of any stored payload that reaches a visitor's browser - this does not prevent storage but reduces exploitability of execution. At the WAF level, blocking requests to /api/save_content_admin via GET method (since mutations over GET are anomalous) would eliminate this specific bypass vector without impacting standard POST-based workflows. Full technical reproduction detail is available at https://github.com/theopaid/Stored-XSS-via-Content-Tag-Names-Microweber-.
Affected VersionsENISA
Affected Packages
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
Microweber is a PHP-based open-source CMS (CPE: cpe:2.3:a:microweber:microweber:*:*:*:*:*:*:*:*) whose content tagging subsystem accepts free-form tag names through a GET-method API mutation endpoint - an architectural anomaly that is itself the root of the first bypass. CWE-79 (Improper Neutralization of Input During Web Page Generation) applies across three distinct sanitization failures that compound rather than overlap: (1) the XSS middleware inspects only POST bodies, leaving the GET /api/save_content_admin surface entirely unscreened; (2) the strip_unsafe() function relies on a literal pattern matching double-quoted onerror attributes, failing to catch single-quoted variants, alternate event handlers, or non-attribute payloads; and (3) a titlecase normalizer intended to clean tag display strings passes HTML decimal numeric character references (e.g. < for <) unmodified, which compliant browsers decode at render time before any downstream escaping can occur. The stored tag value is later reflected without encoding on the public blog listing page and within the admin post editor, providing two distinct persistent execution surfaces.
Know when Microweber 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
CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:P/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N
Network-reachable stored XSS requiring admin credentials (PR:H), scope changes to victim browsers (S:C), limited C/I impact, no availability effect.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
DescriptionCVE.org
Microweber CMS through 2.0.20 contains a stored cross-site scripting vulnerability in the content tagging system that allows admin-authenticated attackers to inject arbitrary JavaScript by submitting malicious payloads via the tag_names parameter of the GET /api/save_content_admin endpoint, bypassing three independent sanitization controls including XSS middleware that ignores GET requests, a strip_unsafe() function that only matches double-quoted onerror attributes, and a titlecase normalizer that passes HTML decimal entity-encoded payloads through unchanged. Attackers can store malicious scripts that execute without user interaction for every visitor to the public blog page and within the admin post editor, enabling session riding through same-origin fetch requests using the CSRF token embedded in the page.
Threat Intelligence Overview
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.
Cross-Site Request Forgery exploits the automatic credential inclusion behavior of web browsers.
More in Microweber
View allAuthenticated arbitrary file disclosure in Microweber CMS 1.2.11 and earlier lets any logged-in user read files from the
Command Injection in GitHub repository microweber/microweber prior to 1.3.3. Rated critical severity (CVSS 9.8), this vu
Authentication Bypass by Spoofing in GitHub repository microweber/microweber prior to 1.2.20. Rated critical severity (C
Static Code Injection in GitHub repository microweber/microweber prior to 1.3. Rated critical severity (CVSS 9.8), this
Unauthenticated arbitrary file read in Microweber CMS through version 2.0.20 lets remote attackers retrieve sensitive fi
File Upload vulnerability in Microweber v.2.0.4 allows a remote attacker to execute arbitrary code via a crafted script
Microweber v1.2.15 was discovered to allow attackers to perform an account takeover via a host header injection attack.
Users Account Pre-Takeover or Users Account Takeover. Rated high severity (CVSS 8.8), this vulnerability is remotely exp
Improper Neutralization of Special Elements Used in a Template Engine in GitHub repository microweber/microweber prior t
An issue was discovered in Microweber 1.0.7. Rated high severity (CVSS 8.8), this vulnerability is remotely exploitable,
Authenticated administrators can execute arbitrary OS commands on Microweber CMS through 2.0.20 by injecting unsandboxed
SQL injection vulnerability in Category.php in Microweber CMS 0.95 before 20141209 allows remote attackers to execute ar
EUVD-2026-52487
GHSA-793c-7c93-m769
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB