CVE-2025-68871

Dooodl <= 2.3.0 - Reflected Cross-Site Scripting

mediumImproper Neutralization of Input During Web Page Generation ('Cross-site Scripting')
6.1
CVSS Score
6.1
CVSS Score
medium
Severity
Unpatched
Patched in
N/A
Time to patch

Description

The Dooodl plugin for WordPress is vulnerable to Reflected Cross-Site Scripting in versions up to, and including, 2.3.0 due to insufficient input sanitization and output escaping. This makes it possible for unauthenticated attackers to inject arbitrary web scripts in pages that execute if they can successfully trick a user into performing an action such as clicking on a link.

CVSS Vector Breakdown

CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N
Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
Required
Scope
Changed
Low
Confidentiality
Low
Integrity
None
Availability

Technical Details

Affected versions<=2.3.0
PublishedJanuary 16, 2026
Last updatedJanuary 19, 2026
Affected plugindooodl
Research Plan
Unverified

# Exploitation Research Plan - CVE-2025-68871 (Dooodl) ## 1. Vulnerability Summary The **Dooodl** plugin for WordPress (versions <= 2.3.0) is vulnerable to **Reflected Cross-Site Scripting (XSS)**. The vulnerability exists because the plugin accepts user-controlled input via URL parameters and refl…

Show full research plan

Exploitation Research Plan - CVE-2025-68871 (Dooodl)

1. Vulnerability Summary

The Dooodl plugin for WordPress (versions <= 2.3.0) is vulnerable to Reflected Cross-Site Scripting (XSS). The vulnerability exists because the plugin accepts user-controlled input via URL parameters and reflects it into the web page without proper sanitization (using sanitize_text_field or similar) or context-aware escaping (using esc_html, esc_attr, or esc_js). This allows an unauthenticated attacker to execute arbitrary JavaScript in the context of a user's browser session by tricking them into clicking a crafted link.

2. Attack Vector Analysis

  • Endpoint: Any frontend page or post containing the [dooodl] shortcode, or plugin-specific display pages.
  • Vulnerable Parameter: id (inferred) or doodle (inferred).
  • Authentication: None (Unauthenticated).
  • Preconditions: A page must be published containing the [dooodl] shortcode to trigger the vulnerable code path.

3. Code Flow (Inferred)

  1. Entry Point: The user visits a URL such as http://site.com/?id=<payload>.
  2. Processing: The plugin's shortcode handler (likely registered via add_shortcode( 'dooodl', ... )) or a frontend initialization hook (like init or wp_enqueue_scripts) accesses the parameter directly via $_GET['id'].
  3. Variable Assignment: The raw value is assigned to a variable used for rendering the drawing canvas or passed to a localized JavaScript object.
  4. Sink: The value is echoed into the HTML. Common sinks in this plugin type include:
    • Inside an HTML attribute: echo '<div id="dooodl-' . $_GET['id'] . '">';
    • Inside a script tag via wp_localize_script: wp_localize_script('dooodl-js', 'dooodl_vars', array('id' => $_GET['id']));
    • Inside a hidden input field.

4. Nonce Acquisition Strategy

Reflected XSS in GET parameters typically occurs during the initial page render and often does not require a nonce for the reflection itself. However, if the plugin requires a nonce to initialize its scripts, follow this strategy:

  1. Identify Shortcode: The primary shortcode is [dooodl].
  2. Setup Page: Create a test page with the shortcode to ensure all plugin assets and parameters are loaded.
  3. Identify JS Variable: Look for the localization key. Based on common patterns, it is likely dooodl_settings or dooodl_params (inferred).
  4. Extraction:
    • Use browser_navigate to the page.
    • Use browser_eval("window.dooodl_params?.nonce") (inferred) to check for available nonces if needed for subsequent AJAX actions.

5. Exploitation Strategy

  1. Discovery: Locate a page with the [dooodl] shortcode.
  2. Payload Crafting:
    • If reflected in an attribute: ?id=123" onmouseover="alert(domain)"
    • If reflected in a JS block: ?id=123"};alert(document.domain);//
    • Generic breakout: ?id="><script>alert(document.domain)</script>
  3. Request: Perform a GET request to the target page with the payload using http_request.
  4. Verification: Search the response body for the unescaped payload string.

6. Test Data Setup

  1. Requirement: The plugin must be active.
  2. Post Creation:
    wp post create --post_type=page --post_title="Doodle Page" --post_status=publish --post_content='[dooodl]'
    
  3. Note the URL: The resulting page URL (e.g., /doodle-page/) will be the target for the reflection.

7. Expected Results

  • The HTTP response should contain the literal payload string.
  • Example: If the request is GET /doodle-page/?id=%22%3E%3Cscript%3Ealert(1)%3C/script%3E, the source code of the returned page should contain "><script>alert(1)</script> instead of properly encoded &quot;&gt;....

8. Verification Steps

  1. Manual Source Check:
    # Use the execution agent's http_request to fetch the page
    # Look for the payload in the raw HTML response
    
  2. Browser Confirmation: Use the browser_navigate tool to the crafted URL and check for an alert dialog or evidence of script execution in the console/DOM.

9. Alternative Approaches

  • Search Parameter: Check if the plugin registers a custom query variable for searching doodles (e.g., ?s_doodle=<payload>).
  • Admin Reflection: Check if the id parameter is reflected in the WordPress admin dashboard (e.g., wp-admin/admin.php?page=dooodl&id=<payload>). This would require an active admin session but would increase severity.
  • AJAX Reflection: If the reflection happens via an AJAX call, check admin-ajax.php?action=dooodl_get_data&id=<payload>. This would likely require the nopriv handler for unauthenticated access.
Research Findings
Static analysis — not yet PoC-verified

Summary

The Dooodl plugin for WordPress is vulnerable to Reflected Cross-Site Scripting (XSS) in versions up to and including 2.3.0. This vulnerability exists because the plugin fails to properly sanitize user-controlled input from URL parameters before reflecting it back into the page, allowing attackers to execute arbitrary JavaScript in the context of a victim's browser.

Exploit Outline

The exploit targets unauthenticated users visiting a page containing the [dooodl] shortcode. An attacker crafts a malicious link targeting a page with this shortcode and appends a payload to a vulnerable GET parameter (likely 'id' or 'doodle'), such as ?id="><script>alert(document.domain)</script>. When a victim clicks the link, the plugin reflects the unescaped payload into the HTML response—potentially within an HTML attribute like a div ID or inside a script localization block—causing the browser to execute the injected script.

Check if your site is affected.

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