CVE-2025-69386

RVCFDI para Woocommerce <= 8.1.8 - 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 RVCFDI para Woocommerce plugin for WordPress is vulnerable to Reflected Cross-Site Scripting in versions up to, and including, 8.1.8 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.8
PublishedFebruary 9, 2026
Last updatedFebruary 16, 2026
Research Plan
Unverified

This research plan outlines the steps to identify and exploit a reflected Cross-Site Scripting (XSS) vulnerability in the **RVCFDI para Woocommerce** plugin (versions <= 8.1.8). ### 1. Vulnerability Summary The **RVCFDI para Woocommerce** plugin fails to sufficiently sanitize and escape user-contro…

Show full research plan

This research plan outlines the steps to identify and exploit a reflected Cross-Site Scripting (XSS) vulnerability in the RVCFDI para Woocommerce plugin (versions <= 8.1.8).

1. Vulnerability Summary

The RVCFDI para Woocommerce plugin fails to sufficiently sanitize and escape user-controlled input from HTTP parameters before echoing them back into the HTML response. This allows an attacker to craft a malicious URL that, when clicked by a victim (such as a site administrator), executes arbitrary JavaScript in the context of the victim's browser session.

2. Attack Vector Analysis

  • Type: Reflected XSS
  • Endpoint: Likely an admin settings page (wp-admin/admin.php) or a WooCommerce order-related page where the plugin reflects status messages or tab identifiers.
  • Vulnerable Parameters (Suspected): tab, section, msg, error, order_id, or rvcfdi_action.
  • Authentication Level: Unauthenticated to craft the link; requires a logged-in user (typically an administrator) to click the link for maximum impact.
  • Preconditions: The plugin must be active.

3. Code Flow (Search Strategy)

Since source files are not provided, the following search strategy must be used to locate the sink:

  1. Identify Sinks: Search for raw echoes of superglobals in the plugin directory.

    grep -rnE "echo.*\\$_(GET|REQUEST|POST)" wp-content/plugins/rvcfdi-para-woocommerce/
    
  2. Target Logic: Focus on files handling admin settings or order displays:

    • rvcfdi-para-woocommerce.php (Main entry)
    • includes/admin/ or admin/ directory files.
    • Hooks like admin_notices or woocommerce_admin_order_data_after_order_details.
  3. Trace the Sink:

    • Look for code similar to: echo $_GET['tab']; or echo $_GET['msg'];
    • Verify if esc_html(), esc_attr(), or wp_kses() are missing.

4. Nonce Acquisition Strategy

Reflected XSS vulnerabilities often occur during the initial page load or within error/status messages that do not require a nonce.

  • If the sink is in an Admin Page: Nonces are typically not checked for simple GET requests to view a page (e.g., admin.php?page=rvcfdi-settings&tab=...).
  • If a nonce is required:
    1. The agent should check if the nonce is exposed in the page source via wp_localize_script.
    2. Check for JS variables like rvcfdi_vars or rvcfdi_admin_data.
    3. Use browser_eval to extract it: window.rvcfdi_vars?.nonce.

5. Exploitation Strategy

Once the vulnerable parameter is identified (e.g., tab), follow these steps:

  1. Identify the Page: Determine the page slug for the plugin (e.g., rvcfdi-settings).
  2. Construct Payload:
    • Basic: <script>alert(document.domain)</script>
    • Attribute Breakout (if reflected in a value or id): "><script>alert(1)</script>
  3. Execute via HTTP Request:
    Use http_request as a logged-in administrator to simulate the victim clicking the link.
    • URL: http://localhost:8080/wp-admin/admin.php?page=[SLUG]&tab=<script>alert(1)</script>
  4. Confirm Execution:
    Use browser_navigate to the malicious URL and check for an alert or the presence of the unsanitized script in the DOM.

6. Test Data Setup

  1. Plugin Activation: Ensure the plugin is active.
    wp plugin activate rvcfdi-para-woocommerce
    
  2. WooCommerce Context: If the vulnerability is in the order view, create a dummy order.
    wp post create --post_type=shop_order --post_status=wc-processing --post_title="XSS Test Order"
    
  3. Administrator Session: Ensure the agent has the cookies for an administrator user to access /wp-admin/ pages.

7. Expected Results

  • The HTTP response should contain the literal string provided in the parameter (e.g., <script>alert(1)</script>) without HTML entity encoding.
  • In a browser context, the JavaScript should execute, demonstrating the ability to perform actions on behalf of the user.

8. Verification Steps

  1. Source Check:
    # Check if the payload is reflected unencoded
    curl -s -b admin_cookies.txt "http://localhost:8080/wp-admin/admin.php?page=[SLUG]&tab=UNSANI_CANARY" | grep "UNSANI_CANARY"
    
  2. DOM Check:
    Use browser_eval to check if a specific element or global variable injected by the payload exists.

9. Alternative Approaches

  • Action-based Reflection: If $_GET['tab'] is not vulnerable, check $_GET['rvcfdi_action'] or $_GET['error_code'].
  • Redirect Reflection: Some plugins reflect parameters in "Success" or "Error" banners after a form submission. Test by submitting settings with a malicious msg parameter if the plugin uses a pattern like admin.php?page=...&msg=Settings+Saved.
  • WooCommerce Checkout: Check if the XSS triggers on the order-received (thank you) page if custom CFDI data is passed via URL.
Research Findings
Static analysis — not yet PoC-verified

Summary

The RVCFDI para Woocommerce plugin for WordPress is vulnerable to Reflected Cross-Site Scripting (XSS) in versions up to and including 8.1.8. This occurs because the plugin fails to sufficiently sanitize and escape user-controlled input from HTTP parameters before echoing them back into the HTML response on administrative pages.

Exploit Outline

1. Identify an administrative page or WooCommerce order-related page handled by the plugin, such as `wp-admin/admin.php?page=rvcfdi-settings`. 2. Identify a reflected parameter within that page, likely `tab`, `section`, `msg`, `error`, or `rvcfdi_action`. 3. Construct a malicious URL containing a JavaScript payload (e.g., `<script>alert(document.domain)</script>`) assigned to the vulnerable parameter. 4. Trick an authenticated WordPress administrator into clicking the crafted link. 5. Upon navigation, the payload executes in the context of the administrator's browser session, allowing for actions such as session hijacking or administrative configuration changes.

Check if your site is affected.

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