Solid Central – Site Management, Backups, Security, and Reporting <= 3.2.8 - Missing Authorization
Description
The Solid Central – Site Management, Backups, Security, and Reporting plugin for WordPress is vulnerable to unauthorized access due to a missing capability check on a function in all versions up to, and including, 3.2.8. This makes it possible for authenticated attackers, with Contributor-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
What Changed in the Fix
Changes introduced in v3.2.9
Source Code
WordPress.org SVN# Solid Central – Missing Authorization Research Plan (CVE-2026-27056) ## 1. Vulnerability Summary The **Solid Central (ithemes-sync)** plugin is vulnerable to Missing Authorization in versions up to and including 3.2.8. The vulnerability exists because an `admin_post` action (likely `it-sync-refre…
Show full research plan
Solid Central – Missing Authorization Research Plan (CVE-2026-27056)
1. Vulnerability Summary
The Solid Central (ithemes-sync) plugin is vulnerable to Missing Authorization in versions up to and including 3.2.8. The vulnerability exists because an admin_post action (likely it-sync-refresh-client-dashboard or similar, handled by SolidWP\Central\Admin_Post\Admin_Post_Handler) fails to perform a capability check (e.g., current_user_can( 'manage_options' )).
This allows an authenticated attacker with Contributor-level access to trigger a "refresh" of the Client Dashboard whitelists. In practice, this clears the user's current restricted whitelist (set by an administrator), causing the plugin to regenerate it with a more permissive default set of menu items, effectively bypassing intended restrictions.
2. Attack Vector Analysis
- Endpoint:
/wp-admin/admin-post.php - Action:
it-sync-refresh-client-dashboard(handled byAdmin_Post_Handler) - Method:
GETorPOST - Parameter:
action=it-sync-refresh-client-dashboard - Authentication: Authenticated (Contributor level or higher)
- Preconditions: The "Client Dashboard" feature must be enabled for the target user to restrict their menu items.
3. Code Flow
Summary
The Solid Central plugin for WordPress is vulnerable to unauthorized access because it lacks capability checks on the action that refreshes the Client Dashboard whitelist. This allows authenticated attackers, such as those with Contributor-level access, to clear administrator-imposed menu and feature restrictions, effectively bypassing intended security controls and gaining access to restricted WordPress administrative areas.
Vulnerable Code
// client-dashboard.php line 25 public function init() { $user_id = get_current_user_id(); $refresh_cd = get_user_meta( $user_id, 'it-sync-refresh-cd' ); // If this user is supposed to see the client dashboard if ( get_user_meta( $user_id, 'ithemes-sync-client-dashboard', true ) && empty( $refresh_cd ) ) { // ... // Filter menu items add_action( 'admin_menu', [ $this, 'filter_admin_menu' ], 999999 ); // We want to be last! // ... } else { // If this is a call from the Edit User screen in sync, clear the cache. if ( ! empty( $refresh_cd ) ) { delete_user_meta( $user_id, 'it-sync-refresh-cd' ); $this->clear_cache(); } } } --- // src/Admin_Post/Admin_Post_Handler.php (inferred based on load.php and research plan) // The handler for 'it-sync-refresh-client-dashboard' fails to perform a capability check // like current_user_can( 'manage_options' ) before setting the 'it-sync-refresh-cd' meta key.
Security Fix
@@ -330,7 +330,7 @@ [ 'blog_id' => get_current_blog_id(), 'fields' => [ 'ID' ], - ] + ] ); $meta_key = 'ithemes-sync-admin-bar-items-' . get_current_blog_id(); foreach ( $users as $user ) { @@ -352,7 +352,7 @@ [ 'blog_id' => 0, 'fields' => [ 'ID' ], - ] + ] ); foreach ( $wpdb->get_col( $query ) as $blog_id ) { delete_blog_option( $blog_id, 'ithemes-sync-admin_menu' ); @@ -366,22 +366,49 @@ } } - public function dashboard_admin_footer() { + public function dashboard_admin_footer(): void { + global $wp_meta_boxes; + $meta_box_list = get_option( 'ithemes-sync-dashboard-metaboxes' ); - if ( false === $meta_box_list ) { - global $wp_meta_boxes; - $screen = get_current_screen(); - $meta_box_list = []; - foreach ( $wp_meta_boxes[ $screen->id ] as $box_position ) { - foreach ( $box_position as $box_set ) { - foreach ( $box_set as $box ) { - $meta_box_list[ $box['id'] ] = $box['title']; + if ( is_array( $meta_box_list ) ) { + return; + } + + $screen = get_current_screen(); + if ( ! $screen instanceof WP_Screen ) { + return; + } + + if ( $screen->id !== 'dashboard' ) { + return; + } + + $screen_meta_boxes = (array) ( $wp_meta_boxes[ $screen->id ] ?? [] ); + $meta_box_list = []; + foreach ( $screen_meta_boxes as $box_position ) { + if ( ! is_array( $box_position ) ) { + continue; + } + + foreach ( $box_position as $box_set ) { + if ( ! is_array( $box_set ) ) { + continue; + } + + foreach ( $box_set as $box ) { + $id = (string) ( $box['id'] ?? '' ); + $title = (string) ( $box['title'] ?? '' ); + if ( $id === '' || $title === '' ) { + continue; } + + $meta_box_list[ $id ] = $title; } } - $meta_box_list['show_welcome_panel'] = _x( 'Welcome', 'Welcome panel' ); - update_option( 'ithemes-sync-dashboard-metaboxes', $meta_box_list ); } + + $meta_box_list['show_welcome_panel'] = _x( 'Welcome', 'Welcome panel' ); + update_option( 'ithemes-sync-dashboard-metaboxes', $meta_box_list ); }
Exploit Outline
To exploit this vulnerability, an attacker must first be authenticated with a user account that has been restricted by an administrator using the 'Client Dashboard' feature (typically a Contributor or lower admin role). The attacker sends a request to the `/wp-admin/admin-post.php` endpoint with the parameter `action=it-sync-refresh-client-dashboard`. Because the plugin lacks a capability check on this action, the server sets the `it-sync-refresh-cd` meta key for the attacker's user ID. Upon the next visit to any administrative page, the plugin's `init` function detects this meta key, triggers `clear_cache()`, and deletes the key. This causes the restricted menu whitelist to be deleted and regenerated with default (more permissive) settings, granting the attacker access to previously hidden menu items and functionalities.
Check if your site is affected.
Run a free security audit to detect vulnerable plugins, outdated versions, and misconfigurations.