CVE-2025-69311
Executive Summary
CVE-2025-69311 is a Missing Authorization vulnerability in the Broadstreet Ads WordPress plugin, affecting versions up to and including 1.52.1. This flaw allows an unauthenticated attacker to exploit incorrectly configured access control security levels, potentially leading to unauthorized data access or modification. The vulnerability is classified as High Severity with a CVSS score of 7.6, yet the EPSS score is 0.0%, indicating low exploitation likelihood at this time. No official patch or public exploit code is available, making proactive detection and mitigation critical.
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. Users should verify the integrity of their plugin files and monitor for updates from the vendor. Since no patch exists, consider disabling or removing the plugin until a fix is released.
CVSS Breakdown & Threat Level
- CVSS Score: 7.6 (High)
- Attack Vector: Network (AV:N)
- Attack Complexity: Low (AC:L)
- Privileges Required: None (PR:N)
- User Interaction: None (UI:N)
- Scope: Unchanged (S:U)
- Confidentiality Impact: High (C:H)
- Integrity Impact: High (I:H)
- Availability Impact: None (A:N)
The high confidentiality and integrity impacts, combined with no required privileges or user interaction, make this a serious threat for unpatched WordPress sites.
Deep Dive & Mechanics
The vulnerability stems from Missing Authorization (CWE-862) in the Broadstreet Ads plugin. The plugin fails to properly validate user permissions when processing certain AJAX actions or REST API endpoints. An unauthenticated attacker can send crafted HTTP requests to trigger administrative functions, such as modifying ad configurations, accessing stored API keys, or altering plugin settings.
The root cause is likely in the plugin's broadstreet-ads.php or related admin-ajax handlers, where current_user_can() checks are either missing or incorrectly implemented. This allows any remote user to invoke privileged methods without authentication.
Vulnerable vs. Patched Code
Since no patch is available, the vulnerable code remains in all versions <= 1.52.1. A hypothetical patch would add proper capability checks:
Vulnerable Code (example):
add_action('wp_ajax_broadstreet_save_settings', 'broadstreet_save_settings');
function broadstreet_save_settings() {
// Missing authorization check
update_option('broadstreet_settings', $_POST);
}
Patched Code (hypothetical):
add_action('wp_ajax_broadstreet_save_settings', 'broadstreet_save_settings');
function broadstreet_save_settings() {
if (!current_user_can('manage_options')) {
wp_die('Unauthorized');
}
update_option('broadstreet_settings', $_POST);
}
Exploitation & Lab Setup
Red Team
- Reconnaissance: Identify WordPress sites using Broadstreet Ads via Shodan dorks or WPScan.
- Exploitation: Send a crafted POST request to the vulnerable endpoint:
curl -X POST http://target/wp-admin/admin-ajax.php \ -d 'action=broadstreet_save_settings&key=value' - Post-Exploitation: Extract stored API keys or modify ad configurations to serve malicious content.
Blue Team
- Detection: Monitor for unusual
admin-ajax.phprequests from unauthenticated users. - Honeypot: Deploy a fake Broadstreet Ads endpoint to log attacker behavior.
- Containment: Disable the plugin immediately if exploitation is suspected.
Indicators of Compromise (IOCs)
- Network: HTTP POST requests to
/wp-admin/admin-ajax.phpwithaction=broadstreet_*parameters from unauthenticated sources. - File: Modified
broadstreet-ads.phpor unexpected changes inwp_optionstable forbroadstreet_settings. - Log: WordPress debug logs showing
wp_ajax_broadstreet_*calls without valid nonces.
Detection Engineering
YARA Rule
rule detect_broadstreet_missing_auth {
meta:
description = "Detects Broadstreet Ads plugin files with missing authorization"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-69311"
strings:
$vuln_func = "wp_ajax_broadstreet" nocase
$missing_check = "current_user_can" nocase
condition:
$vuln_func and not $missing_check
}
Sigma Rule
title: Broadstreet Ads Missing Authorization Exploitation
id: 8a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d
status: experimental
description: Detects unauthenticated requests to Broadstreet Ads AJAX endpoints
logsource:
category: webserver
product: apache
detection:
selection:
cs-method: 'POST'
c-uri|contains: '/wp-admin/admin-ajax.php'
cs-uri-query|contains: 'action=broadstreet_'
sc-status: 200
condition: selection
falsepositives:
- Legitimate admin actions (requires authentication)
level: high
Suricata Rule
alert http any any -> $HOME_NET any (
msg:"CVE-2025-69311 - Broadstreet Ads Missing Authorization Attempt";
flow:to_server,established;
content:"POST"; http_method;
content:"/wp-admin/admin-ajax.php"; http_uri;
content:"action=broadstreet_"; http_client_body;
classtype:attempted-admin;
sid:1000001;
rev:1;
)
Remediation & Mitigation
- Immediate: Disable or remove the Broadstreet Ads plugin until a patch is released.
- Workaround: Implement a Web Application Firewall (WAF) rule to block unauthenticated requests to
admin-ajax.phpcontainingaction=broadstreet_. - Monitoring: Enable detailed logging for AJAX requests and review for anomalies.
- Vendor Contact: Reach out to Broadstreet for patch status and consider alternative ad management plugins.
Valters IT
Senior DevSecOps & Cyber Threat Intelligence Expert
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.