| Plugin Name | WordPress Simple Popup Plugin |
|---|---|
| Type of Vulnerability | Cross-Site Scripting |
| CVE Number | CVE-2024-8547 |
| Urgency | Low |
| CVE Publish Date | 2026-02-02 |
| Source URL | CVE-2024-8547 |
Urgent Security Advisory: CVE-2024-8547 — Stored XSS in Simple Popup Plugin (<= 4.5) and How to Protect Your WordPress Site
Author: Hong Kong Security Expert
Date: 2026-02-02
Summary: A stored Cross‑Site Scripting vulnerability affecting Simple Popup plugin versions ≤ 4.5 allows authenticated contributors to inject persistent JavaScript. This advisory explains the risk, technical mechanics, detection, containment and remediation steps, and recommended mitigations.
Note: This advisory is issued to help site owners and administrators respond quickly. Treat the issue as actionable if you have the plugin installed.
Executive summary
A stored Cross‑Site Scripting (XSS) vulnerability (CVE‑2024‑8547) impacts the Simple Popup plugin through version 4.5. An authenticated user with the Contributor role (or higher) can save JavaScript within popup content fields that later execute in other users’ browsers, including administrators and site visitors. The vendor has released a fixed version: 4.6.
- Affected versions: ≤ 4.5
- Fixed in: 4.6
- CVE: CVE‑2024‑8547
- CVSS (reported): 6.5 (Medium)
- Required privilege: Contributor (authenticated)
- Impact: Stored XSS — persistent client‑side code injection executed in browsers of admin users and visitors
- Mitigation: Update to 4.6 or later; apply immediate containment and hardening steps below
What is stored XSS and why this matters
Stored (persistent) XSS occurs when an attacker injects malicious scripts that are saved on the server (database, options, plugin tables, etc.) and later served to other users without proper sanitization or escaping. Because payloads persist, they can affect many users over time and may remain undetected.
Why this issue is significant:
- An attacker needs only a Contributor account — a common role on many publishing sites.
- Payloads execute in the site context when popups are rendered, potentially impacting administrators and visitors.
- Possible impacts include session theft, CSRF against administrative actions, silent redirects, ad injection, and social‑engineering driven malware installation.
- Stored payloads are harder to find than single reflected attacks because they live in the site data.
The real business risk depends on how many untrusted contributors your site allows and the workflows that enable them to save content that will be rendered to other users.
How the vulnerability works (technical overview)
- The plugin exposes an administrative UI or AJAX endpoint that allows authenticated users (Contributor and above) to create or edit popup entries (title, content, display rules).
- Input from the popup content field (and possibly other fields) is saved without adequate sanitization or output escaping.
- When a page loads that triggers the popup, the plugin outputs the stored content directly into the page DOM, allowing browsers to execute any script contained in that content.
- Because the payload is persistent, any user loading the popup (including admins) can execute the malicious code, enabling further client‑side attacks.
Common coding failures:
- Missing server‑side sanitization (relying solely on client‑side filters).
- Echoing raw content into the page without using esc_html, esc_attr, wp_kses (with safe allowed tags) or json‑encoding when embedding into JS.
- Improper capability checks on endpoints that save content (e.g., AJAX handlers not validating current_user_can).
- Assuming Contributor cannot save content that will be rendered to admins.
Example of a trivial payload (escaped to avoid execution):
Realistic attack scenarios
- Guest contributor injection: An external contributor submits popup content containing JavaScript; an admin previews or visits a page that triggers the popup and the script runs in the admin’s browser.
- Targeted privilege escalation: Injected script performs CSRF to change admin settings, create an admin user, or modifies content via the admin session.
- Mass exploitation: Popups shown to all visitors can redirect users, inject ads, or run cryptomining in visitor browsers.
- Backdoor drop: Script contacts an attacker server and instructs it to post further malicious content or deliver follow‑on exploits.
The risk grows with the number of Contributor accounts and how widely popups are rendered.
Quick detection checklist (what to look for now)
If you run Simple Popup ≤ 4.5, check the following immediately:
- Plugin version: Confirm installed version and prioritise updating if ≤ 4.5.
- Admin previews and listings: Look for unexpected content in popup previews.
- Database search: Search for script tags or suspicious attributes in popup tables and postmeta (examples below).
- Recent Contributor edits: Audit recent edits and creations by users with Contributor role for anomalous content.
- Server/WAF logs: Look for POST requests to plugin endpoints with script tags or suspicious payloads.
- File system: While XSS typically doesn’t modify files, check for unexpected uploads or changed plugin/theme files as part of a broader compromise.