CVE-2025-68856

Mopinion Feedback Form <= 1.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
Unpatched
Patched in
N/A
Time to patch

Description

The Mopinion Feedback Form plugin for WordPress is vulnerable to Reflected Cross-Site Scripting in versions up to, and including, 1.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<=1.1.1
PublishedJanuary 27, 2026
Last updatedFebruary 2, 2026
Affected pluginmopinion-feedback-form
Research Plan
Unverified

# Exploitation Research Plan - CVE-2025-68856 ## 1. Vulnerability Summary The **Mopinion Feedback Form** plugin for WordPress (versions <= 1.1.1) is vulnerable to **Reflected Cross-Site Scripting (XSS)**. The vulnerability exists because the plugin fails to sufficiently sanitize and escape user-sup…

Show full research plan

Exploitation Research Plan - CVE-2025-68856

1. Vulnerability Summary

The Mopinion Feedback Form plugin for WordPress (versions <= 1.1.1) is vulnerable to Reflected Cross-Site Scripting (XSS). The vulnerability exists because the plugin fails to sufficiently sanitize and escape user-supplied input from URL parameters before echoing it back into the HTML response. An unauthenticated attacker can exploit this by crafting a malicious URL that, when clicked by a victim, executes arbitrary JavaScript in the context of the victim's session.

2. Attack Vector Analysis

  • Endpoint: Any page where the plugin's feedback form or settings are rendered, typically including the WordPress admin dashboard (if the user is logged in) or potentially public-facing pages if the plugin reflects input globally.
  • Vulnerable Parameter(s): Likely parameters include page, view, tab, or plugin-specific keys like mopinion_id or id. (Inferred based on typical Reflected XSS patterns in WordPress feedback plugins).
  • Authentication: Unauthenticated. The vulnerability is triggered by a GET request containing the payload.
  • Preconditions: The plugin must be active. For an unauthenticated attack to be effective, the reflection must occur on a public-facing page or the attacker must trick an admin into clicking a link.

3. Code Flow (Inferred)

  1. Entry Point: The plugin registers a hook (e.g., init, admin_init, or a shortcode handler like add_shortcode) that monitors incoming HTTP GET requests.
  2. Source: The code retrieves a value from $_GET['<param>'] or $_REQUEST['<param>'].
  3. Processing: The plugin fails to apply sanitization functions like sanitize_text_field() or absint().
  4. Sink: The unsanitized value is passed to an output function such as echo, printf, or print within an HTML context (e.g., inside an attribute or a <script> tag) without using escaping functions like esc_attr() or esc_html().

4. Nonce Acquisition Strategy

Reflected XSS typically occurs during the rendering of a page and does not require a nonce, as it is not a state-changing operation (like a POST request). However, if the reflection is found within an AJAX handler or a specific admin sub-page that requires a nonce for access:

  1. Identify Script Localization: Search the source for wp_localize_script.
  2. Identify Variable: Look for the JS object name (e.g., mopinion_vars).
  3. Extraction:
    • Use browser_navigate to visit the plugin's settings page or a page containing the form.
    • Use browser_eval("window.mopinion_vars?.nonce") to extract the nonce if needed.

Note: Since the CVE is for Reflected XSS, the payload is most likely delivered via a simple GET parameter, bypassing nonce requirements entirely.

5. Exploitation Strategy

Step 1: Discovery of Reflection Point

We will use the http_request tool to probe common parameters.

  • Payload: "><script>alert(document.domain)</script>
  • Test URLs:
    1. http://localhost:8080/wp-admin/admin.php?page=mopinion-feedback-form&tab=<PAYLOAD>
    2. http://localhost:8080/?mopinion_id=<PAYLOAD>
    3. http://localhost:8080/wp-admin/admin.php?page=mopinion-feedback-form&id=<PAYLOAD>

Step 2: Crafting the Final Exploit

Once the parameter is identified (e.g., tab):

  • Request Method: GET
  • URL: http://localhost:8080/wp-admin/admin.php?page=mopinion-feedback-form&tab=%22%3E%3Cscript%3Ealert(1)%3C/script%3E
  • Headers:
    • Accept: text/html

Step 3: Execution

The automated agent will navigate to the crafted URL and check if the payload <script>alert(1)</script> appears unescaped in the response body.

6. Test Data Setup

  1. Install Plugin: Ensure mopinion-feedback-form version 1.1.1 is installed and activated.
  2. Plugin Configuration:
    • Navigate to the Mopinion settings page in the admin dashboard to ensure it is initialized.
    • (Optional) If the reflection occurs via shortcode, create a page:
      wp post create --post_type=page --post_status=publish --post_title="Feedback" --post_content="[mopinion-feedback-form]"

7. Expected Results

  • The HTTP response will contain the literal, unescaped string: "><script>alert(1)</script>.
  • If viewed in a browser, a JavaScript alert box would trigger.
  • The payload will likely break out of an existing HTML attribute (e.g., value="...") or a JavaScript string variable.

8. Verification Steps

  1. Response Inspection: Use http_request and verify that the output contains the payload exactly as sent, without HTML entity encoding (e.g., no &lt; or &gt;).
  2. Context Check: Confirm the sink is dangerous (e.g., inside a <div>, <span>, or an attribute like value or src).
  3. WP-CLI Check: Since this is a frontend/UI vulnerability, WP-CLI cannot "verify" the XSS execution, but it can be used to confirm the plugin version:
    wp plugin get mopinion-feedback-form --field=version

9. Alternative Approaches

  • Attribute Injection: If <script> tags are filtered by a WAF or basic sanitization, try injecting event handlers: x" onmouseover="alert(1)" b=".
  • Admin-Context CSRF-to-XSS: If the reflection only works for logged-in admins, demonstrate how an unauthenticated attacker can use a link to target an admin.
  • JavaScript Template Injection: Check if the plugin uses a JS framework (like Vue or jQuery) where input might be reflected into a template, allowing for {{constructor.constructor('alert(1)')()}}.
Research Findings
Static analysis — not yet PoC-verified

Summary

The Mopinion Feedback Form plugin for WordPress (versions up to and including 1.1.1) is vulnerable to Reflected Cross-Site Scripting. This occurs because the plugin fails to sanitize or escape user-supplied input from URL parameters before echoing it back into the HTML response, allowing unauthenticated attackers to execute arbitrary JavaScript in the victim's session.

Exploit Outline

The exploit targets reflected parameters such as 'tab', 'view', or 'id' on the plugin's settings page or a page rendering the feedback form. An attacker crafts a GET request with a payload like `"><script>alert(document.domain)</script>` in the vulnerable parameter. When a victim (typically a logged-in administrator) clicks this crafted link, the malicious script is executed in their browser context because the plugin renders the input without proper output escaping (e.g., missing esc_attr() or esc_html()).

Check if your site is affected.

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