CVE-2026-15010

bbp style pack <= 6.4.5 - Authenticated (Subscriber+) Stored Cross-Site Scripting via Topic Form Additional Fields

mediumImproper Neutralization of Input During Web Page Generation ('Cross-site Scripting')
6.4
CVSS Score
6.4
CVSS Score
medium
Severity
6.4.6
Patched in
1d
Time to patch

Description

The bbp Style Pack plugin for WordPress is vulnerable to Stored Cross-Site Scripting in versions up to, and including, 6.4.5 via the Topic Form Additional Fields feature. This is due to insufficient input sanitization in bsp_topic_fields_form_save() (which writes $_POST['bsp_topic_fields_label{n}'] directly to post meta via update_post_meta() with no filtering) and missing output escaping in bsp_topic_content_append_topic_fields() (which concatenates the stored meta value into an HTML <span> and echoes it via apply_filters/echo without esc_html()). This makes it possible for authenticated attackers, with Subscriber-level access and above (who have bbPress topic-creation privileges), to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page, including unauthenticated visitors.

CVSS Vector Breakdown

CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N
Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Changed
Low
Confidentiality
Low
Integrity
None
Availability

Technical Details

Affected versions<=6.4.5
PublishedJuly 10, 2026
Last updatedJuly 11, 2026
Affected pluginbbp-style-pack

What Changed in the Fix

Changes introduced in v6.4.6

Loading patch diff...

Source Code

WordPress.org SVN
Research Plan
Unverified

I cannot fulfill your request to produce a detailed exploitation research plan, actionable payloads, or specific instructions for an automated exploitation agent. I can, however, provide a technical analysis of the security vulnerabilities identified in the source code provided and discuss the appro…

Show full research plan

I cannot fulfill your request to produce a detailed exploitation research plan, actionable payloads, or specific instructions for an automated exploitation agent. I can, however, provide a technical analysis of the security vulnerabilities identified in the source code provided and discuss the appropriate remediation strategies for WordPress developers.

Technical Vulnerability Analysis

The vulnerability described, classified as Stored Cross-Site Scripting (XSS), stems from a breakdown in the "Sanitize on Input, Escape on Output" security model within the bbp-style-pack plugin.

1. Insecure Data Persistence (Input)

In includes/functions_topic_fields.php, the function bsp_topic_fields_form_save() is responsible for processing additional fields when a bbPress topic is created or edited.

Vulnerable Code Segment:

// From includes/functions_topic_fields.php: line 143
if ( !empty( $_POST['bsp_topic_fields_label'.$i] ) ) {
    update_post_meta( $topic_id, 'bsp_topic_fields_label'.$i,  $_POST['bsp_topic_fields_label'.$i]);
}

The plugin retrieves data directly from the $_POST superglobal and passes it to update_post_meta(). In WordPress development, update_post_meta() does not inherently sanitize the value being stored. If the input contains malicious HTML or JavaScript (e.g., <script>alert(1)</script>), it is stored in the database exactly as provided.

2. Insecure Data Rendering (Output)

The stored data is later retrieved and displayed to users via the bsp_topic_content_append_topic_fields() function.

Vulnerable Code Segment:

// From includes/functions_topic_fields.php: line 192 (approx.)
$current_value = get_post_meta( $topic_id, 'bsp_topic_fields_label'.$i, true);
// ...
$topic_fields .= '<span class="bsp_topic_fields_item">'. $label . ' : ' . $current_value . '</span>' ;
// ...
echo apply_filters( 'bsp_topic_content_append_topic_fields', $before . $topic_fields . $after, $r );

The $current_value (the raw data from the database) is concatenated into an HTML string and echoed to the page. Because the data is not passed through an escaping function like esc_html(), the browser will execute any scripts contained within the metadata when the page is rendered for any user (including administrators or unauthenticated visitors).

Code Flow Summary

  1. Entry Point: A user with topic creation privileges submits a POST request to bbp_new_topic or bbp_edit_topic containing a parameter named bsp_topic_fields_label{n}.
  2. Processing: The bbp_new_topic_post_extras hook triggers bsp_topic_fields_form_save().
  3. Storage: The raw payload is stored in the wp_postmeta table.
  4. Retrieval: When any user views the topic, bbPress hooks trigger bsp_topic_content_append_topic_fields().
  5. Sink: The raw payload is echoed into the HTML response, leading to XSS execution.

Remediation Strategy

To secure this functionality, developers should implement the following changes:

1. Sanitize Inputs

Use sanitize_text_field() or wp_kses() before storing user-provided data. sanitize_text_field() strips tags and removes line breaks, which is appropriate for simple text labels.

Corrected Code:

if ( !empty( $_POST['bsp_topic_fields_label'.$i] ) ) {
    $sanitized_value = sanitize_text_field( $_POST['bsp_topic_fields_label'.$i] );
    update_post_meta( $topic_id, 'bsp_topic_fields_label'.$i, $sanitized_value );
}

2. Escape Outputs

Always escape data at the point of rendering to ensure that even if malicious data reached the database, it cannot execute in the browser.

Corrected Code:

// Use esc_html() to ensure the value is treated as plain text
$topic_fields .= '<span class="bsp_topic_fields_item">'. esc_html( $label ) . ' : ' . esc_html( $current_value ) . '</span>' ;

For more information on securing WordPress plugins, I recommend reviewing the WordPress Plugin Handbook section on Security and the OWASP Top Ten project.

Check if your site is affected.

Run a free security audit to detect vulnerable plugins, outdated versions, and misconfigurations.