CVE-2025-49872
Executive Summary
CVE-2025-49872 is a Missing Authorization vulnerability in the myCred WordPress plugin, developed by Saad Iqbal. This flaw allows unauthenticated attackers to access functionality that should be constrained by Access Control Lists (ACLs). The vulnerability affects all versions of myCred from n/a through 2.9.4.2. With a CVSS score of 5.3 (Medium), the primary impact is confidentiality, as an attacker can potentially read sensitive data or perform actions reserved for higher-privileged users. No public proof-of-concept (PoC) or exploit code is currently available, and the patch status remains unknown.
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 resides in a WordPress plugin distributed via the official WordPress plugin repository. As a WordPress ecosystem issue, it affects any site running the vulnerable plugin version. The lack of a patch increases supply chain risk, as site administrators must rely on manual mitigation or disabling the plugin until a fix is released.
CVSS Breakdown & Threat Level
- CVSS Score: 5.3 (Medium)
- Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
- Attack Vector: Network (AV:N) – exploitable remotely.
- Attack Complexity: Low (AC:L) – no special conditions required.
- Privileges Required: None (PR:N) – no authentication needed.
- User Interaction: None (UI:N) – no user action required.
- Scope: Unchanged (S:U) – impact confined to the vulnerable component.
- Confidentiality Impact: Low (C:L) – limited information disclosure.
- Integrity Impact: None (I:N) – no data modification.
- Availability Impact: None (A:N) – no denial of service.
Threat Level: Medium. The vulnerability is easy to exploit remotely without authentication, but the impact is limited to low confidentiality loss. However, in the context of a WordPress site, this could expose user data, configuration details, or internal plugin functionality.
Deep Dive & Mechanics
The myCred plugin is a gamification and points management system for WordPress. The missing authorization vulnerability likely exists in one or more AJAX actions, REST API endpoints, or shortcode handlers 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. An unauthenticated attacker can directly call these functions, bypassing intended access controls.
Attack Vector: An attacker sends crafted HTTP requests to the WordPress site, targeting vulnerable endpoints. For example, a REST API route like /wp-json/mycred/v1/leaderboard might return user points data without authentication, or an AJAX action might allow modifying points without proper checks.
Impact: Unauthorized access to functionality such as:
- Viewing other users' points balances.
- Triggering point deductions or awards.
- Accessing administrative settings or logs.
- Exposing internal plugin data (e.g., user emails, transaction history).
Vulnerable vs. Patched Code
Since no patch is available, we can only hypothesize the vulnerable pattern. A typical missing authorization vulnerability in WordPress plugins looks like:
Vulnerable Code (hypothetical):
add_action('wp_ajax_nopriv_mycred_get_points', 'mycred_get_points_handler');
function mycred_get_points_handler() {
$user_id = $_GET['user_id'];
$points = get_user_meta($user_id, 'mycred_points', true);
wp_send_json_success(['points' => $points]);
}
Patched Code (hypothetical):
add_action('wp_ajax_nopriv_mycred_get_points', 'mycred_get_points_handler');
function mycred_get_points_handler() {
if (!current_user_can('read')) {
wp_die('Unauthorized', 403);
}
$user_id = get_current_user_id(); // Only allow own points
$points = get_user_meta($user_id, 'mycred_points', true);
wp_send_json_success(['points' => $points]);
}
The patched version adds a capability check and restricts data to the current user.
Exploitation & Lab Setup
Red Team (Offensive)
Lab Setup:
- Install WordPress with myCred plugin version 2.9.4.2.
- Create a test user with subscriber role.
- Identify vulnerable endpoints by reviewing plugin source code or using a fuzzer.
Exploitation Steps:
- Enumerate available REST API routes:
curl -s http://target/wp-json/mycred/v1/ | jq . - Attempt to access a protected endpoint without authentication:
curl -s http://target/wp-json/mycred/v1/leaderboard - If successful, extract sensitive data:
curl -s http://target/wp-json/mycred/v1/user/1/points - For AJAX actions, send a POST request:
curl -X POST http://target/wp-admin/admin-ajax.php \ -d 'action=mycred_get_points&user_id=1'
Expected Outcome: Unauthorized access to user points, leaderboard data, or administrative functions.
Blue Team (Defensive)
Detection:
- Monitor for unusual HTTP requests to
/wp-json/mycred/v1/*oradmin-ajax.phpwithaction=mycred_*from unauthenticated sources. - Look for spikes in 403 errors followed by successful 200 responses on these endpoints.
- Check server logs for repeated access attempts to plugin-specific paths.
Mitigation:
- Disable the myCred plugin until a patch is released.
- Implement a Web Application Firewall (WAF) rule to block unauthenticated access to myCred endpoints.
- Use a WordPress security plugin to enforce authentication on REST API routes.
Indicators of Compromise (IOCs)
- Network IOCs:
- HTTP requests to
/wp-json/mycred/v1/without valid authentication tokens. - POST requests to
/wp-admin/admin-ajax.phpwithactionparameters starting withmycred_from unknown IPs.
- HTTP requests to
- File IOCs:
- Modified plugin files (e.g.,
wp-content/plugins/mycred/includes/mycred-functions.php) containing unauthorized changes.
- Modified plugin files (e.g.,
- Log IOCs:
- Repeated 403 errors followed by 200 success on myCred endpoints in access logs.
- Unusual entries in WordPress debug log related to myCred functions.
Detection Engineering
YARA Rule
rule CVE_2025_49872_myCred_Missing_Auth {
meta:
description = "Detects vulnerable myCred plugin files with missing authorization"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-49872"
strings:
$vuln_func = /add_action\(['\"]wp_ajax_nopriv_mycred_/
$no_cap_check = /current_user_can\(/
condition:
$vuln_func and not $no_cap_check
}
Sigma Rule
title: Unauthenticated Access to myCred Plugin Endpoints
id: 8a9b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
status: experimental
description: Detects unauthenticated HTTP requests to myCred plugin REST API or AJAX endpoints
author: Valters IT
date: 2025-04-10
logsource:
category: webserver
product: apache
service: accesslog
detection:
selection:
cs-method: 'GET' or 'POST'
cs-uri-stem:
- '/wp-json/mycred/v1/*'
- '/wp-admin/admin-ajax.php'
cs-uri-query|contains: 'action=mycred_'
condition: selection
falsepositives:
- Legitimate authenticated users (check for valid session cookies)
level: medium
Suricata Rule
alert http any any -> $HOME_NET any (
msg:"CVE-2025-49872 - Unauthenticated myCred Plugin Access";
flow:to_server,established;
content:"/wp-json/mycred/v1/"; http_uri;
nocase;
sid:1000001;
rev:1;
reference:cve,2025-49872;
classtype:attempted-recon;
priority:2;
)
Remediation & Mitigation
Immediate Actions:
- Disable the myCred plugin until a patched version is released.
- Implement a WAF rule to block unauthenticated requests to
/wp-json/mycred/v1/*andadmin-ajax.phpwithaction=mycred_*. - Monitor logs for exploitation attempts using the provided detection rules.
Long-Term Fix:
- Apply the official patch once released by the vendor.
- If no patch is forthcoming, consider replacing myCred with an alternative plugin that has active security maintenance.
- Conduct a code review of the plugin to identify and fix all missing authorization checks.
Workaround:
- Use a WordPress security plugin (e.g., Wordfence, Sucuri) to enforce authentication on REST API endpoints.
- Add custom
.htaccessrules to restrict access to myCred endpoints:RewriteCond %{REQUEST_URI} ^/wp-json/mycred/v1/ [NC] RewriteCond %{HTTP_COOKIE} !wordpress_logged_in_ [NC] RewriteRule .* - [F,L]
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.