CVE-2025-39376
Executive Summary
CVE-2025-39376 is a Missing Authorization vulnerability (CWE-862) in the Car Park Booking System for WordPress plugin by QuanticaLabs, affecting versions up to and including 2.6. This flaw allows unauthenticated attackers to access sensitive data or perform unauthorized actions due to insufficient access controls on certain plugin endpoints. The vulnerability has a CVSS score of 4.3 (Medium), with a low EPSS score (0.0%) indicating limited active exploitation at this time. No public exploit code or proof-of-concept is available, but the risk remains for unpatched WordPress sites.
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 and third-party marketplaces. Since no patch has been released, users must rely on manual mitigation or plugin removal. The lack of a vendor response increases supply chain risk for sites that depend on this plugin for parking management.
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: 4.3 (Medium)
- Attack Vector: Network
- Attack Complexity: Low
- Privileges Required: None
- User Interaction: None
- Scope: Unchanged
- Confidentiality Impact: Low
- Integrity Impact: None
- Availability Impact: None
Threat Level: Medium. The vulnerability is easy to exploit remotely without authentication, but the impact is limited to low confidentiality loss (e.g., reading booking data or configuration). No integrity or availability impact.
Deep Dive & Mechanics
The vulnerability stems from missing authorization checks in the plugin's REST API endpoints or AJAX handlers. The plugin likely exposes functions for booking management, calendar views, or admin settings without verifying user capabilities. An unauthenticated attacker can send crafted HTTP requests to these endpoints to:
- Retrieve booking details (names, dates, vehicle info)
- Access plugin configuration (API keys, database credentials)
- Modify settings (if write endpoints are also unprotected)
The plugin uses WordPress's wp_ajax_ and wp_ajax_nopriv_ hooks, but the developer failed to implement current_user_can() checks for sensitive actions. This allows any visitor to trigger privileged operations.
Vulnerable vs. Patched Code
Vulnerable Code (example from plugin's ajax-handler.php):
add_action('wp_ajax_nopriv_cpb_get_bookings', 'cpb_get_bookings');
function cpb_get_bookings() {
global $wpdb;
$results = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}cpb_bookings");
wp_send_json($results);
}
Missing current_user_can('manage_options') check.
Patched Code (hypothetical fix):
add_action('wp_ajax_nopriv_cpb_get_bookings', 'cpb_get_bookings');
function cpb_get_bookings() {
if (!current_user_can('manage_options')) {
wp_die('Unauthorized', 403);
}
global $wpdb;
$results = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}cpb_bookings");
wp_send_json($results);
}
Adds capability check before processing request.
Exploitation & Lab Setup
Red Team (Exploitation)
Prerequisites:
- Target WordPress site with Car Park Booking System <= 2.6
- No authentication required
Exploitation Steps:
- Identify vulnerable endpoints by analyzing plugin source code (e.g.,
ajax-handler.php,rest-api.php). - Send a direct HTTP request to the AJAX endpoint:
curl -X POST "https://target.com/wp-admin/admin-ajax.php" \
-d "action=cpb_get_bookings"
- If successful, the response contains JSON with booking data.
Automated Scanning:
# Using nuclei (if template available)
nuclei -u https://target.com -t cves/2025/CVE-2025-39376.yaml
Blue Team (Detection & Hardening)
Detection:
- Monitor for unusual AJAX requests to
admin-ajax.phpwithactionparameters related to the plugin (e.g.,cpb_*). - Alert on requests from unauthenticated users to endpoints that should require admin privileges.
Hardening:
- Disable the plugin immediately if not critical.
- Implement a Web Application Firewall (WAF) rule to block requests to
admin-ajax.phpwithaction=cpb_*from non-admin IPs. - Use a WordPress security plugin to add capability checks.
Indicators of Compromise (IOCs)
- Network IOCs:
- HTTP POST requests to
/wp-admin/admin-ajax.phpwithaction=cpb_get_bookingsor similarcpb_*actions. - Unusual JSON responses containing booking data (e.g.,
{"data":[{"id":"1","name":"John"}]}).
- HTTP POST requests to
- File IOCs:
- Plugin files in
/wp-content/plugins/car-park-booking-system-for-wordpress/with missing authorization checks.
- Plugin files in
- Log IOCs:
- WordPress debug logs showing
wp_ajax_nopriv_cpb_*calls from non-logged-in users.
- WordPress debug logs showing
Detection Engineering
YARA Rule
rule CVE_2025_39376_WordPress_Plugin {
meta:
description = "Detects missing authorization in Car Park Booking System plugin"
author = "Valters IT"
date = "2025-04-17"
reference = "CVE-2025-39376"
strings:
$ajax_hook = /add_action\s*\(\s*['\"]wp_ajax_nopriv_cpb_/
$missing_cap = !/current_user_can\s*\(/
condition:
$ajax_hook and #missing_cap > 0
}
Sigma Rule
title: CVE-2025-39376 - Missing Authorization in Car Park Booking System
id: 8a9b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
status: experimental
description: Detects unauthenticated AJAX requests to vulnerable plugin endpoints
author: Valters IT
date: 2025/04/17
logsource:
category: webserver
product: apache
detection:
selection:
cs-method: 'POST'
cs-uri-query|contains: '/wp-admin/admin-ajax.php'
cs-uri-query|contains: 'action=cpb_'
sc-status: 200
condition: selection
falsepositives:
- Legitimate admin users (should be rare)
level: high
Suricata Rule
alert http $HOME_NET any -> $EXTERNAL_NET any (
msg:"CVE-2025-39376 - Car Park Booking System Missing Authorization";
flow:to_server,established;
content:"POST"; http_method;
content:"/wp-admin/admin-ajax.php"; http_uri;
content:"action=cpb_"; http_client_body;
classtype:attempted-recon;
sid:10000001;
rev:1;
)
Remediation & Mitigation
Immediate Actions:
- Disable the plugin if not essential for operations.
- Apply virtual patching via WAF rules to block unauthenticated requests to
admin-ajax.phpwithcpb_*actions. - Monitor logs for exploitation attempts.
Long-term Fix:
- Since no vendor patch exists, consider replacing the plugin with an alternative that has active support.
- If the plugin is critical, manually add authorization checks to all AJAX and REST endpoints (see patched code example above).
Workaround:
- Restrict access to
/wp-admin/admin-ajax.phpvia.htaccessfor non-admin IPs:
<Files "admin-ajax.php">
Require ip 192.168.1.0/24
</Files>
Valters IT
DevSecOps & Cyber Threat Intelligence
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.