DSGVO All in one for WP <= 4.9 - Missing Authorization to Authenticated (Subscriber+) Settings Reset
Description
The DSGVO All in one for WP plugin for WordPress is vulnerable to Missing Authorization in all versions up to and including 4.9. This is due to the dsgvo_reset_policy_service_func() function lacking both capability checks and nonce verification while processing user-supplied parameters to reset plugin options. This makes it possible for authenticated attackers, with Subscriber-level access and above, to reset all customized privacy policy content including cookie notices, Google Analytics policies, Facebook policies, and YouTube policies to their default values.
CVSS Vector Breakdown
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:NTechnical Details
<=4.9What Changed in the Fix
Changes introduced in v5.0
Source Code
WordPress.org SVN# Exploitation Research Plan - CVE-2026-4298 ## 1. Vulnerability Summary The **DSGVO All in one for WP** plugin (versions <= 4.9) contains a missing authorization vulnerability in its AJAX handling logic. Specifically, the function `dsgvo_reset_policy_service_func()` (hooked to the `wp_ajax_reset_p…
Show full research plan
Exploitation Research Plan - CVE-2026-4298
1. Vulnerability Summary
The DSGVO All in one for WP plugin (versions <= 4.9) contains a missing authorization vulnerability in its AJAX handling logic. Specifically, the function dsgvo_reset_policy_service_func() (hooked to the wp_ajax_reset_policy_service action) fails to implement any capability checks (e.g., current_user_can( 'manage_options' )) or nonce verification. This allows any authenticated user, including those with Subscriber privileges, to trigger a reset of the plugin's privacy policy settings and content for various services (Google Analytics, Facebook, etc.) to their default values, potentially causing data loss or compliance misconfigurations.
2. Attack Vector Analysis
- Endpoint:
/wp-admin/admin-ajax.php - Action:
reset_policy_service - Method: POST
- Authentication: Required (Subscriber level or higher)
- Vulnerable Parameter:
service(inferred, used to specify which policy to reset) - Preconditions: An attacker must have a valid login to the WordPress site.
3. Code Flow
- Hook Registration: In
dsgvo_all_in_one_wp.php, the action is registered:add_action( 'wp_ajax_reset_policy_service', __CLASS__ .'::dsgvo_reset_policy_service_func' ); - AJAX Request: A Subscriber sends a POST request to
admin-ajax.phpwithaction=reset_policy_service. - Execution: WordPress core invokes
dsdvo_wp_backend::dsgvo_reset_policy_service_func(). - Processing: The function (located in
core/inc/backend_settings.phpordsgvo_all_in_one_wp.php) reads the service type from$_POST. - Sink: The function calls
update_option()to overwrite existing customized settings with default values defined incore/inc/texts.php(e.g.,$facebook_policy_sample).
4. Nonce Acquisition Strategy
No nonce is required.
The vulnerability report explicitly states that the function lacks nonce verification. The logic likely proceeds directly to processing parameters without calling check_ajax_referer() or wp_verify_nonce().
5. Exploitation Strategy
Step 1: Authentication
Authenticate as a Subscriber-level user to obtain valid session cookies.
Step 2: Target Identification
Determine the target option to reset. Common options used by the plugin:
dsdvo_facebook_policydsdvo_google_analytics_policy(inferred)dsdvo_cookie_textdsdvo_youtube_policy(inferred)
Step 3: Trigger Reset
Send the malicious AJAX request.
Request Details:
- URL:
http://[target-ip]/wp-admin/admin-ajax.php - Method: POST
- Headers:
Content-Type: application/x-www-form-urlencoded - Body:
action=reset_policy_service&service=facebook(The value ofserviceshould be tested among:facebook,google,youtube,cookie)
6. Test Data Setup
- Plugin Configuration: Install and activate the plugin (<= 4.9).
- Settings Modification: As an Administrator, navigate to the plugin settings and enter custom text for the Facebook Policy or Cookie Notice.
- Alternatively, use WP-CLI:
wp option update dsdvo_facebook_policy "MALICIOUS_CUSTOM_CONTENT_FOR_TESTING"
- Alternatively, use WP-CLI:
- User Creation: Create a Subscriber user:
wp user create attacker attacker@example.com --role=subscriber --user_pass=password123
7. Expected Results
- The AJAX request should return a
200 OKor a1(success code for WordPress AJAX). - The targeted option in the database should revert from "MALICIOUS_CUSTOM_CONTENT_FOR_TESTING" to the plugin's default boilerplate text.
8. Verification Steps
After the exploit, verify the state of the options via WP-CLI:
# Check if the custom value was overwritten by the default sample text
wp option get dsdvo_facebook_policy
If the output is no longer "MALICIOUS_CUSTOM_CONTENT_FOR_TESTING", the exploit is successful.
9. Alternative Approaches
If the service parameter name differs:
- Use
grepon the plugin directory to find the actual implementation ofdsgvo_reset_policy_service_functo see which$_POSTkeys it accesses:grep -r "function dsgvo_reset_policy_service_func" . - If
reset_policy_serviceis restricted, try the related hook found in the source:- Action:
reset_layertext_service - Handler:
dsgvoaiofree_reset_layertext_service - This may reset the "Cookie Layer" text without authorization.
- Action:
Check if your site is affected.
Run a free security audit to detect vulnerable plugins, outdated versions, and misconfigurations.