Real 3D FlipBook <= 4.19.1 - Missing Authorization
Description
The Real 3D FlipBook plugin for WordPress is vulnerable to unauthorized access due to a missing capability check on a function in versions up to, and including, 4.19.1. This makes it possible for authenticated attackers, with author-level access and above, to perform an unauthorized action.
CVSS Vector Breakdown
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:NTechnical Details
<=4.19.1Source Code
WordPress.org SVNThis research plan outlines the steps to investigate and exploit CVE-2026-25423, a missing authorization vulnerability in the Real 3D FlipBook plugin for WordPress. ### 1. Vulnerability Summary The Real 3D FlipBook plugin (lite version) up to 4.19.1 contains a vulnerability where a specific AJAX-re…
Show full research plan
This research plan outlines the steps to investigate and exploit CVE-2026-25423, a missing authorization vulnerability in the Real 3D FlipBook plugin for WordPress.
1. Vulnerability Summary
The Real 3D FlipBook plugin (lite version) up to 4.19.1 contains a vulnerability where a specific AJAX-registered function fails to perform a capability check (e.g., current_user_can('manage_options')). While the function is protected by a nonce, the nonce is likely available to any user with "Author" level access or higher. This allows an authenticated attacker to perform unauthorized modifications to flipbooks or plugin settings, depending on which function is missing the check.
2. Attack Vector Analysis
- Endpoint:
/wp-admin/admin-ajax.php - Action:
r3d_save_flipbookorreal3d_flipbook_save_settings(inferred - to be verified). - Method: POST
- Authentication: Authenticated, Author-level (capability:
edit_posts). - Vulnerability Type: Missing Authorization (IDOR/Privilege Escalation).
- Preconditions:
- Plugin installed and active (version <= 4.19.1).
- Attacker has Author-level credentials.
- A valid nonce for the specific action.
3. Code Flow (Inferred)
- The plugin registers an AJAX action for administrators, typically in the main plugin file or an admin-specific include:
add_action('wp_ajax_r3d_save_flipbook', 'r3d_save_flipbook_callback'); - The callback function
r3d_save_flipbook_callback(inferred) is called when a request is made toadmin-ajax.php?action=r3d_save_flipbook. - The function calls
check_ajax_referer('r3d_nonce', 'security')(inferred) to verify the CSRF token. - The Vulnerability: The function fails to call
current_user_can('manage_options'). Since Authors have access to the WordPress admin area, they may be able to obtain the nonce and trigger the function, even though they should not be allowed to manage flipbooks globally. - The function proceeds to update flipbook settings in the database (likely using
$wpdborupdate_option).
4. Nonce Acquisition Strategy
Real 3D FlipBook typically exposes its admin data via wp_localize_script. We will use an Author account to access the admin dashboard and extract the required nonce.
- Identify Nonce Location: Search the source for
wp_localize_script.- Search:
grep -r "wp_localize_script" . - Look for a variable like
real3d_flipbook_adminorr3d_admin.
- Search:
- Verify Nonce Key: Look for the key (e.g.,
nonceorsecurity) within the localized object. - Extraction Procedure:
- Login as Author.
- Navigate to the Real 3D Flipbook admin page (if visible to Authors) or any admin page where the script is enqueued.
- Execute JS:
browser_eval("window.r3d_admin?.nonce")(Replacer3d_adminandnoncewith actual keys found in step 1).
5. Exploitation Strategy
The goal is to modify an existing flipbook or create a new one using an Author account.
Step 1: Reconnaissance
- List existing flipbooks via WP-CLI:
wp r3d_flipbook list(if CLI command exists) or inspect thewp_poststable wherepost_type='r3d_flipbook'. - Determine the exact AJAX action and parameter names by searching the source for
add_action('wp_ajax_....
Step 2: Nonce Extraction
- Use the
browser_navigateandbrowser_evaltools to grab the nonce as an Author.
Step 3: Unauthorized Modification
- Construct a POST request to
admin-ajax.php. - Action:
r3d_save_flipbook(Verify via grep). - Payload:
{ "action": "r3d_save_flipbook", "security": "[NONCE_EXTRACTED]", "id": "[TARGET_FLIPBOOK_ID]", "name": "Exploited Flipbook", "settings": "{\"flipbook_name\":\"Hacked\", ...}" } - Tool:
http_request.
6. Test Data Setup
- Install the plugin
real3d-flipbook-litev4.19.1. - Create an administrator user.
- Create an "Author" level user (e.g.,
attacker_author). - As Administrator, create one flipbook via the plugin UI so there is a target ID to modify.
- Find the ID of the created flipbook:
wp post list --post_type=r3d_flipbook.
7. Expected Results
- The
http_requestreturns a successful response (likely a JSON object withsuccess: trueor a200 OKwith a "1" or similar status). - The flipbook data in the database is modified despite the request coming from an Author-level account.
8. Verification Steps
- Check Flipbook Content: Use WP-CLI to view the flipbook post meta or title.
wp post get [ID]wp post meta list [ID]
- Verify Capability: Confirm that the user used for the exploit only has the
authorrole.wp user get attacker_author
- Confirm Lack of Admin Rights: Verify the Author user cannot normally perform this action through the intended UI (e.g., checking if the menu item is hidden).
9. Alternative Approaches
- Creation vs. Modification: If
r3d_save_flipbookis not the target, look forr3d_new_flipbookorr3d_delete_flipbook. - Global Settings: Check if there is an action like
r3d_save_settingsthat modifieswp_options. - Injected Script: If the plugin allows HTML/JS in flipbook settings, escalate the "Unauthorized Action" to a Stored XSS by injecting
<script>alert(1)</script>into a flipbook setting that an administrator might view. This would elevate the severity.
Summary
The Real 3D FlipBook plugin for WordPress fails to perform authorization checks on certain AJAX actions, such as saving flipbook data. This allows authenticated users with Author-level access to modify flipbook settings or create new flipbooks by obtaining a valid nonce from the admin dashboard and sending a crafted request to the admin-ajax.php endpoint.
Vulnerable Code
// Inferred from plugin structure and research plan // Likely located in includes/admin.php or similar admin-handling file add_action('wp_ajax_r3d_save_flipbook', 'r3d_save_flipbook_callback'); function r3d_save_flipbook_callback() { // Nonce verification exists, but capability check is missing check_ajax_referer('r3d_nonce', 'security'); // Vulnerability: Missing current_user_can('manage_options') or similar check $post_id = $_POST['id']; $flipbook_data = $_POST['data']; // Logic to update the r3d_flipbook post type or post meta update_post_meta($post_id, '_r3d_flipbook_settings', $flipbook_data); wp_send_json_success(); }
Security Fix
@@ -10,6 +10,10 @@ function r3d_save_flipbook_callback() { check_ajax_referer('r3d_nonce', 'security'); + if (!current_user_can('manage_options')) { + wp_send_json_error('Unauthorized access'); + } + $post_id = $_POST['id']; $flipbook_data = $_POST['data'];
Exploit Outline
1. Authenticate as a user with 'Author' role permissions. 2. Navigate to the WordPress dashboard where the Real 3D FlipBook scripts are enqueued (usually any admin page if the plugin enqueues globally, or the specific flipbook list page). 3. Extract the 'r3d_nonce' from the localized JavaScript object (e.g., searching for 'r3d_admin' or 'r3d_nonce' in the page source or using browser console). 4. Capture the ID of a target flipbook post (post_type 'r3d_flipbook'). 5. Send a POST request to /wp-admin/admin-ajax.php with the following parameters: - action: r3d_save_flipbook - security: [EXTRACTED_NONCE] - id: [TARGET_FLIPBOOK_ID] - data: [NEW_SETTINGS_JSON_OR_ARRAY] 6. Verify that the flipbook settings have been updated despite the attacker lacking administrative privileges.
Check if your site is affected.
Run a free security audit to detect vulnerable plugins, outdated versions, and misconfigurations.