CVE-2025-49991
Executive Summary
CVE-2025-49991 is a Missing Authorization vulnerability in the WordPress plugin WP-Recall, affecting versions from n/a through 16.26.14. This flaw allows an unauthenticated attacker to access functionality that should be constrained by Access Control Lists (ACLs). The vulnerability is classified under CWE-862 (Missing Authorization) and carries a CVSS score of 5.3 (Medium). No public proof-of-concept (PoC) or exploit code has been identified at this time, and the patch status remains unknown. The attack vector is network-based, requires no authentication, and has low complexity, making it a potential risk 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 the WordPress plugin ecosystem. WP-Recall is a community and social networking plugin for WordPress. The missing authorization flaw could allow attackers to access private user data, modify settings, or perform actions reserved for higher-privileged users. Since the patch status is unknown, site administrators should consider disabling the plugin until a fix is released.
CVSS Breakdown & Threat Level
- Attack Vector (AV): Network (N) – Exploitable remotely.
- Attack Complexity (AC): Low (L) – No special conditions required.
- Privileges Required (PR): None (N) – No authentication needed.
- User Interaction (UI): None (N) – No user action required.
- Scope (S): Unchanged (U) – The vulnerable component remains the same.
- Confidentiality Impact (C): Low (L) – Limited information disclosure.
- Integrity Impact (I): None (N) – No data modification.
- Availability Impact (A): None (N) – No denial of service.
CVSS Score: 5.3 (Medium)
Threat Level: Medium – The vulnerability is easy to exploit but has limited impact on confidentiality.
Deep Dive & Mechanics
The WP-Recall plugin provides social networking features for WordPress, including user profiles, messaging, and activity feeds. The missing authorization vulnerability likely exists in one or more AJAX handlers or REST API endpoints that fail to properly verify user capabilities before executing sensitive operations.
Root Cause: The plugin does not enforce capability checks (e.g., current_user_can()) on certain functions accessible via HTTP requests. This allows any unauthenticated user to invoke these functions.
Attack Vector: An attacker can send crafted HTTP requests to the vulnerable endpoint(s) without authentication. For example, a request to wp-admin/admin-ajax.php with a specific action parameter could trigger a function that retrieves private user data or modifies plugin settings.
Impact: Successful exploitation could lead to:
- Unauthorized access to private user information (e.g., email addresses, profile data).
- Modification of plugin settings (e.g., disabling security features).
- Potential privilege escalation if the vulnerable function allows creating or modifying user accounts.
Vulnerable vs. Patched Code
Since no patch is available, we can only hypothesize the vulnerable code pattern. The fix would involve adding proper capability checks.
Vulnerable Code (Hypothetical):
add_action('wp_ajax_nopriv_my_action', 'my_function');
function my_function() {
// No capability check
$user_data = get_userdata($_POST['user_id']);
echo json_encode($user_data);
wp_die();
}
Patched Code (Hypothetical):
add_action('wp_ajax_nopriv_my_action', 'my_function');
function my_function() {
if (!current_user_can('read')) {
wp_die('Unauthorized', 403);
}
$user_data = get_userdata($_POST['user_id']);
echo json_encode($user_data);
wp_die();
}
Exploitation & Lab Setup
Red Team (Offensive)
Lab Setup:
- Install WordPress (latest version) on a local server (e.g., XAMPP, Docker).
- Install WP-Recall plugin version 16.26.14.
- Create a test user with subscriber role.
Exploitation Steps:
- Identify vulnerable endpoints by analyzing plugin source code or using fuzzing tools.
- Send a crafted HTTP request to the vulnerable endpoint without authentication.
- Example using
curl:curl -X POST http://target/wp-admin/admin-ajax.php \ -d "action=vulnerable_action&user_id=1" - Observe the response containing sensitive data.
Note: No public exploit code is available. The above is a generic example.
Blue Team (Defensive)
Detection:
- Monitor for unusual AJAX requests to
admin-ajax.phpwith unknownactionparameters. - Look for requests from unauthenticated users to endpoints that should require authentication.
- Use Web Application Firewall (WAF) rules to block requests to known vulnerable endpoints.
Mitigation:
- Disable the WP-Recall plugin until a patch is released.
- Implement virtual patching via WAF rules.
- Restrict access to
wp-admin/admin-ajax.phpusing.htaccessor server configuration.
Indicators of Compromise (IOCs)
- Network IOCs:
- HTTP POST requests to
/wp-admin/admin-ajax.phpwithactionparameters not associated with legitimate plugin functionality. - Requests from IP addresses not associated with authenticated users.
- HTTP POST requests to
- File IOCs:
- Modified plugin files (e.g.,
wp-content/plugins/wp-recall/). - Unexpected files in the WordPress uploads directory.
- Modified plugin files (e.g.,
- Log IOCs:
- WordPress debug log entries showing unauthorized access attempts.
- Web server access logs with 200 responses to
admin-ajax.phpfrom unauthenticated users.
Detection Engineering
YARA Rule
rule CVE_2025_49991_WP_Recall_Missing_Auth {
meta:
description = "Detects WP-Recall plugin files vulnerable to CVE-2025-49991"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-49991"
strings:
$vuln_func = "wp_ajax_nopriv_" nocase
$no_cap = "current_user_can" nocase
condition:
$vuln_func and not $no_cap
}
Sigma Rule
title: CVE-2025-49991 - WP-Recall Missing Authorization
id: 12345678-1234-1234-1234-123456789012
status: experimental
description: Detects unauthenticated access to WP-Recall AJAX endpoints
author: Valters IT
date: 2025-04-10
logsource:
category: webserver
product: apache
detection:
selection:
cs-method: 'POST'
c-uri: '/wp-admin/admin-ajax.php'
cs-uri-query: 'action=*'
sc-status: 200
condition: selection
falsepositives:
- Legitimate plugin AJAX calls
level: medium
Suricata Rule
alert http any any -> $HOME_NET any (
msg:"CVE-2025-49991 - WP-Recall Missing Authorization Attempt";
flow:to_server,established;
content:"POST"; http_method;
content:"/wp-admin/admin-ajax.php"; http_uri;
content:"action="; http_client_body;
classtype:attempted-recon;
sid:10000001;
rev:1;
)
Remediation & Mitigation
Immediate Actions:
- Disable the WP-Recall plugin until a security patch is released.
- Monitor logs for unauthorized access attempts.
- Implement WAF rules to block requests to
admin-ajax.phpwith unknownactionparameters.
Long-term Fix:
- The vendor must release a patched version that includes proper capability checks (e.g.,
current_user_can()) on all AJAX handlers. - Users should update to the latest version once available.
Workarounds:
- Use
.htaccessto restrict access toadmin-ajax.php:
(Note: This may break legitimate AJAX functionality.)<Files "admin-ajax.php"> Require all denied </Files>
Valters IT
Securing Digital Frontiers
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.