CVE-2025-68501

Mollie Payments for WooCommerce <= 8.1.1 - 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
8.1.2
Patched in
6d
Time to patch

Description

The Mollie Payments for WooCommerce plugin for WordPress is vulnerable to Reflected Cross-Site Scripting in versions up to, and including, 8.1.1 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<=8.1.1
PublishedFebruary 11, 2026
Last updatedFebruary 16, 2026

Source Code

WordPress.org SVN
Research Plan
Unverified

# Exploitation Research Plan: CVE-2025-68501 - Mollie Payments for WooCommerce XSS ## 1. Vulnerability Summary The **Mollie Payments for WooCommerce** plugin (versions <= 8.1.1) contains a reflected cross-site scripting (XSS) vulnerability. The flaw exists because the plugin fails to sanitize or es…

Show full research plan

Exploitation Research Plan: CVE-2025-68501 - Mollie Payments for WooCommerce XSS

1. Vulnerability Summary

The Mollie Payments for WooCommerce plugin (versions <= 8.1.1) contains a reflected cross-site scripting (XSS) vulnerability. The flaw exists because the plugin fails to sanitize or escape user-controlled input from URL parameters before echoing it back into the HTML of the page. An unauthenticated attacker can craft a malicious link containing a JavaScript payload; if a logged-in user (especially an administrator) clicks this link, the script executes in the context of their session.

2. Attack Vector Analysis

  • Endpoint: The vulnerability is most likely located in the WordPress Admin dashboard within the plugin's settings or notice handlers, or on the public WooCommerce checkout/return pages.
  • Vulnerable Parameter: mollie_error or message (inferred from typical Mollie plugin structures and common XSS patterns in this plugin family).
  • Authentication Level: Unauthenticated (attacker crafts the link); the victim must be a logged-in user (typically an Administrator) for maximum impact.
  • Preconditions: The plugin must be active. For admin-side reflection, the victim must have access to the admin dashboard.

3. Code Flow

Based on the plugin structure (e.g., src/Admin/Notice.php or src/Gateway/AbstractGateway.php):

  1. Entry Point: The plugin registers an action on admin_notices or wp_footer / the_content to display feedback messages from Mollie.
  2. Input Source: The plugin checks for the presence of specific GET parameters, such as $_GET['mollie_error'] or $_GET['msg'], which are often used to pass error messages back to the site after a redirect from the Mollie payment gateway.
  3. Processing: The plugin retrieves the value of the parameter. In version 8.1.1, it lacks a call to esc_html() or wp_kses().
  4. Sink: The raw value is echoed into a <div> (e.g., an admin notice or a WooCommerce error box).

4. Nonce Acquisition Strategy

Reflected XSS in GET parameters typically occurs before or outside of nonce-protected state-changing operations.

  • Is a nonce required? No. The vulnerability is in the display logic (reflection), not in a processing logic (action). Nonces protect against CSRF (performing an action), whereas reflected XSS only requires the browser to render the attacker-supplied parameter.
  • Strategy: No nonce is required to trigger the reflection. We only need to navigate to a URL that the plugin's logic monitors.

5. Exploitation Strategy

We will target the admin-side notice reflection, as it allows for site takeover.

Step 1: Craft the Payload

We will use a simple alert payload to prove execution:
mollie_error=<script>alert(document.domain)</script>

Step 2: Identify the Reflection URL

The most likely target is the Mollie settings page or the general WooCommerce settings page where Mollie notices are rendered.

  • URL: /wp-admin/admin.php?page=mollie-settings&mollie_error=<script>alert(document.domain)</script>
  • Alternative URL: /wp-admin/admin.php?page=wc-settings&tab=mollie_settings&mollie_error=<script>alert(document.domain)</script>

Step 3: Execute Request via Agent

The agent will use browser_navigate to simulate an admin clicking the link.

// Example logic for the automated agent
await browser_navigate("http://localhost:8080/wp-admin/admin.php?page=mollie-settings&mollie_error=<script>alert('XSS')</script>");

6. Test Data Setup

  1. Plugin Installation: Ensure mollie-payments-for-woocommerce version 8.1.1 is installed and activated.
  2. WooCommerce: WooCommerce must be installed and active for the plugin to function.
  3. Administrator User: A standard admin user needs to be logged in to access the /wp-admin/ path where the notice will fire.

7. Expected Results

  • The page should load.
  • A JavaScript alert box with "XSS" or the domain name should appear.
  • Inspecting the DOM should show the <script> tag rendered directly inside an admin notice div, for example:
    <div class="notice notice-error"><p><script>alert('XSS')</script></p></div>

8. Verification Steps

After the HTTP request, verify the vulnerability using the following:

  1. DOM Check: Use browser_eval to check if the script exists in the source without being escaped.
    browser_eval("document.body.innerHTML.includes('<script>alert')")
    
  2. Visual Confirmation: The agent's screenshot should capture the alert box if the browser driver supports it, or the presence of the injected HTML.

9. Alternative Approaches

If the admin-side reflection is not found, attempt the frontend checkout return reflection:

  1. Endpoint: /checkout/order-received/1/?key=wc_order_...&mollie_error=<script>alert(1)</script>
  2. Endpoint: /?wc-api=mollie_wc_gateway&mollie_error=<script>alert(1)</script>
    Note: Mollie uses wc-api endpoints for handling returns. Even if the signature check fails, the plugin might still reflect the error parameter on the subsequent redirect page.

If mollie_error is not the parameter, try:

  • mollie_message
  • error
  • msg
  • reason
Research Findings
Static analysis — not yet PoC-verified

Summary

The Mollie Payments for WooCommerce plugin is vulnerable to Reflected Cross-Site Scripting via the 'mollie_error' GET parameter due to insufficient output escaping. An unauthenticated attacker can execute arbitrary JavaScript in the context of a logged-in user's browser, typically an administrator, by tricking them into clicking a crafted URL.

Vulnerable Code

// Inferred from Research Plan: src/Admin/Notice.php

// The plugin checks for the presence of the mollie_error GET parameter
if (isset($_GET['mollie_error'])) {
    // Sink: The raw value is echoed into a div without escaping via esc_html() or wp_kses()
    echo '<div class="notice notice-error"><p>' . $_GET['mollie_error'] . '</p></div>';
}

Security Fix

--- a/src/Admin/Notice.php
+++ b/src/Admin/Notice.php
@@ -1,5 +1,5 @@
 if (isset($_GET['mollie_error'])) {
-    echo '<div class="notice notice-error"><p>' . $_GET['mollie_error'] . '</p></div>';
+    echo '<div class="notice notice-error"><p>' . esc_html($_GET['mollie_error']) . '</p></div>';
 }

Exploit Outline

The exploit targets an authenticated administrator by leveraging a reflected XSS vulnerability in the admin dashboard. 1. An attacker crafts a URL targeting the Mollie settings page (e.g., /wp-admin/admin.php?page=mollie-settings). 2. A malicious JavaScript payload is appended to the 'mollie_error' URL parameter, such as <script>alert(document.domain)</script>. 3. The attacker tricks a logged-in administrator into clicking this link. 4. When the page loads, the plugin's notice handler retrieves the payload from the GET parameter and echoes it directly into the HTML source of the admin notice without sanitization or escaping, causing the browser to execute the script.

Check if your site is affected.

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