CVE-2026-4298

DSGVO All in one for WP <= 4.9 - Missing Authorization to Authenticated (Subscriber+) Settings Reset

mediumMissing Authorization
4.3
CVSS Score
4.3
CVSS Score
medium
Severity
5.0
Patched in
1d
Time to patch

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:N
Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
None
Confidentiality
Low
Integrity
None
Availability

Technical Details

Affected versions<=4.9
PublishedJuly 8, 2026
Last updatedJuly 9, 2026

What Changed in the Fix

Changes introduced in v5.0

Loading patch diff...

Source Code

WordPress.org SVN
Research Plan
Unverified

# 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

  1. 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' );
    
  2. AJAX Request: A Subscriber sends a POST request to admin-ajax.php with action=reset_policy_service.
  3. Execution: WordPress core invokes dsdvo_wp_backend::dsgvo_reset_policy_service_func().
  4. Processing: The function (located in core/inc/backend_settings.php or dsgvo_all_in_one_wp.php) reads the service type from $_POST.
  5. Sink: The function calls update_option() to overwrite existing customized settings with default values defined in core/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_policy
  • dsdvo_google_analytics_policy (inferred)
  • dsdvo_cookie_text
  • dsdvo_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 of service should be tested among: facebook, google, youtube, cookie)

6. Test Data Setup

  1. Plugin Configuration: Install and activate the plugin (<= 4.9).
  2. 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"
      
  3. 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 OK or a 1 (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:

  1. Use grep on the plugin directory to find the actual implementation of dsgvo_reset_policy_service_func to see which $_POST keys it accesses:
    grep -r "function dsgvo_reset_policy_service_func" .
    
  2. If reset_policy_service is 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.

Check if your site is affected.

Run a free security audit to detect vulnerable plugins, outdated versions, and misconfigurations.