CVE-2025-24712
Executive Summary
CVE-2025-24712 is a Cross-Site Request Forgery (CSRF) vulnerability in the Radius Blocks WordPress plugin, developed by RadiusTheme. This flaw allows an attacker to trick an authenticated administrator into performing unintended actions, such as modifying plugin settings or injecting malicious content, without their consent. The vulnerability affects all versions up to and including 2.1.2. As a WordPress plugin issue, the attack surface is limited to sites running the vulnerable plugin, and exploitation requires user interaction (e.g., clicking a crafted link). The CVSS score of 5.4 (Medium) reflects the need for user interaction and the limited impact on confidentiality, integrity, and availability.
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 resides in a WordPress plugin distributed via the official WordPress plugin repository. Users who installed the plugin from the WordPress dashboard or via direct download are affected. No package manager (NPM, PyPI, Go, Ruby) is involved. The supply chain risk is moderate, as the plugin is not actively maintained with a patch, and users must rely on manual mitigation or removal.
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:L/A:L
- Base Score: 5.4 (Medium)
- Attack Vector (AV): Network – The attack is launched remotely.
- Attack Complexity (AC): Low – No special conditions required.
- Privileges Required (PR): None – The attacker does not need authentication.
- User Interaction (UI): Required – The victim must click a link or visit a malicious page.
- Scope (S): Unchanged – The vulnerable component remains the same.
- Confidentiality (C): None – No data exposure.
- Integrity (I): Low – Limited ability to modify data (e.g., plugin settings).
- Availability (A): Low – Limited ability to disrupt service.
Threat Level: Medium. Exploitation requires social engineering, but the impact can include unauthorized changes to the WordPress site, such as altering block configurations or injecting malicious scripts.
Deep Dive & Mechanics
The vulnerability exists in the Radius Blocks plugin due to missing or improper CSRF nonce validation on state-changing requests. WordPress plugins typically use nonces (number used once) to verify that requests originate from the legitimate admin interface. In this plugin, certain AJAX endpoints or form submissions lack this validation, allowing an attacker to craft a malicious request that, when executed by an authenticated admin, performs actions on their behalf.
Attack Flow:
- The attacker identifies a vulnerable endpoint (e.g.,
/wp-admin/admin-ajax.php?action=radius_blocks_update_settings). - The attacker crafts a malicious HTML page or email containing a CSRF payload (e.g., a hidden form that auto-submits).
- The victim (authenticated WordPress admin) visits the malicious page.
- The victim’s browser sends the forged request to the WordPress site, including the victim’s session cookies.
- The server processes the request without validating the nonce, executing the attacker’s intended action (e.g., changing plugin settings, adding malicious blocks).
Root Cause: The plugin’s code does not call check_ajax_referer() or wp_verify_nonce() on sensitive actions, leaving the CSRF protection gap.
Vulnerable vs. Patched Code
Since no official patch is available, the following illustrates the vulnerable pattern and a hypothetical fix.
Vulnerable Code (e.g., in radius-blocks/includes/class-ajax.php):
add_action('wp_ajax_radius_blocks_update_settings', 'radius_blocks_update_settings_callback');
function radius_blocks_update_settings_callback() {
// Missing nonce check
$settings = $_POST['settings'];
update_option('radius_blocks_settings', $settings);
wp_die();
}
Patched Code (Hypothetical):
add_action('wp_ajax_radius_blocks_update_settings', 'radius_blocks_update_settings_callback');
function radius_blocks_update_settings_callback() {
// Added nonce verification
if (!check_ajax_referer('radius_blocks_nonce', 'nonce', false)) {
wp_die('CSRF validation failed.');
}
$settings = $_POST['settings'];
update_option('radius_blocks_settings', $settings);
wp_die();
}
Exploitation & Lab Setup
Red Team (Attack Simulation)
Prerequisites:
- A WordPress site with Radius Blocks plugin version <= 2.1.2.
- An authenticated admin user session.
- A controlled attacker server to host the CSRF payload.
Step 1: Identify Vulnerable Endpoint
Use browser developer tools or intercept traffic to find AJAX actions. Example: admin-ajax.php?action=radius_blocks_update_settings.
Step 2: Craft CSRF Payload
Create an HTML file (csrf.html) that auto-submits a form to the vulnerable endpoint:
<html>
<body>
<form id="csrf" action="http://target-site.com/wp-admin/admin-ajax.php" method="POST">
<input type="hidden" name="action" value="radius_blocks_update_settings">
<input type="hidden" name="settings" value='{"malicious": "data"}'>
<input type="submit" value="Submit">
</form>
<script>document.getElementById('csrf').submit();</script>
</body>
</html>
Step 3: Deliver Payload Host the file on an attacker server and send the link to the victim (e.g., via email or social engineering).
Step 4: Verify Exploitation Check the WordPress site for altered settings or injected content.
Blue Team (Defense & Detection)
Detection:
- Monitor for unexpected AJAX requests to
admin-ajax.phpwith actions related to Radius Blocks. - Look for referrer headers that do not match the WordPress admin domain.
- Use the Sigma rule below to detect CSRF attempts.
Mitigation:
- Disable or remove the Radius Blocks plugin until a patch is available.
- Implement a Web Application Firewall (WAF) rule to block requests to
admin-ajax.phpwith suspicious referrers. - Educate users about phishing and CSRF attacks.
Indicators of Compromise (IOCs)
- Network IOCs:
- HTTP POST requests to
/wp-admin/admin-ajax.phpwithaction=radius_blocks_*parameters. - Referrer headers pointing to external domains.
- HTTP POST requests to
- File IOCs:
- Modified
wp_optionstable entries forradius_blocks_settings. - Unexpected files in
/wp-content/uploads/or/wp-content/plugins/radius-blocks/.
- Modified
- Log IOCs:
- WordPress debug log entries showing failed nonce checks (if logging enabled).
- Web server access logs with unusual POST requests to
admin-ajax.php.
Detection Engineering
YARA Rule
rule CVE_2025_24712_CSRF_RadiusBlocks {
meta:
description = "Detects CSRF exploitation attempts against Radius Blocks plugin"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-24712"
strings:
$ajax_action = "radius_blocks_update_settings" nocase
$ajax_action2 = "radius_blocks_save" nocase
$nonce_missing = "check_ajax_referer" nocase
condition:
any of ($ajax_action*) and not $nonce_missing
}
Sigma Rule
title: CVE-2025-24712 CSRF Exploitation Attempt
id: 8f3a2b1c-4d5e-6f7a-8b9c-0d1e2f3a4b5c
status: experimental
description: Detects CSRF attempts against Radius Blocks plugin
author: Valters IT
logsource:
category: webserver
product: apache
service: access_combined
detection:
selection:
cs-method: 'POST'
cs-uri-query|contains: 'admin-ajax.php'
cs-uri-query|contains: 'action=radius_blocks_'
condition: selection
falsepositives:
- Legitimate admin actions
level: medium
Suricata Rule
alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"CVE-2025-24712 CSRF Radius Blocks"; flow:to_server,established; content:"POST"; http_method; content:"admin-ajax.php"; http_uri; content:"action=radius_blocks_"; http_uri; classtype:attempted-recon; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable the Plugin: Deactivate and delete the Radius Blocks plugin from the WordPress admin dashboard until a patch is released.
- Review Site Integrity: Check for unauthorized changes to plugin settings or injected content.
- Update WordPress Core: Ensure WordPress is updated to the latest version for built-in security improvements.
Long-Term Mitigation:
- Monitor the plugin’s official page for updates and apply patches immediately.
- Implement a Web Application Firewall (WAF) with CSRF protection rules.
- Enforce the use of nonces in all custom plugin development.
- Conduct regular security audits of third-party plugins.
Workaround (if plugin must remain active):
- Add a custom function to the theme’s
functions.phpto validate nonces on all AJAX requests:
add_action('wp_ajax_radius_blocks_update_settings', 'custom_csrf_check', 1);
function custom_csrf_check() {
if (!check_ajax_referer('radius_blocks_nonce', 'nonce', false)) {
wp_die('CSRF validation failed.');
}
}
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.