CVE-2025-49913
Executive Summary
CVE-2025-49913 is a Missing Authorization vulnerability in the CoSchedule WordPress plugin (coschedule-by-todaymade), affecting versions up to and including 3.4.0. This flaw allows an unauthenticated attacker to exploit incorrectly configured access control security levels, potentially leading to unauthorized data access or modification. The vulnerability is classified as a WordPress ecosystem issue and does not involve Apache or Nginx misconfigurations.
The vulnerability has a CVSS score of 5.3 (Medium) and a low EPSS score of 0.0%, indicating a low probability of active exploitation in the wild. However, due to the lack of a confirmed patch, organizations using this plugin should treat it as a high-priority risk.
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. No NPM, PyPI, Go, or Ruby packages are involved. The plugin is installed directly into WordPress sites, and the risk is limited to the WordPress ecosystem.
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N
- Base Score: 5.3 (Medium)
- Attack Vector: Network (AV:N)
- Attack Complexity: Low (AC:L)
- Privileges Required: None (PR:N)
- User Interaction: None (UI:N)
- Scope: Unchanged (S:U)
- Confidentiality Impact: Low (C:L)
- Integrity Impact: Low (I:L)
- Availability Impact: None (A:N)
Threat Level: Medium. The vulnerability is exploitable without authentication, but the impact is limited to low confidentiality and integrity loss. No availability impact is expected.
Deep Dive & Mechanics
The vulnerability resides in the CoSchedule plugin's access control mechanisms. The plugin fails to properly validate user permissions when processing certain API requests or administrative actions. This allows an attacker to bypass authorization checks and perform actions that should be restricted to authenticated users with specific roles.
Root Cause: The plugin uses incorrectly configured access control security levels, likely due to missing capability checks in WordPress AJAX handlers or REST API endpoints. This is a classic CWE-862: Missing Authorization issue.
Attack Vector: An unauthenticated attacker can send crafted HTTP requests to the vulnerable endpoints, gaining unauthorized access to plugin features or data.
Impact: Successful exploitation could allow an attacker to:
- View or modify plugin settings.
- Access sensitive data managed by the plugin (e.g., scheduling information, user data).
- Perform actions that disrupt the plugin's intended functionality.
Vulnerable vs. Patched Code
Since no patch is available, the following is a hypothetical comparison based on common fixes for missing authorization vulnerabilities.
Vulnerable Code (WordPress AJAX handler):
add_action('wp_ajax_coschedule_update_settings', 'coschedule_update_settings');
add_action('wp_ajax_nopriv_coschedule_update_settings', 'coschedule_update_settings');
function coschedule_update_settings() {
// Missing capability check
update_option('coschedule_settings', $_POST['settings']);
wp_send_json_success();
}
Patched Code (Hypothetical):
add_action('wp_ajax_coschedule_update_settings', 'coschedule_update_settings');
// Remove the nopriv action to require authentication
function coschedule_update_settings() {
// Add capability check
if (!current_user_can('manage_options')) {
wp_die('Unauthorized', 403);
}
update_option('coschedule_settings', $_POST['settings']);
wp_send_json_success();
}
Exploitation & Lab Setup
Red Team (Exploitation)
Prerequisites:
- A WordPress site with CoSchedule plugin version <= 3.4.0 installed and activated.
- Network access to the target site.
Exploitation Steps:
- Identify vulnerable endpoints by analyzing the plugin's source code or using a web application scanner.
- Send a crafted HTTP request to the vulnerable endpoint without authentication.
Example Request (using cURL):
curl -X POST https://target.com/wp-admin/admin-ajax.php \
-d "action=coschedule_update_settings&settings[api_key]=attacker_key"
Expected Outcome: The attacker can modify plugin settings without authentication.
Blue Team (Detection & Defense)
Detection:
- Monitor for unauthorized access to AJAX endpoints associated with the CoSchedule plugin.
- Look for requests to
admin-ajax.phpwithactionparameters starting withcoschedule_from unauthenticated sources.
Defense:
- Immediately disable or remove the CoSchedule plugin until a patch is available.
- Implement a Web Application Firewall (WAF) rule to block requests to vulnerable endpoints from unauthenticated users.
- Restrict access to
wp-adminandadmin-ajax.phpusing IP whitelisting or VPN.
Indicators of Compromise (IOCs)
Network IOCs:
- HTTP requests to
/wp-admin/admin-ajax.phpwithaction=coschedule_*parameters from unauthenticated IPs. - Unusual changes to plugin settings without corresponding admin user activity.
- HTTP requests to
File IOCs:
- Modified plugin files in
/wp-content/plugins/coschedule-by-todaymade/. - Unexpected entries in the
wp_optionstable with thecoschedule_prefix.
- Modified plugin files in
Log IOCs:
- WordPress debug logs showing failed capability checks or unauthorized access attempts.
- Web server access logs with 200 responses to
admin-ajax.phpfrom unauthenticated requests.
Detection Engineering
YARA Rule
rule CVE_2025_49913_Coschedule_Missing_Auth {
meta:
description = "Detects missing authorization in CoSchedule plugin"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-49913"
strings:
$vuln_func = "coschedule_update_settings" nocase
$vuln_hook = "wp_ajax_nopriv_coschedule" nocase
condition:
$vuln_func or $vuln_hook
}
Sigma Rule
title: CVE-2025-49913 - CoSchedule Missing Authorization
id: 8a9b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
status: experimental
description: Detects exploitation attempts against CVE-2025-49913
author: Valters IT
logsource:
category: webserver
product: apache
service: access
detection:
selection:
cs-method: 'POST'
cs-uri-query|contains: 'admin-ajax.php'
cs-uri-query|contains: 'action=coschedule_'
condition: selection
falsepositives:
- Legitimate admin actions (requires authentication)
level: high
Suricata Rule
alert http any any -> $HOME_NET any (
msg:"CVE-2025-49913 - CoSchedule Missing Authorization Exploit";
flow:to_server,established;
content:"POST"; http_method;
content:"admin-ajax.php"; http_uri;
content:"action=coschedule_"; http_client_body;
classtype:attempted-admin;
sid:1000001;
rev:1;
reference:cve,2025-49913;
)
Remediation & Mitigation
Immediate Actions:
- Disable the plugin: Deactivate and remove the CoSchedule plugin from all WordPress installations until a patched version is released.
- Monitor logs: Review web server and WordPress logs for signs of exploitation.
- Implement WAF rules: Block requests to
admin-ajax.phpwithaction=coschedule_*from unauthenticated sources.
Long-term Fix:
- Apply the official patch once released by the vendor.
- If no patch is forthcoming, consider replacing the plugin with an alternative solution.
Workarounds:
- Use a security plugin (e.g., Wordfence) to add additional access control checks.
- Modify the plugin code manually to add capability checks (not recommended for non-developers).
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.