CVE-2025-63041
Executive Summary
CVE-2025-63041 is a Broken Access Control vulnerability in the WordPress plugin Forget About Shortcode Buttons (versions <= 2.1.3). This flaw allows authenticated attackers with low privileges (e.g., subscriber) to perform unauthorized actions, such as modifying or deleting shortcode button configurations, leading to partial loss of integrity and confidentiality. The vulnerability is classified under CWE-862 (Missing Authorization) and has a CVSS score of 5.4 (Medium). No public proof-of-concept (PoC) or exploit code has been released, and the vendor has not provided a patch. The EPSS score is 0.0%, indicating low exploitation likelihood in the wild, but the risk remains for unpatched WordPress installations.
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. Since the plugin is distributed via the official WordPress Plugin Directory, any site running version 2.1.3 or earlier is at risk. No known supply chain compromise has been reported, but the lack of a patch means site administrators must manually apply mitigations or remove the plugin.
CVSS Breakdown & Threat Level
- Attack Vector (AV): Network (N) – Exploitable remotely.
- Attack Complexity (AC): Low (L) – No special conditions required.
- Privileges Required (PR): Low (L) – Attacker needs a valid WordPress account (e.g., subscriber).
- User Interaction (UI): None (N) – No victim action needed.
- Scope (S): Unchanged (U) – Vulnerability does not affect other components.
- Confidentiality (C): Low (L) – Limited data exposure.
- Integrity (I): Low (L) – Limited data modification.
- Availability (A): None (N) – No denial of service.
Threat Level: Medium. The vulnerability requires authentication but is easy to exploit once access is obtained. It is particularly dangerous in multi-author WordPress sites where low-privilege users exist.
Deep Dive & Mechanics
The Forget About Shortcode Buttons plugin adds a custom post type (or settings page) for managing shortcode buttons. The vulnerability lies in the plugin’s failure to properly check user capabilities before allowing modifications to these buttons. Specifically, the plugin uses current_user_can() incorrectly or omits it entirely in certain AJAX handlers or admin actions, allowing any authenticated user to create, edit, or delete shortcode buttons.
Root Cause: Missing capability checks in functions like fashb_save_button(), fashb_delete_button(), or similar. The plugin relies on wp_verify_nonce() but does not enforce a minimum user role (e.g., edit_posts or manage_options).
Attack Flow:
- Attacker logs in as a subscriber.
- Attacker sends a crafted POST request to the vulnerable AJAX endpoint (e.g.,
admin-ajax.php?action=fashb_save_button). - The plugin processes the request without verifying the user’s role, allowing the attacker to modify or delete shortcode buttons.
- The attacker can inject malicious shortcodes or remove legitimate ones, affecting site functionality.
Vulnerable vs. Patched Code
Vulnerable Code (version 2.1.3):
add_action('wp_ajax_fashb_save_button', 'fashb_save_button');
function fashb_save_button() {
// Missing capability check
check_ajax_referer('fashb_nonce', 'nonce');
// Process save...
}
Patched Code (hypothetical fix):
add_action('wp_ajax_fashb_save_button', 'fashb_save_button');
function fashb_save_button() {
check_ajax_referer('fashb_nonce', 'nonce');
if (!current_user_can('edit_posts')) {
wp_die('Unauthorized', 403);
}
// Process save...
}
The patch adds current_user_can('edit_posts') to ensure only users with at least Contributor role can modify buttons.
Exploitation & Lab Setup
Red Team (Attacker)
Prerequisites:
- WordPress site with Forget About Shortcode Buttons <= 2.1.3 installed.
- Valid low-privilege account (e.g., subscriber).
Exploitation Steps:
- Obtain a nonce by inspecting the plugin’s admin page or by brute-forcing (if nonce is predictable).
- Send a crafted request to create a malicious shortcode button:
curl -X POST http://target.com/wp-admin/admin-ajax.php \
-d "action=fashb_save_button&nonce=VALID_NONCE&button_name=evil&button_content=malicious_shortcode"
- Verify the button was created by visiting the plugin’s settings page or by triggering the shortcode.
Note: No public exploit code exists; this is a conceptual demonstration.
Blue Team (Defender)
Detection:
- Monitor AJAX requests to
admin-ajax.phpwith actionfashb_save_buttonorfashb_delete_buttonfrom low-privilege users. - Look for unusual shortcode content in the
button_contentparameter. - Use the Sigma rule below to detect unauthorized access attempts.
Mitigation:
- Immediately disable the plugin if no patch is available.
- Restrict user roles to only trusted accounts.
- Implement a Web Application Firewall (WAF) rule to block requests to vulnerable endpoints from non-admin users.
Indicators of Compromise (IOCs)
- Network:
- POST requests to
/wp-admin/admin-ajax.phpwithaction=fashb_save_buttonoraction=fashb_delete_buttonfrom low-privilege user agents. - Unusual shortcode content in POST data (e.g.,
button_contentcontaining[malicious]).
- POST requests to
- File System:
- Modified or new entries in the
wp_postmetatable for thefashb_buttonpost type. - Unexpected shortcode buttons appearing in the plugin’s admin interface.
- Modified or new entries in the
- Logs:
- WordPress debug log entries showing
wp_dieor403errors fromfashb_save_buttonfunction (if patched).
- WordPress debug log entries showing
Detection Engineering
YARA Rule
rule Detect_CVE_2025_63041_Exploit {
meta:
description = "Detects exploitation attempts for CVE-2025-63041 in WordPress"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-63041"
strings:
$ajax_action = "action=fashb_save_button" nocase
$ajax_delete = "action=fashb_delete_button" nocase
$nonce_param = "nonce=" nocase
$button_content = "button_content=" nocase
condition:
any of ($ajax_action, $ajax_delete) and $nonce_param and $button_content
}
Sigma Rule
title: CVE-2025-63041 - Broken Access Control in Forget About Shortcode Buttons
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects unauthorized AJAX requests to vulnerable WordPress plugin endpoints
author: Valters IT
logsource:
category: webserver
product: apache
service: access_combined
detection:
selection:
cs-method: 'POST'
cs-uri-query|contains:
- 'admin-ajax.php'
cs-uri-query|contains|all:
- 'action=fashb_save_button'
- 'nonce='
condition: selection
falsepositives:
- Legitimate admin actions (rare)
level: medium
Suricata Rule
alert http $HOME_NET any -> $EXTERNAL_NET any (
msg:"CVE-2025-63041 - WordPress Forget About Shortcode Buttons Broken Access Control";
flow:to_server,established;
content:"POST"; http_method;
content:"admin-ajax.php"; http_uri;
content:"action=fashb_save_button"; http_client_body;
content:"nonce="; http_client_body;
sid:10000001;
rev:1;
reference:cve,2025-63041;
classtype:attempted-admin;
priority:2;
)
Remediation & Mitigation
Immediate Actions:
- Disable the plugin until a patch is available.
- Audit user roles and remove any unnecessary low-privilege accounts.
- Apply a virtual patch using a WAF to block requests to
admin-ajax.phpwithaction=fashb_save_buttonoraction=fashb_delete_buttonfrom non-admin users.
Long-term Fix:
- The vendor must release a patched version that adds proper capability checks (e.g.,
current_user_can('edit_posts')). - Alternatively, replace the plugin with a secure alternative.
Workaround:
- Add the following code to the theme’s
functions.phpto block unauthorized access:
add_action('wp_ajax_fashb_save_button', function() {
if (!current_user_can('edit_posts')) {
wp_die('Unauthorized', 403);
}
}, 1);
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.