| Plugin Name | Simplebooklet PDF Viewer and Embedder |
|---|---|
| Type of Vulnerability | Cross-Site Scripting (XSS) |
| CVE Number | CVE-2024-13588 |
| Urgency | Medium |
| CVE Publish Date | 2026-02-02 |
| Source URL | CVE-2024-13588 |
Critical Reminder: CVE-2024-13588 — Authenticated (Contributor) Stored XSS in Simplebooklet PDF Viewer & Embedder (≤ 1.1.2)
Why this advisory matters (quick summary)
Stored XSS remains one of the most damaging web vulnerabilities. Malicious JavaScript running in a victim’s browser can act with that user’s privileges. In WordPress, this can lead to account takeover, data theft, or site persistence if an administrative user is tricked into viewing poisoned content.
CVE‑2024‑13588 is a stored XSS in the Simplebooklet PDF Viewer & Embedder plugin (affecting versions ≤ 1.1.2). A user with Contributor role (or higher) can persist payloads that are later rendered unescaped in contexts that execute script. The vendor released version 1.1.3 to address the issue — apply the update as soon as possible.
This advisory provides a practical breakdown: how the vulnerability works, which sites are at risk, safe detection methods, mitigation steps you can apply immediately (including managed WAF / virtual patching), and an incident response checklist.
CVE at a glance
- Vulnerability: Authenticated (Contributor+) Stored Cross‑Site Scripting (XSS)
- CVE: CVE‑2024‑13588
- Affected versions: Simplebooklet PDF Viewer & Embedder ≤ 1.1.2
- Fixed in: 1.1.3
- CVSS3 base score: 6.5 (AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:L)
- Required privilege: Contributor (authenticated)
- User interaction: Required (UI:R)
- Primary impact: Execution of attacker-controlled JavaScript in victim browsers (confidentiality, integrity, availability impacts possible)
How stored XSS like this typically works (technical explanation)
- A malicious or compromised user with Contributor privileges submits content to a plugin-controlled field (e.g., description, embed HTML) that the plugin stores in the database.
- The plugin later displays that stored content in a context that fails to escape or sanitize HTML/attributes. When an admin, editor, or visitor loads the page, the script executes in their browser.
- If the rendered context includes authentication cookies, the script can make authenticated requests, exfiltrate data, or perform actions on behalf of the victim.
- Because the content is persisted, the attack is persistent and affects any user who views the infected content.
Stored XSS persists in stored content (database or plugin meta), unlike reflected XSS, so a single contributor account can impact many pages.
Realistic exploitation scenarios
- A contributor adds malicious markup in a booklet description. An editor or admin previews the booklet; the payload runs and can steal session tokens or call REST/AJAX endpoints to create accounts.
- Malicious attributes (onmouseover, onerror) in images/iframes display to public visitors; visitors execute the payload when loading the page.
- Attackers use staged payloads that load further scripts from external domains, making detection harder.
- Combined with other weaknesses, stored XSS may lead to persistent backdoors or full site compromise.
Exploitability depends on how and where the plugin renders content; not every site exposes an administrative render context. Still, any site allowing Contributors to add HTML-enabled content is at elevated risk until patched.
Immediate actions for WordPress administrators (ordered checklist)
- Update the plugin now
- Upgrade Simplebooklet to version 1.1.3 (or later). This is the permanent fix and should be done immediately when possible.
- If you are in a managed environment or under a change freeze, treat this as emergency maintenance.
- If you cannot update immediately, temporarily disable the plugin
- Disabling stops rendering of vulnerable templates. If disabling is not viable, restrict visibility of plugin output until patched.
- Limit contributor privileges
- Audit accounts with Contributor role or higher. Remove or downgrade unknown accounts.
- Force password resets for contributors and other editorial accounts until the site is patched.
- Apply managed WAF / virtual patching where available
- Deploy rules to block suspicious input and obvious script injection attempts in fields handled by the plugin. Virtual patching reduces attack surface while you update.
- Scan for injected content
- Search the database for script tags and suspicious attributes in plugin-managed fields (see detection section for safe commands).
- Use a trusted malware scanner and inspect both filesystem and database.
- Monitor logs and sessions
- Review web access logs and admin activity logs for suspicious requests, new admin users, or unexpected role changes.
- Revoke persistent sessions for admin/editor accounts if you detect anomalies.
- Restore from a known clean backup if compromise is confirmed
- If you find backdoors or indicators of compromise that cannot be cleaned reliably, restore from a clean snapshot taken before the incident.
Detection — safe, practical techniques
Important: Do not run exploit payloads. Detect only.
A. Search posts and plugin database tables for suspicious content
Stored XSS payloads commonly include script tags, event attributes (onmouseover, onerror), or encoded payloads. Use database queries to find instances.
-- find pages/posts with <script> tag in post content
SELECT ID, post_title
FROM wp_posts
WHERE post_content LIKE '%<script%';
-- search for event handlers in post content
SELECT ID, post_title
FROM wp_posts
WHERE post_content REGEXP '(onload|onerror|onmouseover|onclick)[[:space:]]*=';
-- search plugin meta tables if the plugin uses custom tables
SELECT * FROM wp_postmeta WHERE meta_value LIKE '%<script%' LIMIT 100;
B. Use WP-CLI to search content (safe, fast)
# Find files in uploads or theme/plugin folders that contain <script
wp search-replace '<script' '<script' --dry-run --skip-columns=guid
# Use grep to search exported DB dump for suspicious terms (offline)
grep -n -iE "<script|onerror=|onload=" db-dump.sql
C. Scan with a quality malware scanner
Run full scans of both filesystem and database. Look for injected code, modified plugin files, and web shells.
D. Review admin activity
Check wp_users and wp_usermeta for unexpected role grants or newly created admin accounts. Inspect recent edits by Contributors.
E. Look for anomalous outgoing traffic
Unexpected connections to external domains (from cron jobs, PHP scripts, or unexpected processes) can indicate post-exploitation activity.
How a managed WAF can protect you right now
A properly configured managed Web Application Firewall (WAF) provides two immediate benefits:
- Virtual patching — inspect incoming requests and block malicious input patterns before they reach WordPress or the plugin, reducing the attack window while you apply the vendor patch.
- Runtime protection — monitor execution contexts and block suspicious outbound actions or filtering of dangerous outputs triggered by in-browser scripts.
Suggested virtual patching rule concepts for stored XSS in plugin inputs: