Skip to main content
CVE Vulnerability Database

CVE-2026-8892: CM Business Directory Plugin XSS Vulnerability

CVE-2026-8892 is a stored cross-site scripting vulnerability in the CM Business Directory WordPress plugin that allows contributors to inject malicious scripts via address meta fields. This article covers technical details, affected versions, impact, and mitigation strategies.

Published:

CVE-2026-8892 Overview

CVE-2026-8892 is a Stored Cross-Site Scripting (XSS) vulnerability in the CM Business Directory WordPress plugin, affecting all versions up to and including 1.5.7. The flaw exists in the Business Address Meta Fields due to insufficient input sanitization and output escaping. Authenticated attackers with contributor-level access or above can inject arbitrary web scripts that execute when users view affected pages. The payload is stored in post meta rather than post_content, which bypasses WordPress's unfiltered_html capability restriction. The vulnerability is tracked under CWE-79.

Critical Impact

Contributor-level users can inject persistent JavaScript payloads that execute in the browsers of administrators and visitors, enabling session theft, forced administrative actions, and account takeover.

Affected Products

  • CM Business Directory – Optimise and showcase local business plugin for WordPress
  • All versions up to and including 1.5.7
  • WordPress sites permitting contributor-level user registration

Discovery Timeline

  • 2026-07-03 - CVE-2026-8892 published to NVD
  • 2026-07-06 - Last updated in NVD database

Technical Details for CVE-2026-8892

Vulnerability Analysis

The vulnerability resides in the CM Business Directory plugin's handling of business address metadata. User-supplied values submitted through the address input fields are persisted directly into WordPress post meta without adequate sanitization. When the frontend business page shortcode renders these values, they are echoed to the page without proper output escaping. This allows any authenticated user with at least contributor privileges to inject executable HTML and JavaScript. Because payloads are stored in post meta rather than post content, the WordPress unfiltered_html capability check does not apply, so contributor accounts that would normally be blocked from raw HTML submission can still deliver script content.

Root Cause

The root cause is a combination of missing input sanitization on write and missing output escaping on read across the following meta fields: cmbd_address, cmbd_cityTown, cmbd_stateCounty, cmbd_postalcode, cmbd_region, and cmbd_country. The backend save routines in cm-business-directory-backend.php store raw input, and the frontend rendering logic in cm-business-directory-business-page-sc.php outputs the values without applying esc_html(), esc_attr(), or equivalent WordPress escaping functions. See the WordPress Plugin Code Reference for the vulnerable render path.

Attack Vector

An authenticated attacker with contributor privileges creates or edits a business directory entry and injects a JavaScript payload into one of the address meta fields. The payload persists in the WordPress database. When an administrator, editor, or visitor loads the affected business page, the browser parses the injected script and executes it in the context of the site's origin. This enables session cookie theft, forced actions via the WordPress REST API, and potential privilege escalation if an administrator triggers the payload.

The vulnerability requires network access, low attack complexity, and low privileges. No user interaction is required beyond visiting the injected page. Because the scope changes from the compromised contributor to any viewing user, impact extends across the site's user base.

Detection Methods for CVE-2026-8892

Indicators of Compromise

  • Post meta entries containing <script>, onerror=, onload=, javascript:, or <svg> payloads in keys prefixed with cmbd_
  • Unexpected outbound HTTP requests from administrator browsers immediately after loading business directory pages
  • New administrator accounts or role changes correlated with contributor-authored directory entries
  • Anomalous edits to directory posts from low-privilege user accounts

Detection Strategies

  • Query the wp_postmeta table for meta_key values matching cmbd_address, cmbd_cityTown, cmbd_stateCounty, cmbd_postalcode, cmbd_region, or cmbd_country containing HTML tag characters
  • Deploy web application firewall rules that inspect POST bodies to plugin endpoints for script tags and event handler attributes
  • Enable browser Content Security Policy (CSP) violation reporting to surface unexpected inline script execution
  • Review WordPress audit logs for contributor account activity creating or editing business directory entries

Monitoring Recommendations

  • Alert on any contributor or author role user modifying business directory post meta after the vulnerability disclosure date
  • Monitor administrator session activity for anomalous REST API calls following page loads containing directory content
  • Track file integrity of the cm-business-directory plugin directory for unauthorized modifications

How to Mitigate CVE-2026-8892

Immediate Actions Required

  • Update the CM Business Directory plugin to a version later than 1.5.7 as soon as the vendor publishes a patched release
  • Audit all existing business directory entries and their post meta for injected script content and remove malicious payloads
  • Review contributor and author accounts, disabling any that are unused or suspicious
  • Rotate administrator session tokens and reset credentials for any account that viewed unverified directory pages

Patch Information

Refer to the WordPress Plugin Change Log and the Wordfence Vulnerability Advisory for the fixed version and remediation details. The fix applies sanitization on save and escaping on output across the affected cmbd_ meta fields.

Workarounds

  • Deactivate the CM Business Directory plugin until a patched version is installed
  • Restrict contributor-level registration and require administrator approval for new accounts
  • Deploy a WAF rule blocking HTML tag characters in POST requests targeting the plugin's save endpoints
  • Apply a site-wide Content Security Policy that disallows inline scripts to reduce the impact of stored XSS payloads
bash
# Example Content Security Policy header for Apache to mitigate inline script execution
Header set Content-Security-Policy "default-src 'self'; script-src 'self'; object-src 'none'; base-uri 'self';"

Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

Default Legacy - Prefooter | Experience the World’s Most Advanced Cybersecurity Platform

Experience the Most Advanced Cybersecurity Platform

See how the world’s most intelligent, autonomous cybersecurity platform can protect your organization today and into the future.